#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}. Измерения могут показать, есть ли разница в производительности для фактического ввода.
Комментариев нет:
Отправить комментарий