我还是一个初学者,所以我可能错过了一些明显的东西。我正试图用随机符号、字母和数字生成一个密码,我应该只使用我们已经学过的函数(所以没有高级的东西)。
这是有问题的代码:
l=[]
s=[]
numb=[]
for letter in range (0,(nr_letters)):
l.append(random.choice(letters))
for symbol in range(0,(nr_symbols)):
s.append(random.choice(symbols))
for numbers in range(0,(nr_numbers)):
numb.append(random.choice(numbers))
(信息:"nr_letters"(以及"nr_symbol "等)是用户给我们的输入,而"字母";是一个字符串列表。)
"for"函数可以很好地处理字母和符号,但是我收到了"数字"的回溯,尽管数字列表也是由字符串组成的。这是回溯:
Traceback (most recent call last):
File "main.py", line 27, in <module>
numb.append(random.choice(numbers))
File "/usr/lib/python3.8/random.py", line 288, in choice
i = self._randbelow(len(seq))
TypeError: object of type 'int' has no len()
我试图再次告诉python,我的数字列表中没有积分,所以我写了
numb.append(random.choice(str(numbers)))
但是,虽然Python现在出于某种原因理解该列表中的项是字符串,但它现在似乎忽略了"random.choice"位,因为它按顺序打印数字,从0开始。
我在这里做错了什么?请不要修改剩下的代码,因为我想主要靠自己完成这个项目,否则我什么也学不到。我就是不明白为什么蟒蛇不按我说的去做。任何帮助,感谢!
你的逻辑是好的,唯一的错误是你做了相同的数字列表命名为局部变量的迭代器在for循环
for **numbers** in range(0,(nr_numbers)):
numb.append(random.choice(*numbers*))
最简单的解决方案是在for循环中更改变量名,因为您无论如何都不会使用它。例子:
for i in range(0,(nr_numbers)):
numb.append(random.choice(numbers))
编辑稍微澄清一下。在你的例子中,每次你叫麻木。附加它尝试取随机。从局部变量号中选择,而不是全局变量号。如果你还不知道什么是局部变量和全局变量,这里有一个有用的链接,可以帮助你理解。