Skip to content

Commit 8c6e56d

Browse files
committed
Доработка шифра Цезаря
1 parent f66bc38 commit 8c6e56d

1 file changed

Lines changed: 67 additions & 25 deletions

File tree

caesar_code/caesar_code.py

Lines changed: 67 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,93 @@
11
__author__ = 'ipetrash'
22

33

4-
"""Скрипт реализует простейшую реализацию алгоритма Код Цезаря."""
4+
"""Реализация алгоритма Код Цезаря."""
55

66

7-
def caesar_code(text, shift):
8-
"""Функция принимает текстовую строку и возвращает, новую строку
9-
символы которой сдвинуты по алфавиту."""
7+
from string import ascii_lowercase, ascii_uppercase
8+
ru_lowercase = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
9+
ru_uppercase = ru_lowercase.upper()
10+
11+
alphabet_list = [
12+
ascii_lowercase,
13+
ascii_uppercase,
14+
ru_lowercase,
15+
ru_uppercase,
16+
]
1017

11-
alp = [chr(c) for c in range(ord('a'), ord('z') + 1)]
12-
new_t = ''
13-
for c in text.lower():
14-
if c in alp:
15-
i = (alp.index(c) + shift) % len(alp)
16-
new_t += alp[i]
17-
else:
18-
new_t += c
19-
return new_t
2018

19+
def get_alp_by_char(char: str) -> list:
20+
for alphabet in alphabet_list:
21+
if char in alphabet:
22+
return alphabet
2123

22-
from string import ascii_uppercase
24+
return None
2325

2426

25-
def shift(text, num):
27+
def caesar_code(text, shift):
28+
"""Функция принимает текстовую строку и возвращает, новую строку
29+
символы которой сдвинуты по алфавиту."""
30+
2631
shift_text = ''
2732

2833
for c in text:
29-
if c not in ascii_uppercase:
34+
alphabet = get_alp_by_char(c)
35+
if alphabet is None:
3036
shift_text += c
3137
continue
3238

33-
i = (ascii_uppercase.index(c) + num) % len(ascii_uppercase)
34-
shift_text += ascii_uppercase[i]
39+
i = (alphabet.index(c) + shift) % len(alphabet)
40+
shift_text += alphabet[i]
3541

3642
return shift_text
3743

3844

3945
if __name__ == '__main__':
40-
print(caesar_code("Hello World!", shift=2))
41-
print(caesar_code("Hello World!", shift=-4))
42-
print(caesar_code("Hello World!", shift=26))
43-
print(caesar_code("Hello World!", shift=50))
44-
print(caesar_code("Hello World!", shift=78))
46+
text = "Hello World!"
47+
print(caesar_code(text, shift=0))
48+
print(caesar_code(text, shift=2))
49+
print(caesar_code(text, shift=-4))
50+
print(caesar_code(text, shift=26))
51+
print(caesar_code(text, shift=50))
52+
print(caesar_code(text, shift=78))
53+
54+
assert caesar_code(text, shift=0) == text
55+
assert caesar_code(text, shift=2) == 'Jgnnq Yqtnf!'
56+
assert caesar_code(text, shift=-4) == 'Dahhk Sknhz!'
57+
assert caesar_code(text, shift=26) == 'Hello World!'
58+
assert caesar_code(text, shift=50) == 'Fcjjm Umpjb!'
59+
assert caesar_code(text, shift=78) == 'Hello World!'
4560

4661
print()
4762

48-
TEXT = 'VWDQ LV QRW ZKDW KH VHHPV'
63+
text = "Привет мир!"
64+
print(caesar_code(text, shift=0))
65+
print(caesar_code(text, shift=2))
66+
print(caesar_code(text, shift=-4))
67+
print(caesar_code(text, shift=33))
68+
print(caesar_code(text, shift=50))
69+
print(caesar_code(text, shift=99))
70+
71+
assert caesar_code(text, shift=0) == text
72+
assert caesar_code(text, shift=2) == 'Сткджф окт!'
73+
assert caesar_code(text, shift=-4) == 'Лмеюбо ием!'
74+
assert caesar_code(text, shift=33) == 'Привет мир!'
75+
assert caesar_code(text, shift=50) == 'Абщтхг эщб!'
76+
assert caesar_code(text, shift=99) == 'Привет мир!'
77+
78+
print()
79+
text = "Hello мир!"
80+
print(caesar_code(text, shift=0))
81+
print(caesar_code(text, shift=2))
82+
print(caesar_code(text, shift=-4))
83+
84+
assert caesar_code(text, shift=0) == text
85+
assert caesar_code(text, shift=2) == 'Jgnnq окт!'
86+
assert caesar_code(text, shift=-4) == 'Dahhk ием!'
4987

88+
# Hint: see shift=23
89+
print()
90+
print()
91+
TEXT = 'VWDQ LV QRW ZKDW KH VHHPV'
5092
for i in range(len(ascii_uppercase)):
51-
print(i, shift(TEXT, i))
93+
print(i, caesar_code(TEXT, i))

0 commit comments

Comments
 (0)