Потрібно зашифрувати текст підстановкою символів. Для кожної букви алфавіту є відповідна буква шифрованого алфавіту. Наприклад, букви
потрібно перетворити у відповідні символи:
Великі букви перетворити у маленькі, потім зробити заміну букв, а якщо якихось символів немає в першому списку, просто проігнорувати їх.
Приклад перетворення:
Оскільки дефісу і крапки немає в коді шифрування, результат став на 2 символи коротшим.
За допомогою великої кількості elif letter == '...':
перебрати всі варіанти букв:
Цей спосіб буде працювати, якщо повністю записати всю таблицю. Але це дуже і дуже довго.
Можна автоматизувати пошук відповідників за допомогою .index
:
Це уже кращий варіант, бо не треба перебирати всі варіанти. Але можна зробити ще краще.
В Пайтоні є тип даних "словник", який дозволяє записувати пари "ключ"-"значення", і робити пошук значення по ключу. Словник записується в фігурних дужках ({ }
), схоже як список записується в квадратних дужках ([ ]
).
Пари ключ-значення треба записувати через двокрапку і розділяти комами.
Після цього можна взнати значення по ключу через replace_dict.get()
:
Якщо символа немає серед ключів, повернеться "нічого"
Другий аргумент у replace_dict.get
дозволяє задати дефолтне значення:
Все це разом дозволяє зробити ще одну версію шифрувальної машини:
Розкодуйте шифрограму xqo hyzijzqoekgcwqory'ohe'ei
, використавши словник дешифрування:
Коли народився Платон?
Значення словника можна змінювати, і можна додавати/видаляти ключі.
Це додасть нову пару ключ-значення в слоник plato
.
Замініть ім'я у Платона на "Kanye", додайте прізвище "West", замініть країну на USA, рік народження на 1977, видаліть вчителя і студентів. Додайте ключ "importance" і придумайте йому значення.
Вивести словник гарно на екран. Наприклад, словник { 'a': 10, 'b': 20, 'c': 30 }
при виводі повинен виглядати як:
Для цього доведеться "пройтись" по всім парам ключ-значення в словнику. Це можна зробити так:
Зробити консоль адміна. В консолі можна додавати нових юзверів в систему.
Спочатку програма питає: "хочеш додати ще одного юзвера?". Якщо адмін відповідає "так", то програма питає окремо логін юзвера, пароль юзвера і записує його у словник.
При запису у словник потрібно в якості ключа вказати логін, а в якості значення –- пароль.
Якщо адмін відповідає "ні", то програма виводить словник юзверів на екран, красиво.
Гравці на сервері Майнкрафту зберігаються в одному великому словнику. Ключем є ID гравця, а значенням – об'єкт гравця. Ось приклад об'єктів у цьому словнику:
Потрібно написати функцію def send_msg(user_id, msg)
, яка робить прінт повідомлення на екран, але тільки якщо юзер не забанений. Якщо юзер забанений, написати скільки лишилось часу до розбану.
Як взнати скільки лишилось часу? Потрібно взнати поточний час (time.time()
з бібліотеки time
), і відняти його від параметру player.ban_till
(доколи забанено). Якщо результат додатній, значить юзер ще в бані, якщо від'ємний, то бан треба знімати і повідомлення можна прінтити.
Маючи два рядки replace_from
та replace_to
зробити словник заміни replace_dict
. Алгоритм такий:
replace_dict
Нехай є текст:
Потрібно порахувати скільки разів яка буква зустрічається. Алгоритм:
Маючи словник частот (наприклад, з попереднього завдання) порахувати суму всіх значень. (Для перевірки: вона повинна дорівнювати довжині ориганільного тексту)
Якщо у нас є словник заміни, як розкодувати шифроване повідомлення? Потрібно зробити аналогічний словник і зробити "шифрування", але тепер іншим словником.
Потрібно словник:
перетворити у
Зробити функцію decode
і дешифрувати за її допомогою повідомлення.
Мода –- це ключ, у якого найбільше значення у словнику частот. Окрім моди, зручно також знати топ-5, або топ-10 з цього словника.
Нехай є словник частот (наприклад, з попередніх завдань). Потрібно:
Маючи словник частот, потрібно знайти топ-50% –- мінімальний набір ключів, чиї значення в сумі дають 50% всіх значень таблиці.