Skip to content

Commit d554931

Browse files
committed
Add caesar.py
1 parent bc0135d commit d554931

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

caesar.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
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

Comments
 (0)