TheAlgorithms-Python

Форк
0
/
enigma_machine.py 
59 строк · 1.6 Кб
1
alphabets = [chr(i) for i in range(32, 126)]
2
gear_one = list(range(len(alphabets)))
3
gear_two = list(range(len(alphabets)))
4
gear_three = list(range(len(alphabets)))
5
reflector = list(reversed(range(len(alphabets))))
6
code = []
7
gear_one_pos = gear_two_pos = gear_three_pos = 0
8

9

10
def rotator():
11
    global gear_one_pos
12
    global gear_two_pos
13
    global gear_three_pos
14
    i = gear_one[0]
15
    gear_one.append(i)
16
    del gear_one[0]
17
    gear_one_pos += 1
18
    if gear_one_pos % int(len(alphabets)) == 0:
19
        i = gear_two[0]
20
        gear_two.append(i)
21
        del gear_two[0]
22
        gear_two_pos += 1
23
        if gear_two_pos % int(len(alphabets)) == 0:
24
            i = gear_three[0]
25
            gear_three.append(i)
26
            del gear_three[0]
27
            gear_three_pos += 1
28

29

30
def engine(input_character):
31
    target = alphabets.index(input_character)
32
    target = gear_one[target]
33
    target = gear_two[target]
34
    target = gear_three[target]
35
    target = reflector[target]
36
    target = gear_three.index(target)
37
    target = gear_two.index(target)
38
    target = gear_one.index(target)
39
    code.append(alphabets[target])
40
    rotator()
41

42

43
if __name__ == "__main__":
44
    decode = list(input("Type your message:\n"))
45
    while True:
46
        try:
47
            token = int(input("Please set token:(must be only digits)\n"))
48
            break
49
        except Exception as error:
50
            print(error)
51
    for _ in range(token):
52
        rotator()
53
    for j in decode:
54
        engine(j)
55
    print("\n" + "".join(code))
56
    print(
57
        f"\nYour Token is {token} please write it down.\nIf you want to decode "
58
        "this message again you should input same digits as token!"
59
    )
60

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.