尝试打印随机字符串时的回溯
Traceback when trying to print a random string
我还是个初学者,所以我可能遗漏了一些明显的东西。
我正在尝试使用随机符号、字母和数字生成密码,并且应该只使用我们已经学过的功能(所以没有高级的东西)。
这是有问题的代码:
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_symbols”等)是用户给我们的输入,而“letters”是字符串列表。)
“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.
我在这里做错了什么?并且请不要对其余代码进行更正,因为我确实想尝试主要由我自己完成该项目,否则我将学不到任何东西。我只是不明白为什么 python 没有按照我认为我在这里告诉它做的去做。
感谢任何帮助!
你的逻辑没问题,只是你犯的错误是将相同的数字列表命名为 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))
编辑
稍微说明一下。在您的示例中,每次调用 numb.append 时,它都会尝试从局部变量编号而不是全局变量编号中获取 random.choice 。如果您还不知道什么是局部变量和全局变量,Here 可以帮助您理解 link。
我还是个初学者,所以我可能遗漏了一些明显的东西。 我正在尝试使用随机符号、字母和数字生成密码,并且应该只使用我们已经学过的功能(所以没有高级的东西)。
这是有问题的代码:
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_symbols”等)是用户给我们的输入,而“letters”是字符串列表。)
“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.
我在这里做错了什么?并且请不要对其余代码进行更正,因为我确实想尝试主要由我自己完成该项目,否则我将学不到任何东西。我只是不明白为什么 python 没有按照我认为我在这里告诉它做的去做。 感谢任何帮助!
你的逻辑没问题,只是你犯的错误是将相同的数字列表命名为 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))
编辑
稍微说明一下。在您的示例中,每次调用 numb.append 时,它都会尝试从局部变量编号而不是全局变量编号中获取 random.choice 。如果您还不知道什么是局部变量和全局变量,Here 可以帮助您理解 link。