Python错误TypeError:字符串索引必须是整数
我对Python很陌生,所以如果这是一个愚蠢的错误,请原谅我!Python错误TypeError:字符串索引必须是整数
我一直在密码生成器工作,目前在科技俱乐部。它的工作原理是它要求你输入一个单词。你输入的单词变成了一个列表。然后它将列表中的每个字母更改为其他内容以创建唯一密码(这是有缺陷的,我知道)。当我运行代码时,它说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)
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指出,因为strings
是immutable
,他们不能使用索引进行更改。所以使用串联或者replace
方法。
问题是你传递一个字符串到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”,和所有非'E”字符作为前离开。
编辑:我可能误解了你的目的。 word.split()
作为声明的全部内容不会做任何事 - split
不会重新分配,并且如果您希望在该声明之后将字符串列表等同,那么您必须执行word = word.split()
。但是 - 是否有一个原因是你试图首先拆分字符串?为什么要将两个单独的单词分配给一个名为word
的变量?这没有任何意义,并且使我们很难说出你想要完成的事情。
根据你对furkle的回答的评论,我已经编辑了你的文章一点点,以澄清你的预期行为。如果我歪曲了你,请告诉我! – 2014-11-03 23:58:49