Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как найти в строке три слова подряд?

#python #алгоритм #python_3x



  Дана строка, в ней слова и цифры, разделенные пробелом. Надо найти в этой строке
три слова подряд. 


def m (words) :
    a = 0
    for w in words.split() :
        pass
        while w.isalpha() is True :
            a += 1
            if a == 3 :
                return True
            else :
                return False    # вот на этом я застрял.

    


Ответы

Ответ 1



Вот функция, которая делает то, что вам нужно. def m (words) : count = 0 for w in words.split() : if w.isalpha() : count += 1 if count == 3 : return True else : count = 0 return False # вот на этом я застрял. Функция бежит по словам в цикле. Если слово состоит из букв(функция isalpha() проверяем это), то накапливает счетчик(инкрементируем переменную), иначе сбрасывает его в ноль. Если счетчик накопился из трех слов, то значит мы нашли в строке 3 подряд слова.

Ответ 2



Задачу можно решить, например, следующим образом: def three_words(s): t = s.split() start = end = 0 while end < len(t): if t[end].isalpha(): if end - start >= 2: return t[start:end + 1] end += 1 else: start = end = end + 1 Метод вернёт список из первых трёх встретившихся подряд слов или None если такой группы слов нет.

Ответ 3



Чтобы найти три слова подряд в строке и вывести их: words = text.split() for triple in zip(words, words[1:], words[2:]): if all(s.isalpha() for s in triple): print(*triple) break else: print("not found") Это прямолинейный для Питон-программиста код, но он выполняет ненужное копирование и сравнения. Вот код, схожий с решением, использующим count из ответа @Alexcei Shmakov—данный вариант печатает саму тройку слов, а не только есть ли она в строке, как count решение: triple = [] for s in text.split(): if s.isalpha(): triple.append(s) if len(triple) == 3: print(*triple) break else: del triple[:] # empty else: print("not found") Чтобы не создавать возможно большой список строк, разделённых пробелом, можно регулярные выражения использовать: import re m = re.search(r'\s+'.join([r'[^\d\s]+']*3), text) print(m.group() if m else "not found") Этот вариант ищет символы, которые не являются числами, пробелами (что подходит для постановки задачи в вопросе), так как re модуль не поддерживает аналог str.isalpha. regex модуль поддерживает \p{Letter}. Измерения могут показать, есть ли разница в производительности для фактического ввода.

Комментариев нет:

Отправить комментарий