使用 Python 生成 6 个数字的随机序列有时会产生只有 5 个数字的结果

Generating a random sequence of 6 numbers with Python sometimes yields a result with only 5

我的函数有一个小问题,它可能会生成一个随机的 6 位代码。代码本身非常简单,使用 python 3 我是这样做的:

def secret_code(num=6):
numbers = string.digits
code = ''
for _ in range(num):
    code += random.choice(numbers)

return int(code)

现在,有无数种方法可以做到这一点,但我并不质疑这种方法的有效性,特别是针对其他方法,我的问题是有时这个函数 returns 是一个 5 位代码。

我已经尝试了 1000 个循环的 for 循环来测试这种情况发生的频率,方法是:

for _ in range(1000):
    code = secret_code() # calling the function above
    if len(code) < 6:
        count += 1

ratio = count/1000
print(ratio*100) # at this point the test has given back 0% all the times

它总是返回 0% 的时间。

但是,当应用于网站时,例如,我使用它来生成随机验证码以发送给新用户,有时(我不是说 50% 的时间,当然,但它不是即使是 0) 它也有 5 位数字而不是 6 位数字,对于我来说,我一直想不通为什么。

有人知道为什么会这样吗?更重要的是,为什么它没有出现在“for 循环测试”中?

谢谢

问题是 string.digits 包含 0,因此函数中的变量 code 可能包含类似 0123 的内容,因此 int('0123') returns 123.
其次,python 表示“object of type 'int' has no len()”,因此您可以在 if 语句中使用 len(str(code))