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

Python 我得到一个类型错误:字符串索引必须是整数,而不是类型,python,typeerror,Python,Typeerror,我一直收到一个类型错误,说字符串索引必须是整数,而不是类型。不确定如何更正,它突出显示了解码和编码变量。我认为您的问题在于: alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" key = "XPMGTDHLYONZBWEARKJUFSCIQV" def encode(): alpha[""] = key["x"] def decode(): key[""] = alpha[""] def menu(): response = raw_in

我一直收到一个类型错误,说字符串索引必须是整数,而不是类型。不确定如何更正,它突出显示了解码和编码变量。

我认为您的问题在于:

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()
我想你误解了字符串中的索引是如何工作的。因此,让我尝试纠正这一点:

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

同样,alpha[]也没有任何意义。使用方括号时,您试图在字符串alpha中指定索引。但是α的指数是整数。alpha[0]返回A。alpha[1]返回B。alpha[25]返回Z


所以你需要在索引中使用整数。像键[x]这样的符号没有任何意义,这会引起错误。

这里有很多问题,但您的编码和解码功能肯定有问题。如果我明白你想做什么,你可以重写如下:

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "XPMGTDHLYONZBWEARKJUFSCIQV" 

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

def decode():
    key[""] = alpha[""] 
每个函数都在做基本相同的事情encode正在做的是:

创建一个名为encoded的空列表。我将使用它按顺序存储每个已翻译的字符。 循环遍历传入的字符串的字符。 在每次迭代中,在字符串alpha中找到它的索引。 在同一索引中找到键中的字符,并将该字符附加到编码列表中 翻译完所有字符后,将它们连接成一个字符串并返回该字符串。 注意:如果在alpha字符串中找不到字符串参数中的字符,则此操作将失败。您可以添加一些错误检查

如果希望允许使用不同的键,则可以将其变得更加通用。您可以编写如下转换函数:

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)
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)
def encode(string):
    return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV')

def decode(string):
    return translate(string, 'XPMGTDHLYONZBWEARKJUFSCIQV', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
然后你的编码和解码函数可以这样写:

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)
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)
def encode(string):
    return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV')

def decode(string):
    return translate(string, 'XPMGTDHLYONZBWEARKJUFSCIQV', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
为了解决代码其余部分的问题,对于main函数中的条件,您只需要确保根据需要将从原始输入读入的字符串传递到encode和decode函数。大概是这样的:

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)
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)
def encode(string):
    return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV')

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

祝你好运。

很抱歉第一次在这里发帖,所以格式看起来仍然很糟糕。欢迎使用StackOverflow,您应该始终使用正在使用的编程语言作为标记。人们倾向于寻找带有特定标签的问题,如果您正确指定标签,您的帖子更有可能被看到和回答。好的,谢谢,是的,我没有考虑过这一点阅读堆栈跟踪,找出哪一行引起了错误,如果你仍然无法解决问题,请在你的问题中包括这一点。它在第6行中提出了错误,这无疑使我更容易理解,但是我仍然不清楚方括号中应该放什么。该程序的思想是询问用户是否要对一组字母进行编码或解码。然后程序将使用alpha变量,然后将其转换为key变量,反之亦然。那么,我是否应该简单地将alpha[0]=key[0]和decode变量的反方向放在一起?这是否会告诉计算机,对于两个变量字符串,每个字母代表同一位置的字母?alpha和KeyIt肯定在一起,但我以前没有使用字符_index=alpha.indexcharacter部分,因此它返回为未找到的子字符串,我不确定原因。有机会再解释一下吗?你能告诉我接下来的内容吗?基本上,这意味着在alpha中找不到角色。可能是因为它是小写或其他什么。当然,当我运行程序时,它允许我选择是编码还是解码,所以我选择了1编码选项。我输入了要编码的单词“trouble”,也就是当它返回时,在您显示的部分的第6行出现了一个错误。上面说找不到ValueError子字符串是的。因为麻烦是小写的,所以在alpha字符串中找不到它们。好吧,我只是在菜单中的原始输入行中添加了.大写?