Глава 12 · Множество увлекательных мини-проектов!

Проект: анализатор текста и частота слов

Строки, циклы, множества и словари — впервые вместе, в одной программе, которая рассказывает о тексте больше, чем видно на первый взгляд.

Используем
stringsциклыlistsetdict
Уровень
★★★ интеграционный
Результат
текстовый отчёт

Что создаём

Программу, которая получает предложение и считает про него всё интересное: сколько символов, слов, уникальных слов и какое слово встречается чаще всего.

Введите текст: Python is great and python is fun
Символов: 33
Слов: 7
Уникальных слов: 5
Самое частое слово: 'python' — 2 раз(а)
Детерминированный пример выполнения

Конвейер обработки данных

Исходный текст'Python python code'нормализация.lower()split()['python','python','code']set(...){'python','code'}
Текст → нормализация → список слов → множество уникальных слов
Почему set()
Множество естественно устраняет повторы (глава 11) — количество уникальных слов равно просто len(set(words)), без единой ручной проверки.

Этап 1 — базовые подсчёты

analizator_etap1.py
text = input("Введите текст: ")

words = text.split()

print("Символов:", len(text))
print("Слов:", len(words))

Этап 2 — уникальные слова

analizator_etap2.py
normalized = text.lower().split()
unikalnye = set(normalized)

print("Уникальных слов:", len(unikalnye))
Без .lower() 'Python' и 'python' — разные слова
Строки сравниваются посимвольно и с учётом регистра (глава 8) — "Python" != "python". Если забыть .lower() перед подсчётом уникальных слов, они посчитаются как два разных слова.

Этап 3 — частота слов

Тот же алгоритм, что подробно разбирался в главе 11 (§11.24) — теперь как часть более крупной программы:

chastota_slov.py
counts = {}
for word in normalized:
    counts[word] = counts.get(word, 0) + 1
wordстарое значениеновое значение
python0 (get вернул 0)1
is01
great01
and01
python12
is12

Находим самое частое слово

samoe_chastoe.py
samoe_chastoe = max(counts, key=counts.get)
print(f"Самое частое слово: {samoe_chastoe!r}{counts[samoe_chastoe]} раз(а)")
max() с key — не только для чисел
max(counts, key=counts.get) перебирает КЛЮЧИ словаря (глава 11) и выбирает тот, для которого counts.get(ключ) максимален — компактный способ найти «самое частое» без ручного цикла со сравнением.

Финальный код

analizator_teksta.py
text = input("Введите текст: ")
normalized = text.lower().split()

unikalnye = set(normalized)

counts = {}
for word in normalized:
    counts[word] = counts.get(word, 0) + 1
samoe_chastoe = max(counts, key=counts.get)

print("Символов:", len(text))
print("Слов:", len(normalized))
print("Уникальных слов:", len(unikalnye))
print(f"Самое частое слово: {samoe_chastoe!r}{counts[samoe_chastoe]} раз(а)")

Debug Lab

Если посчитать len(unikalnye) из слов БЕЗ .lower(), а частоту слов — уже ПОСЛЕ приведения к нижнему регистру, эти два числа могут не biться друг с другом. Почему?

Используйте один и тот же нормализованный список везде
Если unikalnye считается из необработанных слов, а counts — из normalized, то «Python» и «python» попадут в unikalnye как два разных слова, а в counts — как одно. Всегда считайте от одного и того же, уже нормализованного, списка.
Практика: анализатор текста — символы, слова, уникальные слова
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →
Практика: частота слов и самое частое слово
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →