【问题标题】:Traceback when trying to print a random string尝试打印随机字符串时的回溯
【发布时间】:2021-09-11 09:48:33
【问题描述】:

我还是个初学者,所以我可能遗漏了一些明显的东西。 我正在尝试使用随机符号、字母和数字生成密码,并且应该只使用我们已经学过的功能(所以没有高级的东西)。

这是有问题的代码:

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

(Info:“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 没有做我认为我告诉它在这里做的事情。 任何帮助表示赞赏!

【问题讨论】:

  • 你能告诉我们你的“数字”变量包含什么吗?所以我们可以以更好的方式帮助您?

标签: python random types module traceback


【解决方案1】:

你的逻辑很好,只是你所做的错误被命名为与 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.choiceHere 是一个有用的链接,可以帮助您了解如果您还不知道什么是局部变量和全局变量。

【讨论】:

  • @Vojin Puric 非常感谢,现在它正在工作!我发誓我多次检查了这些名字,但我想我需要更加注意这一点。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多