10.15 Словари и их применение
- Основные свойства словарей
- Словари внутри python
Посчитать количество вхождений различных слов в тексте
То же с помощью Counter
Задача_1: Подсчитать количество различных пар букв в тексте
- на вход подаётся строка, в которую могут входить: буквы, пробелы, а также любые другие символы
- буквой считается символ, на котором isalpha() возвращает True
- требуется подсчитать количество различных пар букв в тексте (заглавные и строчные буквы не считаются различными, поэтому строку сразу перевести в нижний регистр через lower())
- парой букв считаются расположенные рядом две буквы (примеры разных пар: аб, бб, wъ, щz)
- пример:
- вход: "аwба%Ба б7"
- выход: 3
- пары букв (выводить не надо): аw, wб, ба
Убрать все повторяющиеся слова из текста (однострочник)
Использование sys.argv
Использование random
Пример: генератор последовательности случайных чисел из диапазона [0…10[, которому можно передать Seed для воспроизводимой генерации последовательности:
Пример использования:1 $ python3 arget.py 2 Seed=19709 3 9 0 8 6 2 0 6 6 1 8 4 $ python3 arget.py 20 5 Seed=8038 6 0 6 0 2 2 0 5 7 8 5 5 0 6 9 3 2 2 6 8 7 7 $ python3 arget.py 7 8 Seed=16996 9 5 2 6 6 0 8 7 10 $ python3 arget.py 7 16996 11 5 2 6 6 0 8 7 12 $ python3 arget.py 17 16996 13 5 2 6 6 0 8 7 5 2 1 7 5 5 4 0 4 3 14 $ python3 arget.py 17 > output 15 Seed=64200 16
Обратите внимание на то, что диагностика Seed= выводится не на стандартный вывод, а на стандартный вывод ошибок, и поэтому не попадает в файл output при перенаправлении
- Пароль (однострочник) — пример
- Ещё пример:
$ # на самом деле https://github.com/first20hours/google-10000-english/raw/master/google-10000-english.txt $ python3 -c 'import urllib.request; import random; print(" ".join(random.sample(urllib.request.urlopen("https://tinyurl.com/z9lcu2y").read().decode().split(),4)))'
- Ещё пример:
Использование seed()
Генератор тестов: передача seed и других параметров через argv
seed() без параметров
Задача_2: Генерация произносимого пароля
произносимый пароль состоит из "слогов" трёх видов: 'Г', 'ГС' 'СГ', где 'Г' - заглавная гласная буква, 'С' - заглавная согласная буква (Ь и Ъ не используем; автор задачи помнит, что (со)гласными могут быть звуки, а не буквы )
- на вход подаётся длина пароля (целое положительное число N)
- требуется сгенерировать пароль длины N путём его достройки, начиная с пустой строки, до требуемой длины путём добавления случайного слога одного из описанных выше видов
- к частично построенной строке длины (N-1) разрешается добавлять последний слог из двух букв
- пример:
- вход: 8
- выход: АЗАЗЕЛЛО
- слоги добавлялись так: АЗ, АЗ, ЕЛ, ЛО; начиная со слога А такой выход построить невозможно
- тоже корректный выход (длины 9): АЗЫАЗЕЛЛО
Д/З
- Доделать задачи 1 и 2
Задача_3 (Д/З): Генерация литературного пароля
померить частоты пар букв в «Анне Карениной» (пара букв — то же, что в Задаче_1)
программе передаётся в командной строке длина пароля (целое положительное число N) и — необязательным вторым параметром — Seed для воспроизводимости
- требуется сгенерировать пароль длины N путём его достройки до требуемой длины
выбор первой пары букв — случайный, вероятность выбора пропорциональна числу её вхождений в текст «Анны Карениной»
- добавление очередной буквы в конец пароля - случайный, вероятность выбора добавляемой буквы пропорциональна числу вхождений пары букв pq в текст (здесь p - последняя буква частично построенного пароля, q - добавляемая буква)