|
| 1 | +whats_direction = input("Что мы должны сделать: шифровать или дешифровать? \n").lower() |
| 2 | +while whats_direction != "шифровать" and whats_direction != "дешифровать": |
| 3 | + whats_direction = input( |
| 4 | + 'Что-то не то ты ввёл. Напиши "шифровать" либо "дешифровать". \n' |
| 5 | + ).lower() |
| 6 | + |
| 7 | + |
| 8 | +whats_language = input("Какой нужен язык: русский или английский? \n").lower() |
| 9 | +while whats_language != "русский" and whats_language != "английский": |
| 10 | + whats_language = input( |
| 11 | + 'Что-то не то ты ввёл. Напиши "русский" либо "английский". \n' |
| 12 | + ).lower() |
| 13 | + |
| 14 | + |
| 15 | +whats_step = input( |
| 16 | + "На сколько символовов мы сдвигаем буквы по алфавиту? Ответ напиши числом. \n" |
| 17 | +) |
| 18 | +while whats_step.isdigit() != True: |
| 19 | + whats_step = input("Что-то не то ты ввёл. Напиши число. \n") |
| 20 | + |
| 21 | + |
| 22 | +whats_text = input("Какой текст нужно использовать сейчас? \n") |
| 23 | +while whats_text.isspace() == True: |
| 24 | + whats_text = input("Что-то не то ты ввёл. Введи текст. \n") |
| 25 | + |
| 26 | + |
| 27 | +# Объявляем функцию с четырьмя аргументами – соответственно четырем вопросам. |
| 28 | +def caesar(direction, language, step, text): |
| 29 | + |
| 30 | + # Четыре словаря под русские и английские символы, большие и маленькие. |
| 31 | + # В теории можно обойтись без них и обращаться к таблице Unicode. |
| 32 | + # Но мне было удобнее создать свои словари. |
| 33 | + |
| 34 | + upper_eng_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| 35 | + lower_eng_alphabet = "abcdefghijklmnopqrstuvwxyz" |
| 36 | + upper_rus_alphabet = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" |
| 37 | + lower_rus_alphabet = "абвгдежзийклмнопрстуфхцчшщъыьэюя" |
| 38 | + |
| 39 | + # Объявляем цикл for. Количество итераций равно длине строки text. |
| 40 | + for i in range(len(text)): |
| 41 | + |
| 42 | + # Задаем локальные переменные: длину алфавита и значения словарей. |
| 43 | + if language == "русский": |
| 44 | + alphas = 32 |
| 45 | + low_alphabet = lower_rus_alphabet |
| 46 | + upp_alphabet = upper_rus_alphabet |
| 47 | + if language == "английский": |
| 48 | + alphas = 26 |
| 49 | + low_alphabet = lower_eng_alphabet |
| 50 | + upp_alphabet = upper_eng_alphabet |
| 51 | + |
| 52 | + # Если text[i] является буквой: |
| 53 | + if text[i].isalpha(): |
| 54 | + |
| 55 | + # Находим место символа text[i] в словаре upp_alphabet либо low_alphabet. |
| 56 | + if text[i] == text[i].lower(): |
| 57 | + place = low_alphabet.index(text[i]) |
| 58 | + if text[i] == text[i].upper(): |
| 59 | + place = upp_alphabet.index(text[i]) |
| 60 | + |
| 61 | + # Если нужно дешифровать, то: |
| 62 | + if direction == "дешифровать": |
| 63 | + # Находим индекс для измененного символа. |
| 64 | + # Новый ндекс = Старый индекс - Шаг % Длина алфавита |
| 65 | + index = (place - int(step)) % alphas |
| 66 | + |
| 67 | + # Если нужно зашифровать, то: |
| 68 | + elif direction == "шифровать": |
| 69 | + # Находим индекс для измененного символа. |
| 70 | + # Новый ндекс = Старый индекс + Шаг % Длина алфавита |
| 71 | + index = (place + int(step)) % alphas |
| 72 | + |
| 73 | + # Выводим измененный символ. |
| 74 | + if text[i] == text[i].lower(): |
| 75 | + print(low_alphabet[index], end="") |
| 76 | + if text[i] == text[i].upper(): |
| 77 | + print(upp_alphabet[index], end="") |
| 78 | + |
| 79 | + # Если text[i] не является буквой: |
| 80 | + else: |
| 81 | + # Делаем print этого символа бе изменений. |
| 82 | + print(text[i], end="") |
| 83 | + |
| 84 | + |
| 85 | +caesar(whats_direction, whats_language, whats_step, whats_text) |
0 commit comments