Я не могу найти свою ошибку. Я пытаюсь написать простую программу, которая шифрует сообщения, используя метод цезарного сдвига. Тем не менее, я получаю фанк-ошибку. Программа выглядит следующим образом:Ошибка ложной конкатенации Python?
alphabet = {"a":0,"b":1,"c":2,"d":3,"e":4,"f":5,"g":6,"h":7,"i":8,"j":9,"k":10,"l":11,"m":12,"n":13,"o":14,"p":15,"q":16,"r":17,"s":18,"t":19,"u":20,"v":21,"w":22,"x":23,"y":24,"z":25}
alpha2 = dict (zip(alphabet.values(),alphabet.keys()))
def key(n):
code = alphabet
for i in code:
code[i] = (code[i] + n) % 26
for i in code:
code[i] = alpha2[code[i]]
return code
def encode(x,n):
my_key = key(n)
message = []
for i in x:
message.append(my_key[i])
print key(13)
print encode("Message",13)
Я считаю это абсурд, потому что после того, как работает мой ./caesars.py
командной строки вернет
{'a': 'n', 'c': 'p', 'b': 'o', 'e': 'r', 'd': 'q', 'g': 't', 'f': 's', 'i': 'v', 'h': 'u', 'k': 'x', 'j': 'w', 'm': 'z', 'l': 'y', 'o': 'b', 'n': 'a', 'q': 'd', 'p': 'c', 's': 'f', 'r': 'e', 'u': 'h', 't': 'g', 'w': 'j', 'v': 'i', 'y': 'l', 'x': 'k', 'z': 'm'}
Traceback (most recent call last):
File "./caesars.py", line 56, in <module>
print encode("Message",13)
File "./caesars.py", line 27, in encode
my_key = key(n)
File "./caesars.py", line 15, in key
code[i] = (code[i] + n) % 26
TypeError: cannot concatenate 'str' and 'int' objects
Что ясно означает, что первый запуск через функцию key
был успешным, но когда функции encode
пытаются вызвать функцию key
во второй раз, когда она решает проблемы? Я напечатал типы n, и они выходят как int. Я уверен, что это надзор в моем коде, но для жизни меня я не могу найти.
'code = alphabet' не делает то, что вы думаете. – user2357112
Не могли бы вы ласково разработать? – WhiteMask
Вы должны использовать 'code = alphabet.copy()' – rhaps0dy