【发布时间】:2018-07-08 19:14:05
【问题描述】:
有人可以帮我解释下面 Realpython 分配任务的解决方案吗?我发现的解决方案似乎令人困惑。
编写一个 Python 脚本,该脚本使用抛硬币模拟来确定这个稍微复杂一点的概率谜题的答案:我不断抛硬币,直到我看到它正面和反面至少各一次——换句话说,第一次掷硬币后,我继续掷硬币,直到得到不同的结果。平均而言,我总共需要掷多少次硬币?同样,可以计算出实际概率,但这里的重点是使用 randint 模拟事件。要获得预期的平均投掷次数,您应该将变量 trial 设置为 10000 ,将变量 flips 设置为 0 ,然后在每次抛硬币时将 1 添加到您的 flips 变量。然后你可以在代码末尾打印翻转/试验,看看平均翻转次数是多少。
from random import randint
flips = 0
trials = 10000
for i in range(trials):
first_flip = randint(0, 1)
while randint(0, 1) == first_flip:
flips += 1 # Every flip after the first flip.
print("flips done is {}".format(flips))
print(flips / trials + 2.0) # Initial trial and final trial added.
在上述情况下,如果 first_flip 为 0 并且 while 循环条件在第一次随机尝试时产生 1,则 for 循环迭代而不添加翻转。此外,如果当随机尝试等于 first_flip 时运行 while 循环,则在 while 循环轨迹内,即不会添加 for 循环中“i”的值。简而言之,最终的翻转次数多于或少于试验次数。
谁能帮我解释一下这个背后的逻辑或更好的python脚本?
【问题讨论】:
标签: python python-3.x algorithm