Шифр Цезаря с ключевым словом
Реализовал вроде правильно,ввод слова и отступа,всё учёл,но ругается на функцию 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