【发布时间】:2020-03-06 11:36:21
【问题描述】:
我想使用给定函数f1() 生成一个随机数。我有解决方案,但我无法理解生成随机数所需的迭代次数(本例中为 5 次)。
我尝试阅读其他问题和答案,但他们专注于如何生成随机数,而不是为什么遵循特定技术。
这是我的代码:
import random
def f1():
return(random.randint(0, 1))
def f29():
while(1):
Res = 0
for _ in range(0, 5):
Res = Res << 1 | f1()
if(Res <= 29):
return (Res)
print(f29())
我观察到一件事:如果我将 for 循环的范围从 5 更改为 4,则只会出现 20 以下的数字,如果将其更改为 3,则只会出现单个数字。也许我的观察是轶事。我的目标是生成 0 到 29 之间的随机数,包括使用 f1() 生成随机整数:0 或 1。
【问题讨论】:
-
你知道
<<是做什么的吗?这是一个按位左移。现在以2 ** 5 == 32为事实,您就有了解决方案。 -
所以 Res = Res
-
@Matthias 是的,它向左移动指定的数字。您能否详细说明
Now take the fact that 2 ** 5 == 32 and you have your solution.? -
用笔和纸浏览您的代码,跟踪
Res、Res << 1、f1()。和Res << 1 | f1()用于每次迭代 - 对f()使用抛硬币。 -
f1()会给你0或1。对于最大值,我们假设它总是给我们1。在第一个循环中0 << 1 | 1给你1。第二个循环:1 << 1 | 1->3。第三个循环3 << 1 | 1->7等等...
标签: python python-3.x math random