Строка как данные

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

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.

Символьная лента

Строка хранит буквы, цифры, пробелы и табуляцию. Пробел — тоже символ. input() читает строку, не удаляя её начальные и конечные пробелы.

дом··и⇥кот

· — пробел, ⇥ — табуляция. Три слова, но десять символов.

Перебор без списка

for ch in s берёт символы по одному. ch меняется на каждом шаге. Счётчик n создаём до цикла; обнуление внутри цикла уничтожило бы накопленный результат.

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.

Частота символа

Сравнение ch == c учитывает регистр. А и а — разные символы. Нужен проход по всей строке, включая её концы.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
а0
90
90
20
А1
в1
а1
·1
а1
21
y1

Вывод: 1

Цифры в тексте

Для обычных десятичных цифр проверяем "0" <= ch <= "9". Количество цифр и сумма цифр — разные задачи.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
б0
01
02
23
14
15
·5
в5
⇥5
26
x6
Б6
Б6

Вывод: 6

Сумма цифр

В счётчик прибавляется int(ch), а не 1. Преобразование возможно только после проверки, что перед нами цифра.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
11
б1
23
Б3
x3
Б3
б3
б3
912
·12
Б12
·12
x12

Вывод: 12

Что считать словом

Слово — непрерывный участок непробельных символов. Несколько пробелов не создают пустых слов. Пунктуацию не вырезаем: здесь границы задают только пробельные символы.

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.

Два состояния

Вне слова → первая непробельная буква → внутри слова. Внутри слова → пробельный символ → вне слова. Счётчик увеличивается только на переходе «вошли в слово».

ВНЕ СЛОВАВНУТРИ СЛОВАне пробел: n + 1разделитель

Считаем слова

isspace() распознаёт в том числе табуляцию. При каждом разделе сбрасываем in_word, но счётчик не увеличиваем.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
91true
б1true
в1true
в1true
·1false
Б2true
02true
в2true
а2true
·2false
03true

Вывод: 3

Как завершить последнее слово

Если обработка происходит на разделителе, последнему слову нужен завершающий разделитель. Перебор s + " " добавляет его без изменения исходной строки.

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.

Слова заданной длины

Накапливаем length по символам. На разделителе сравниваем с k, затем обнуляем. Повторные разделители дают length = 0 и не засчитываются при k >= 1.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
x01
202
203
y04
x05
⇥00
б01
·00
А01
902
903
в04
·00
x01
002
·10
·10

Вывод: 1

Максимальная длина

best хранит максимальную длину законченного слова. Сравниваем best и length на каждом разделителе; дополнительный пробел завершит последнее слово.

Условие: что напечатает программа?

фрагмент программы — набери его сам
Открыть шаги
СимволСчётчик / bestДлина / в слове
001
·10
011
012
113
·30
Б31
x32
в33
·30
·30
·30
·30
·30

Вывод: 3

Тесты, которые нельзя пропустить

Пустая строка; только разделители; одно слово; пробелы в начале и конце; табуляция; последнее слово подходит; искомого символа нет; буквы отличаются регистром.

ТекстСлов
пустая строка0
только пробелы0
дом и лес 3
дом⇥лес2

Три программы в IDLE

Точные условия и имена файлов — в практикуме под тренажёром. Не копируй целиком пример со слайда: учти входные данные и крайние случаи своей задачи.

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.

Проверка и ДЗ

Проверка.bat → Найти мои файлы → Проверить всё. Оценка за практикум: 1/2/3 программы дают 3/4/5. ДЗ SW — шесть типов с добором без потолка; исправление после подсказки не засчитывается.

строка→символ→условие→счётчик

Строка остаётся исходной. Переменные хранят только нужную информацию о пройденной части.