Python错误TypeError:字符串索引必须是整数

时间:2014-11-03 23:25:49

标签: python typeerror

我对Python很陌生,所以如果这是一个愚蠢的错误,请原谅我!

我一直在研究密码生成器,以便在科技俱乐部展示。它是如何工作的,它要求你输入一个单词。您输入的单词将变为列表。然后它将列表中的每个字母更改为其他内容以创建一个唯一的密码(我知道它有缺陷)。当我运行代码时,它会显示TypeError: string indices must be integers。我的代码出了什么问题?

print ("Leo's Password Generator")
print ('Please enter a word')
word = input()


print ('Enter another word:')
word2 = input()
word = word2 + word
word.split()

def print_list(toon):
    for i in toon:
        if toon[i] == 'e':
            toon[i] = '0'


print_list(word)
print (word)

2 个答案:

答案 0 :(得分:1)

问题在于您将字符串传递给print_list。当您遍历字符串时,它会将其拆分为单字符字符串。所以,基本上你正在做的是调用toon['a'],这不起作用,因为你必须使用整数来通过索引访问一个可迭代的。

另请注意,您和Batuhan都在处理字符串的方式上犯了错误。即使您修复了上述错误,您仍然会立即获得另一个错误。在python中,string不允许项目分配,因此您必须创建一个全新的字符串,而不是在其中重新分配单个字符。

如果你愿意,你可以使用列表理解来在相当少的空间内完成相同的任务。这是一个例子:

def print_list(toon):
    return ''.join([ch if ch != 'e' else '0' for ch in toon])

这会从香椿创建一个新字符串,其中所有事件都发生在' e'已经替换为' 0'以及所有非''字符与以前一样。

编辑:我可能误解了你的目的。 word.split()因为整个声明没有做任何事情 - split没有重新分配,如果你想要发言,你必须word = word.split()等于该语句后的字符串列表。但是 - 你是否有理由首先尝试拆分字符串?为什么要为名为word的单个变量分配两个单独的单词?这没有任何意义,并且使我们很难说出你想要完成的事情。

答案 1 :(得分:0)

For loop已经为您提供了下一个可用项目的。在您的情况下,i不是索引,而是本身。

但是,如果您想要同时覆盖索引和值,可以使用enumerate

def print_list(toon):
    for i, ch in enumerate(toon):
        if ch == 'e':
            toon = toon[:i] + '0' + toon[i+1:]

    print(toon)

或者您可以使用传统方法迭代字符串:

def print_list(toon):
    for i in range(len(toon)):
        if toon[i] == 'e':
            toon = toon[:i] + '0' + toon[i+1:]

    print(toon)

修改 正如@furkle所指出的,由于stringsimmutable,因此无法使用索引更改它们。因此,请使用连接或replace方法。