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

2024-05-16 06:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

Tags: 代码密码列表input错误字母单词list
2条回答

问题是您正在将字符串传递给print_list。当你遍历一个字符串时,它会把它拆分成单个字符串。所以,实际上您所做的是调用toon['a'],这是不起作用的,因为您必须使用整数来访问iterable by index。

另外请注意,你和巴图汉在处理字符串时都犯了一个错误。即使你修正了上面的错误,你还是会马上得到另一个。在python中,string不允许项分配,因此您必须创建一个全新的字符串,而不是在其中重新分配单个字符。

如果你愿意的话,你可以用一个列表理解来完成同样的任务。下面是一个例子:

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

这将从toon创建一个新字符串,其中“e”的所有事件都已替换为“0”,并且所有非“e”字符都保留为以前的值。

编辑:我可能误解了你的目的。word.split()因为一个语句的整体不会做任何事情-split不会重新赋值,如果您希望word等于该语句之后的字符串列表,则必须执行word = word.split()。但是-你一开始就想拆线是有原因的吗?为什么要给一个名为word的变量分配两个独立的单词?这没有任何意义,而且让我们很难知道你想完成什么。

^{}已经为您提供了下一个可用项的值。在您的例子中,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方法。

相关问题 更多 >