Подсчитать количество слов в тексте с нечетным количество букв
Работа с текстом / подсказка к 1 задачке
Чтобы из текста извлечь слова, надо просто разбить текст пробелами. Делается это так:
text = "В лесу родилась елочка"
words = text.split(" ") # внутри функции указываем разделитель, то есть пробел
print(words)
в результате получим список
['В', 'лесу', 'родилась', 'елочка']
правда все становится сложнее, когда в тексте появляются всякие знаки препинания и даже переносы:
text = """
Кот покачивался в люстре, размахи которой все уменьшались,
дуя зачем-то в дуло браунинга и плюя себе на лапу.
"""
words = text.split(" ")
print(words)
в этом случае список становится сильно странным:
[
'\nКот', 'покачивался', 'в', 'люстре,',
'размахи', 'которой', 'все', 'уменьшались,',
'\nдуя', 'зачем-то', 'в', 'дуло', 'браунинга',
'и', 'плюя', 'себе', 'на', 'лапу.\n'
]
то есть тут слова склеиваются с запятыми и точками, и еще какой-то \n
появился (это на самом деле символ переноса строки).
Поэтому более грамотным способом разбиения текста на слова заключается в использовании так называемых регулярных выражений. Это особые текстовые конструкции, которые позволяют указать в качестве разделителя целое семейство символов.
Работает это так:
import re # подключаем библиотечку для работы с регулярными выражениями
text = """
Кот покачивался в люстре, размахи которой все уменьшались,
дуя зачем-то в дуло браунинга и плюя себе на лапу.
"""
words = re.split("\s", text) # тут заменяем на такую конструкцию
print(words)
у функции re.split два параметра первый это какое семейство символов использовать в качестве разделителя, мы указали \s
– в него входят пробелы и переносы строки. Ну а второй символ это собственно текст, который разбивают.
Выдаст это вот такое:
[
'', 'Кот', 'покачивался', 'в', 'люстре,',
'размахи', 'которой', 'все', 'уменьшались,',
'', 'дуя', 'зачем-то', 'в', 'дуло', 'браунинга',
'и', 'плюя', 'себе', 'на', 'лапу.', ''
]
уже симпатичнее, так как символы переноса строки \n
ушли, но правда появились пустые строки ''
. Но бог с ними, их легко отфильтровать по длине. Осталось придумать как избавится от запятых.
В регулярных выражениях есть специальный класс именуемый \w
– который соответствует все буквам и цифрам, и противоположный ему, написанный с большой буквы \W
который соответствует все символами которые не являются буквами и цифрами. Соответственно, чтобы разбить текст на слова, надо просто вместо \s
подставить \W
, пробуем
import re
text = """
Кот покачивался в люстре, размахи которой все уменьшались,
дуя зачем-то в дуло браунинга и плюя себе на лапу.
"""
words = re.split("\W", text) # заменили на \W
print(words)
проверяем
[
'', 'Кот', 'покачивался', 'в', 'люстре',
'', 'размахи', 'которой', 'все', 'уменьшались',
'', '', 'дуя', 'зачем', 'то', 'в', 'дуло', 'браунинга',
'и', 'плюя', 'себе', 'на', 'лапу', '', ''
]
красота! =)
Теперь либо только слова, либо только пустые строки. Собственно, и все. Теперь чтобы решить задачу
Подсчитать количество слов в тексте с нечетным количество букв
надо
- Завести переменную под счетчик
- В цикле проходить по всем словам в words
- Проверять длину слова через len
- И если длина слово при делении на 2 дает остаток 1 то увеличивать счетчик на 1