Шифр Цезаря с ключевым словом

Реализовал вроде правильно,ввод слова и отступа,всё учёл,но ругается на функцию remove ,не знаю почему for symbol in string: TypeError: 'int' object is not iterable ,в чём причина?

from random import *

cryptMode = input("[E]ncrypt|[D]ecrypt:").upper()
if cryptMode not in ['E', 'D']:
    print("Error:"); raise SystemExit
Alphalist = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
startMessage = input('Write:').upper()
numberkey = int(input('Отступ: '))
key = list(input('Write: ').upper())


def remove(alpha, string):
    for symbol in string:
        if symbol not in [chr(x) for x in range(65, 91)] \
        or string.count(symbol) > 1: string.remove(symbol)
        if symbol in alpha: alpha.remove(symbol)
    return alpha, string


def insert(alpha_string):
    for index, symbol in enumerate(alpha_string[1]):
        alpha_string[0].insert((numberkey + index) % 26, symbol)
    return alpha_string[0]


def encryptDecrypt(mode, message, key, final=""):
    alpha = insert(remove(Alphalist, key))
    for symbol in message:
        if mode == 'E':
            final += alpha[(alpha.index(symbol) + key) % 26]
        else:
            final += alpha[(alpha.index(symbol) - key) % 26]
    return final


message = encryptDecrypt(cryptMode, startMessage, numberkey)
print("Final", message)


Ответы (1 шт):

Автор решения: Zhihar
for index, symbol in enumerate(alpha_string[1]):

alpha_string[1] у вас похоже является числом

А вообще у вас код очень уж усложнен

Я бы сделал такой код:

text = "ATest"
shift = 3

table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

result = ''.join(table[(table.index(i) + shift) % len(table)] for i in text.upper())

print(result)

шифровка или расшифровка - это всего лишь положительный или отрицательный shift

→ Ссылка