我对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)
问题是您正在将字符串传递给
print_list
。当你遍历一个字符串时,它会把它拆分成单个字符串。所以,实际上您所做的是调用toon['a']
,这是不起作用的,因为您必须使用整数来访问iterable by index。另外请注意,你和巴图汉在处理字符串时都犯了一个错误。即使你修正了上面的错误,你还是会马上得到另一个。在python中,
string
不允许项分配,因此您必须创建一个全新的字符串,而不是在其中重新分配单个字符。如果你愿意的话,你可以用一个列表理解来完成同样的任务。下面是一个例子:
这将从toon创建一个新字符串,其中“e”的所有事件都已替换为“0”,并且所有非“e”字符都保留为以前的值。
编辑:我可能误解了你的目的。
word.split()
因为一个语句的整体不会做任何事情-split
不会重新赋值,如果您希望word等于该语句之后的字符串列表,则必须执行word = word.split()
。但是-你一开始就想拆线是有原因的吗?为什么要给一个名为word
的变量分配两个独立的单词?这没有任何意义,而且让我们很难知道你想完成什么。^{} 已经为您提供了下一个可用项的值。在您的例子中,
i
不是索引,而是值本身。但是,如果要同时访问索引和值,可以使用
enumerate
:或者可以用传统方法迭代字符串:
编辑: 正如@furkle指出的,由于
strings
是immutable
,因此不能使用索引来更改它们。所以使用连接,或者replace
方法。相关问题 更多 >
编程相关推荐