forked from oper-1/console_games
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcipher.py
108 lines (58 loc) · 2.59 KB
/
cipher.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# Шифр Цезаря
import sys
SYMBOLS = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя 1234567890!@#$%^&*()'
MAX_KEY_SIZE = len(SYMBOLS)
def get_mode():
# Предлагаем выбрать действие
print('Вы хотите зашифровать(з), расшифровать(р) или взломать(в) текст?')
print('Для выхода введите "вых"')
while True:
mode = input().lower()
# Проверяем, что введена правильная команда
if mode == 'вых':
sys.exit()
elif mode in ['зашифровать', 'з', 'расшифровать', 'р', 'взломать', 'в']:
return mode
else:
print('Введите корректную команду (з, р или в).')
def get_message():
# Получаем текст для шифрования или дешифрования
print('Введите текст')
return input()
def get_key():
# Получаем ключ шифрования
key = 0
while True:
print(f'Введите ключ шифрования (1-{MAX_KEY_SIZE})')
key = int(input())
if 1 <= key <= MAX_KEY_SIZE:
return key
def get_translated_message(mode, message, key):
if mode.startswith('р'):
key = -key
translated = ''
for symbol in message:
symbol_index = SYMBOLS.find(symbol)
if symbol_index == -1: # Символ не найден в SYMBOLS
# Просто добавить этот символ без изменений
translated += symbol
else:
# Зашифровать или расшифровать
symbol_index += key
if symbol_index >= len(SYMBOLS):
symbol_index -= len(SYMBOLS)
elif symbol_index < 0:
symbol_index += len(SYMBOLS)
translated += SYMBOLS[symbol_index]
return translated
while True:
mode = get_mode()
message = get_message()
if not mode.startswith('в'):
key = get_key()
print('Преобразованный текст:')
if not mode.startswith('в'):
print(get_translated_message(mode, message, key))
else:
for key in range(1, MAX_KEY_SIZE + 1):
print(key, get_translated_message('р', message, key))