Восьмой урок по Python // Пишем ещё одну программу
В этом уроке узнаем еще несколько строковых функций, изучим что такое словари,и напишем программу, считающую в тексте количество наиболее часто встречающихся слов.
Начнем с того, что такое словари. Это как бы списки, только в них есть две переменные - ключ и значение. По ключу можно получить значение. При создании словаря его сперва надо объявить. Чтобы объявить пустой словарь напишем
d={}
Чтобы добавить в словарь новый элемент нужно просто присвоить ему новую пару ключ и значение. Если такой ключ уже есть в словаре, значение перезапишется. Например, добавим в словарь ключ 'Ваня' и значение 'программист'
d={}
d['Ваня']='программист'
print(d['Ваня'])
Напечатает:
программист
Изучим новые команды для работы со строками:
Разбиваем строку на кусочки
s.split('разделитель')
разбивает строку s на кусочки, по разделителю, указанному в скобках. Разделителем может служить любая строка или символ, включая пробел. Данная команда даст нам список полученных кусочков.
Например, если есть строка в которой слова указаны через запятую, можно превратить эту строку в список, указав в качестве разделителя символ запятой ','.
s='Ваня,Таня,Даша'
m=s.split(',')
print(m)
Напечатает список
['Ваня', 'Таня', 'Даша']
То есть, из строки s мы получили список m, разделив строку по разделителю.
Разделителем может быть и пробел, и любой другой символ, или строка.
s='программирование образование psk блокчейн'
m=s.split(' ')
print(m)
Здесь внутри скобок у split указан пробел. Программа напечатает список:
['программирование', 'образование', 'psk', 'блокчейн']
Делаем все слова маленькими буквами
s=s.lower()
Эта команда сделает все буквы в строке маленькими(не заглавными). Данная функция нужна, когда вы хотите сравнивать какую то строку с другой, но пользователь может ввести её как с большой так и с маленькой буквы, поэтому прежде чем сравнивать, преобразуйте ввод пользователя в маленькие буквы.
s=input('Введите ваше имя')
s=s.lower()
if(s=='иван'):
print('Привет насьальникэ!')
Считаем количество вхождений подстроки в строку
n=s.count('подстрока')
Например подсчитаем количество слов 'короче' в монологе крутого пацана.
s='короче, прикинь, я такой, короче ему бах, а он короче упал сразу'
n=s.count('короче')
print(n)
Напечатает
3
Удаляем лишние пробелы в начале и в конце строки
s=s.strip()
Иногда в конце строки пользователь может нечаянно написать пробел. Давайте удалим все пробелы в начале и в конце строки.
s=' В пустоте сокрыто Дао '
s=s.strip()
print(s)
Напечатает строку уже без пробелов вокруг неё:
В пустоте сокрыто Дао
Пишем программу, которая подсчитает каких слов больше всего во введённом тексте.
Как и в прошлом уроке, текст мы будем получать из буфера обмена, то есть у вас должен быть установлен модуль pyperclip, и прежде чем запускать нашу программу, скопируйте с любого документа какой-нибудь текст для его анализа.
Составим алгоритм работы программы.
- Получим текст из буфера обмена командой s=pyperclip.paste()
- Чтобы посчитать количество вхождений каждого из слов с помощью s.count(), нужно искать во всем тексте каждое из слов. Поэтому вначале нужно получить список всех слов.
- Преобразуем все буквы текста в маленькие, чтобы не считать к примеру 'Слово' и 'слово' разными словами.
- Теперь нужно избавиться от всех знаков препинания в тексте, заменив их с помощью replace на пустую строку.
- После того как мы избавились от знаков препинания, разобьем текст на слова, по разделителю пробел, с помощью split(' '). Получим список mas всех слов в тексте.
- Теперь с помощью цикла for x in mas переберем список всех слов, и командой s.count(x) найдем количество вхождений каждого из слов. Это количество запишем в созданный словарь dic в котором ключом будет служить слово, а значением - количество его вхождений.
Отсортируем словарь по значению в обратном порядке, применив хитрый вариант команды sorted и в цикле напечатаем первые 5 элементов, в которых значение наибольшее. То есть пять слов которые наиболее часто встречаются в тексте.
Для сортировки словаря я использовал жуткую команду
dic=sorted(dic.items(),key=lambda x:x[1],reverse=True)
Просто используйте её, не обязательно пока вникать как она работает ))
Для тестирования я скопировал текст сказки про красную шапочку в буфер обмена, и запустил нашу программу. Она успешно определила наиболее употребляемые в тексте слова.
Как видим, программа получится довольно сложной. В ней мы используем почти все ранее изученные знания, поэтому если вам будет что-то непонятно в коде, перечитайте предыдущие уроки. Можете задавать вопросы в комментариях, и не забудьте подписаться на мой блог ))