【问题标题】:TypeError: unsupported operand type(s) for %: 'list' and 'int' when using dictionariesTypeError:不支持的操作数类型 %:使用字典时的“list”和“int”
【发布时间】:2018-09-30 15:38:42
【问题描述】:

我正在尝试使用用户输入为单个字母创建基本的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: %: 'list' 和 'int' 的操作数类型不受支持

那么我该如何解决这个问题?我对 Python 比较陌生,因此非常感谢任何答案

【问题讨论】:

  • letnum 和 keynums 是列表。你不能对列表取模

标签: python python-3.x


【解决方案1】:

letnumkeynum 是列表。 letnum + keynum 是列表的连接,它不会将相应的元素相互添加。而且您不能在列表中使用% 26。使用列表推导来组合它们。

result = [(letter + key) % 26 for letter, key in zip(letnum, keynum)]

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2014-12-28
    • 2019-11-22
    相关资源
    最近更新 更多