Строка как данные
Сегодня делаем три программы анализа текста: частота символа, количество слов, слова заданной длины. Компьютер должен одинаково обработать обычный текст, пустую строку и лишние разделители.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.
Символьная лента
Строка хранит буквы, цифры, пробелы и табуляцию. Пробел — тоже символ. input() читает строку, не удаляя её начальные и конечные пробелы.
· — пробел, ⇥ — табуляция. Три слова, но десять символов.
Перебор без списка
for ch in s берёт символы по одному. ch меняется на каждом шаге. Счётчик n создаём до цикла; обнуление внутри цикла уничтожило бы накопленный результат.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.
Частота символа
Сравнение ch == c учитывает регистр. А и а — разные символы. Нужен проход по всей строке, включая её концы.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| а | 0 | |
| 9 | 0 | |
| 9 | 0 | |
| 2 | 0 | |
| А | 1 | |
| в | 1 | |
| а | 1 | |
| · | 1 | |
| а | 1 | |
| 2 | 1 | |
| y | 1 |
Вывод: 1
Цифры в тексте
Для обычных десятичных цифр проверяем "0" <= ch <= "9". Количество цифр и сумма цифр — разные задачи.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| б | 0 | |
| 0 | 1 | |
| 0 | 2 | |
| 2 | 3 | |
| 1 | 4 | |
| 1 | 5 | |
| · | 5 | |
| в | 5 | |
| ⇥ | 5 | |
| 2 | 6 | |
| x | 6 | |
| Б | 6 | |
| Б | 6 |
Вывод: 6
Сумма цифр
В счётчик прибавляется int(ch), а не 1. Преобразование возможно только после проверки, что перед нами цифра.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| 1 | 1 | |
| б | 1 | |
| 2 | 3 | |
| Б | 3 | |
| x | 3 | |
| Б | 3 | |
| б | 3 | |
| б | 3 | |
| 9 | 12 | |
| · | 12 | |
| Б | 12 | |
| · | 12 | |
| x | 12 |
Вывод: 12
Что считать словом
Слово — непрерывный участок непробельных символов. Несколько пробелов не создают пустых слов. Пунктуацию не вырезаем: здесь границы задают только пробельные символы.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.
Два состояния
Вне слова → первая непробельная буква → внутри слова. Внутри слова → пробельный символ → вне слова. Счётчик увеличивается только на переходе «вошли в слово».
Считаем слова
isspace() распознаёт в том числе табуляцию. При каждом разделе сбрасываем in_word, но счётчик не увеличиваем.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| 9 | 1 | true |
| б | 1 | true |
| в | 1 | true |
| в | 1 | true |
| · | 1 | false |
| Б | 2 | true |
| 0 | 2 | true |
| в | 2 | true |
| а | 2 | true |
| · | 2 | false |
| 0 | 3 | true |
Вывод: 3
Как завершить последнее слово
Если обработка происходит на разделителе, последнему слову нужен завершающий разделитель. Перебор s + " " добавляет его без изменения исходной строки.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.
Слова заданной длины
Накапливаем length по символам. На разделителе сравниваем с k, затем обнуляем. Повторные разделители дают length = 0 и не засчитываются при k >= 1.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| x | 0 | 1 |
| 2 | 0 | 2 |
| 2 | 0 | 3 |
| y | 0 | 4 |
| x | 0 | 5 |
| ⇥ | 0 | 0 |
| б | 0 | 1 |
| · | 0 | 0 |
| А | 0 | 1 |
| 9 | 0 | 2 |
| 9 | 0 | 3 |
| в | 0 | 4 |
| · | 0 | 0 |
| x | 0 | 1 |
| 0 | 0 | 2 |
| · | 1 | 0 |
| · | 1 | 0 |
Вывод: 1
Максимальная длина
best хранит максимальную длину законченного слова. Сравниваем best и length на каждом разделителе; дополнительный пробел завершит последнее слово.
Условие: что напечатает программа?
Открыть шаги
| Символ | Счётчик / best | Длина / в слове |
|---|---|---|
| 0 | 0 | 1 |
| · | 1 | 0 |
| 0 | 1 | 1 |
| 0 | 1 | 2 |
| 1 | 1 | 3 |
| · | 3 | 0 |
| Б | 3 | 1 |
| x | 3 | 2 |
| в | 3 | 3 |
| · | 3 | 0 |
| · | 3 | 0 |
| · | 3 | 0 |
| · | 3 | 0 |
| · | 3 | 0 |
Вывод: 3
Тесты, которые нельзя пропустить
Пустая строка; только разделители; одно слово; пробелы в начале и конце; табуляция; последнее слово подходит; искомого символа нет; буквы отличаются регистром.
| Текст | Слов |
|---|---|
| пустая строка | 0 |
| только пробелы | 0 |
| дом и лес | 3 |
| дом⇥лес | 2 |
Три программы в IDLE
Точные условия и имена файлов — в практикуме под тренажёром. Не копируй целиком пример со слайда: учти входные данные и крайние случаи своей задачи.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.
Проверка и ДЗ
Проверка.bat → Найти мои файлы → Проверить всё. Оценка за практикум: 1/2/3 программы дают 3/4/5. ДЗ SW — шесть типов с добором без потолка; исправление после подсказки не засчитывается.
Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.