project_python.3.1/lesson.10.py

61 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

''' ****** Задание 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]))