我得到一个typeError:字符串索引必须是整数,而不是类型

时间:2014-11-02 19:13:43

标签: python typeerror

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV" 

def encode():
    alpha[""] = key["x"]

def decode():
    key[""] = alpha[""] 

def menu():
    response = raw_input("""Crypto Menu
        quit(0)
        encode(1)
        decode(2)""")
    return response

def main():   
    keepGoing = True
    while keepGoing:
    response = menu()
    if response == "1":
        plain = raw_input("text to be encoded: ")
        print encode()
    elif response == "2":
        coded = raw_input("code to be decyphered: ")
        print decode()
    elif response == "0":
        print "Thanks for doing secret spy stuff with me."
        keepGoing = False
    else:
        print "I don't know what you want to do..."

print main()

我一直得到一个TypeError,说字符串索引必须是整数,而不是类型。不知道如何纠正这一点,它突出了解码和编码变量。

2 个答案:

答案 0 :(得分:0)

我认为你的问题在这里:

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV" 

def encode():
    alpha[""] = key["x"]

def decode():
    key[""] = alpha[""] 

我认为你误解了字符串中的索引是如何工作的。所以让我试着纠正这个:

取一个字符串,例如x = "hello"。参考x["h"]毫无意义。 Python无法解释这一点。另一方面,x[0]是有意义的。它在索引x返回0元素。在我们的例子中,这是"h"

同样,alpha[""]并不意味着什么。使用方括号时,您尝试在字符串alpha中指定索引。但alpha的索引是整数。 alpha[0]返回"A"alpha[1]返回“B”。 alpha[25]会返回“Z”。

所以你需要为你的指数使用整数。像key["x"]这样的表示法没有任何意义,这会引发错误。

答案 1 :(得分:0)

这里有很多内容,但您的encodedecode函数确实存在问题。如果我理解你要做什么,你可以按如下方式重写它们:

def encode(string):
    alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    key = 'XPMGTDHLYONZBWEARKJUFSCIQV'
    encoded = []
    for character in string:
        character_index = alpha.index(character)
        encoded.append(key[character_index])
    return ''.join(encoded)

def decode(string):
    alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    key = 'XPMGTDHLYONZBWEARKJUFSCIQV'
    decoded = []
    for character in string:
        character_index = key.index(character)
        decoded.append(alpha[character_index])
    return ''.join(decoded)

每个函数基本上都做同样的事情(这是encode正在做的事情:

  1. 创建一个名为encoded的空列表。我将使用它来按顺序存储每个字符,并进行翻译。
  2. 循环传入的字符串中的字符。
  3. 在每次迭代中,在字符串alpha中找到它的索引。
  4. 在同一索引处找到key中的字符,并将该字符附加到列表encoded
  5. 翻译完所有字符后,将它们连接成一个字符串并返回该字符串。
  6. 注意:如果在string字符串中找不到alpha参数中的字符,则会失败。您可以添加一些错误检查。

    如果您想要允许不同的密钥,可以使这更加通用。您可以像这样写一个translate函数:

    def translate(string, from_language_string, to_language_string):
        translated = []
        for character in string:
            character_index = from_language_string.index(character)
            translated.append(to_language_string[character_index])
        return ''.join(translated)
    

    然后您的encodedecode函数可以这样写:

    def encode(string):
        return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV')
    
    def decode(string):
        return translate(string, 'XPMGTDHLYONZBWEARKJUFSCIQV', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    

    要解决代码其余部分的问题,对于main函数中的条件,您只需要确保将从raw_input读入的字符串传递给{ {1}}和encode根据需要运行。像这样:

    decode
    祝你好运。