我正在尝试使用用户输入为单个字母创建一个基本的Vignere加密函数,代码如下:
alphanumero = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F', 6:'G', 7:'H',
8:'I', 9:'J', 10:'K', 11:'L', 12:'M', 13:'N', 14:'O', 15:'P', 16:'Q',
17:'R', 18:'S', 19:'T', 20:'U', 21:'V', 22:'W', 23:'X', 24:'Y', 25:'Z' }
inputlet = str(input("Enter letter to be encrypted: "))
try:
print(alphanumero[inputlet])
except KeyError:
letnum = [k for k, v in alphanumero.items() if v == inputlet[0]]
inputkey = str(input("Enter key letter: "))
try:
print(alphanumero[inputkey])
except KeyError:
keynum = [u for u, t in alphanumero.items() if t == inputkey[0]]
result = (letnum + keynum) % 26
print(result)
所以当我试着运行它时,我希望它输出11
,给定A
作为输入字母,L
作为输入键,但是我得到了这个错误:
TypeError: unsupported operand type(s) for %: 'list' and 'int'
我该怎么解决这个问题?我对Python比较陌生,所以非常感谢您的回答
letnum
和keynum
是列表。letnum + keynum
是列表的连接,它不会将相应的元素添加到彼此。你不能在列表上使用% 26
。使用列表理解来组合它们。你知道吗相关问题 更多 >
编程相关推荐