Сделал 10 задание
This commit is contained in:
parent
3944dc3eba
commit
c91dd3a894
61
lesson.10.py
Normal file
61
lesson.10.py
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
''' ****** Задание 10 из 20 *********
|
||||
* Частотный анализ — это метод подсчёта, какие символы (или слова) чаще всего встречаются в тексте.
|
||||
Это важнейший инструмент взлома многих классических шифров — от шифра Цезаря и до шифровальной машины «Энигма».
|
||||
|
||||
В этой задаче вы реализуете простейшую версию частотного анализа:
|
||||
выясните, какая буква встречается чаще других в тексте.
|
||||
|
||||
Напишите программу, которая читает строки до тех пор, пока не встретится строка 'ФИНИШ', и выводит наиболее часто встречающуюся букву (в нижнем регистре).
|
||||
|
||||
Формат ввода
|
||||
Вводятся строки, пока не будет введена строка «ФИНИШ».
|
||||
|
||||
Формат вывода
|
||||
Выводится один символ в нижнем регистре — наиболее часто встречающийся во введённой строке.
|
||||
|
||||
Примечания
|
||||
Пробелы в анализе не участвуют.
|
||||
Если в результате анализа получено несколько ответов, следует вывести первый по алфавиту.
|
||||
|
||||
У данной задачи множество "быстрых" способов решения, но в этом параграфе мы просим вас сосредоточиться на использовании строк и списков.
|
||||
|
||||
|
||||
Подсказка
|
||||
Организуйте два списка:
|
||||
|
||||
|
||||
letters = [] # для хранения букв
|
||||
counts = [] # для хранения количеств
|
||||
Организовав цикл по строкам, можете обработать каждую из них следующим образом:
|
||||
|
||||
|
||||
for letter in row:
|
||||
letter = letter.lower()
|
||||
if (index := letters.index(letter)) != -1: # значит буква уже встречалась
|
||||
counts[index] += 1
|
||||
else: # буква встретилась в первый раз
|
||||
letters.append(letter)
|
||||
counts.append(1)
|
||||
После формирования данных, остаётся найти максимум в списке counts и вывести букву, которая ему соответствует.
|
||||
|
||||
Пример 1
|
||||
Ввод
|
||||
|
||||
Баобаб
|
||||
Белка
|
||||
Бобы
|
||||
ФИНИШ
|
||||
Вывод
|
||||
|
||||
б
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = []
|
||||
while (n := input()) != 'ФИНИШ':
|
||||
data.extend(n.lower().split())
|
||||
max_count, data = 0, ''.join(data)
|
||||
for symbol in set(data):
|
||||
max_count = max(max_count, data.count(symbol))
|
||||
print(min([i for i in set(data) if data.count(i) == max_count]))
|
||||
Loading…
Reference in a new issue