【问题标题】:Python TypeError: list indices must be integers or slices, not strPython TypeError:列表索引必须是整数或切片,而不是 str
【发布时间】:2017-10-08 11:44:27
【问题描述】:

我的 Python 函数出现错误。代码如下所示。

def vigenere():
    message1 = input('message: ')
    keyl = ['l', 'e', 'm', 'o', 'n']
    if len(message1) > len(keyl):
        keyl = [i * 5 for i in keyl]
    else:
        pass
    for med in message1:
              encrypting = chr(ord(med) + ord(keyl[med]))
              print(encrypting)
    encmessage = input('Is there a message you would like to decrypt?')
    for mes in encmessage:
        decrypting = chr(ord(med) - ord(keyl[med]))
        print(decrypting)

当我尝试调用我的函数时,python shell 显示错误。错误如下所示。

================ 重新启动:/Users/ggmac/Documents/ProjectM.py================
vigenere()
消息:逃跑
回溯(最近一次通话最后一次):
文件“”,第 1 行,在
vigenere()
文件“/Users/gg-mac/Documents/ProjectM.py”,第 75 行,在 vigenere
加密 = chr(ord(med) + ord(keyl[med]))
TypeError:列表索引必须是整数或切片,而不是 str

您能帮忙告诉我我的错误吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    列表索引必须是整数。以下应该可以解决您的问题。

    def vigenere():
        message1 = input('message: ')
        keyl = ['l', 'e', 'm', 'o', 'n']
        if len(message1) > len(keyl):
            keyl = [i * 5 for i in keyl]
        else:
            pass
        for i,med in enumerate(message1):
                  encrypting = chr(ord(med) + ord(keyl[i]))
                  print(encrypting)
        encmessage = input('Is there a message you would like to decrypt?')
        for k, mes in enumerate(encmessage):
            decrypting = chr(ord(med) - ord(keyl[k]))
            print(decrypting)
    

    【讨论】:

    • 非常感谢。这解决了我的问题。
    • 现在担心了。如果有帮助,请接受它作为您的答案。
    猜你喜欢
    • 2020-05-14
    • 2020-11-21
    • 2015-12-09
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多