[ЗВУК] Теперь мы готовы составить словарь по списку слов. Ключ — это будет конкретное слово, а значение — количество таких слов, встречающихся в тексте. Например, слово «дочка» встретилось 200 раз, а слово «Пушкин» встретилось два раза. Список слов у нас уже есть, а словарь нам придётся создавать на самом деле неоднократно, поэтому напишем соответствующую функцию. Функция будет на вход принимать список слов, то есть текст в виде списка слов, где одно и то же слово может встречаться несколько раз. А на выходе — заполненный словарь, где к каждому слову написано, сколько раз оно встретилось в тексте. Определяем такую функцию, назовём её create_dict, которая на вход принимает список слов. Мы всё будем записывать в словарь, поэтому нам потребуется пустой словарь, назовём его dictionary. Он пока у нас пустой. Теперь будем добавлять в него слова. Но как? Смотрите: если мы слово видим в первый раз, то мы записываем его в словарь и говорим, что оно встретилось один раз. А если мы это слово уже когда-то видели, мы находим его в словаре и увеличиваем количество встречаемости этого слова — видим, что оно встретилось на один раз больше. Давайте это пропишем. То есть для всех слов в списке in list_of_words — для всех таких слов... Что мы делаем? Если оно встречается впервые, то есть если слово не в словаре — not in dictionary — тогда мы должны его в этот словарь добавить, сказать, что dictionary от этого слова — это один. А иначе... что значит иначе? Значит, уже есть такое слово в словаре. Иначе мы к значению текущему добавляем ещё единицу, то есть оно уже встречалось нам, допустим, два раза и теперь встретилось ещё раз. Получается, встречалось всего плюс один — три раза. Так, ну, и возвращаем получившийся словарь: return dictionary. Всегда, когда вы пишете что-то, что должно работать на большом объёме данных, проверьте, что оно работает на каком-то маленьком тексте. Давайте проверим на коротком тексте, который мы можем сами проанализировать, правильно всё получается или нет. Пусть у нас будет короткий текст такой: «Сегодня он гуляет, завтра он спит, послезавтра он гуляет». Сразу запишем его в виде... Чтобы не возвращаться ко всем предыдущим функциям, где нужно было удалять знаки препинания и делать аккуратный список, сразу запишем с пробелами, но без других знаков препинания, без заглавных букв. Разбиваем по пробелам и создаём словарь по списку. Что мы ожидаем? Мы видим, что слово «сегодня» встречается здесь сколько раз? Один. Слово «он» встречается раз... два... три раза, ну, и так далее. Проверим, правильно сработает сейчас функция наша или нет. Да, «сегодня» — один раз. Когда мы первый раз увидим слово «он», мы создадим ключ «он» и присвоим ему значение 1, когда мы снова встретим слово «он», мы найдём, что это слово уже было, и увеличим значение на единицу, а потом ещё увеличим, когда в третий раз встретим. Итого мы получили маленький словарик, в котором видим, что все значения подсчитаны правильно. Это хорошо, а значит, мы можем использовать и на большом тексте тоже. Давайте, раз функция наша сработала верно, применим её к большому тексту, слова большого текста лежат в списке words. Запускаем. И теперь я бы не хотела писать print и смотреть на этот словарь — представляете, какого он размера? По всему тексту, список всех слов! Нам надо посмотреть в начало этого словаря, но нет такой готовой функции — нам придётся писать её самим. Давайте, чтобы не тратить время на печатание, покажу уже на написанной функции. Здесь важно понять смысл, процесс печати здесь вторичен. Смотрите: мы хотим создать функцию, которая будет печатать часть словаря. Не весь, а какой-то его кусочек. Поэтому мы должны на вход передать тот словарь, который нужно распечатать, и откуда и до куда — нам нужно указать диапазон ключей и значений из словаря. Start — это с чего начинаем, end — чем заканчиваем. Мы будем работать со всеми словами в словаре. Смотрите, какая будет логика, что мы, например, знаем, что нам нужно распечатать с пятого по десятый. Мы заводим счётчик, который при просмотре каждого следующего слова будет увеличиваться. Как только счётчик дойдёт до пяти, мы начинаем печатать. Пятое распечатали, шестое, седьмое, восьмое, девятое, десятое, и как только счётчик доходит до десяти, мы выходим из цикла. Собственно, всё. Заводим счётчик. Для всех слов в словаре, если счётчик дошёл до старта, мы должны распечатать само слово из словаря, то есть ключ и значение, сколько раз это слово встретилось. А как только мы дошли до конца, мы выходим из цикла. Распечатали последнее слово и выходим из цикла. В конце не забываем увеличить счётчик в цикле, чтобы что-то всё-таки происходило, и мы не получили бы с вами бесконечный цикл. Хотя бесконечным он здесь и не будет, мы всегда идём только по словам в словаре. Но чтобы вывелось именно нужное нам количество, счётчик важно увеличивать. Здесь можете попробовать, что было бы, если б вы написали бы здесь не if, а elif — возможно, здесь это было бы корректнее. Давайте так и сделаем. Elif — всё-таки здесь будет скорее else, elif в данном случае. Запустим функцию и, опять же, сначала проверим, как эта функция сработает на маленьком нашем словарике. Давайте вспомним, что если мы просто распечатаем маленький словарь, то он выглядит так. Print small_dict — маленький словарь выглядит так. А если мы хотим воспользоваться нашей функцией, то посмотрим. Мы передаём в неё small_dict — а давайте передадим соответствующие номера. Считаем мы с нуля — давайте, например, второе, третье, четвёртое хотим увидеть. Значит, start — это два (ноль, один, два, ноль, один, два, три, четыре). А end — это четыре (то есть ноль, один... вот эти хотим слова увидеть). Давайте проверим, получится или нет. Запускаем. Увидели четыре слова: ноль, один, второе увидели, третье, четвёртое, и тут интересно, мы ещё и пятое увидели. А знаете, почему? Как раз потому что я поменяла if на elif, а этого не надо было делать. Почему? Потому что одновременно у нас i и больше старта, и равно end. Поэтому возвращаем обратно — elif нам здесь не поможет, elif нам здесь не нужен. Запускаем заново, смотрим. Вот, теперь всё правильно. Потому что в elif заходят только, если if не выполнился, а у нас if выполняется, поэтому так нам не подойдёт. На маленьком словаре сработало, теперь запускаем на большом. [БЕЗ_ЗВУКА] Запускаем и смотрим первые десять слов. Раз, два, три, четыре, пять, шесть, семь, восемь, девять, десять... А, ну, одиннадцать, мы ж с нулевого начинали! Первые одиннадцать слов. Они у нас в том порядке записаны, как были в тексте, а нам интересно посмотреть на самые часто встречающиеся слова и на их основе сделать какой-то вывод, то есть нам остаётся отсортировать словарь. [ЗВУК]