使用 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))
。
我的函数有一个小问题,它可能会生成一个随机的 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))
。