вівторок, 22 серпня 2017 р.

Кодуємо повідомлення методом Цезаря

Довго пояснювати що таке метод Цезаря я не буду, адже на початку 8 класу ви говорили про це на уроках інформатики. Найголовніше це те, що кожна літера повідомлення замінюється на літеру, яка розташована в алфавіті k літер правіше чи лівіше (далі k-ключ кодування). От ми і спробуємо створити таку програму, яка буде кодувати введений користувачем текст із зсувом на ключ.
Що саме за програму ми створимо?
1. На вході маємо текст користувача (українською мовою) і ключ (лише ціле число більше 1, адже ми розглянемо приклад лише із зсувом праворуч).
2. Розділові знаки та пробіли повинні залишитися на своєму місці.
3. Програма не звертає увагу на регістр, на вході - будь-який регістр, на виході - виключно нижній.
Як ми це реалізуємо?
- Просто!
1. На початку створимо список а із літерами українського алфавіту в їх правильному положенні та конструкції запиту тексту й ключа:
a=["а", "б", "в", "г", "ґ", "д",
   "е", "є", "ж", "з", "и", "і",
   "ї", "й", "к", "л", "м", "н",
   "о", "п", "р", "с", "т", "у",
   "ф", "х", "ц", "ч", "ш", "щ",
   "ь", "ю", "я"]
t=input("Введіть ваш текст: ")
k=int(input("key="))
 
2. Але що як ключ буде більшим за 32, тоді програма не зможе виконувати свою функцію, тож вирішуємо цю проблему:
...
while k>=33:
    k=k-32
...
3. Тепер переведемо текст до нижнього регістру та створимо новий пустий рядок:
...
t=t.lower()
t1=""
...
4. Ну, а зараз найцікавіше, сам алгоритм кодування та виведення результату:
...
for i in t:
    try:
        i2=a.index(i)+k
    except ValueError:
        t1=t1+i
    else:
        if i2>=33:
            i2=i2-32
        t1=t1+a[i2]
print(t1)
Тепер розберемося що тут до чого. Спочатку ми запускаємо цикл для кожного символу введеного рядка. Програма намагається знайти такий елемент у списку і додати до його індексу значення ключа, якщо такого елементу не знайдено, то до нового рядка додається сам елемент без змін. Цей прийом зроблено для розділових знаків, пробілів, або літер із інших алфавітів.
Якщо ж, пошук вдався, то змінна i2 буде містити індекс елемента в алфавіті, яким ми замінимо даний. Зверніть увагу! Якщо новий індекс буде більший за 32, то від нього віднімуть 32, див. пункт 2.
Наприкінці до нового рядка додається елемент алфавіту із індексом i2 та після завершення циклу результат виводиться на екран.
Давайте перевіримо, як працює наша програма:

- Євгенію, дякую звичайно за лекцію... Але ти все прояснив, розсказав, а мені що робити?
- Дуже гарне питання! Спробуй створити дешифратор повідомлень написаних шрифтом Цезаря. Тобто, користувач вводить текст (зашифрований) та ключ, а твоя програма повинна вивести розшифроване повідомлення. Ось тобі для тесту вхідні та вихідні дані:
На вході
є чхмгнючхзье цхзоїхутйффє!
7
На виході
 я розшифровую повідомлення!

--------------------------------------------------
Якщо ти не дуже зрозумів про що ця стаття, чекай на вихід нового посібника для 9-го класу, а більш детальна інформація про основи програмування мовою Python з прикладами та поясненнями в навчальному посібнику для 8-го класу: https://proginschool.inf.ua

Немає коментарів:

Дописати коментар

Динамічне програмування мовою Python

Ця тема не входить в шкільний курс інформатики, проте дуже часто представлена на олімпіаді з програмування. Динамічне програмування - це вж...