gpt4 book ai didi

python - 模拟抛硬币实验 - RealPython

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:49 26 4
gpt4 key购买 nike

有人可以帮我解释以下 Realpython 分配任务的解决方案吗?我发现的解决方案似乎令人困惑。

编写一个使用抛硬币模拟的 Python 脚本来确定这个稍微复杂一些的概率谜题的答案:我不断地抛硬币,直到我看到它至少一次正面和反面都落在地上 - 换句话说,在我第一次抛硬币后,我继续抛硬币,直到得到不同的结果。平均而言,我总共需要掷多少次硬币?同样,可以计算出实际概率,但这里的重点是使用 randint 模拟事件。要获得预期的平均抛掷次数,您应该将变量 trials 设置为 10000 并将变量 flips 设置为 0 ,然后在每次抛硬币时将 1 添加到 flips 变量。然后您可以在代码末尾打印 flips/trials 以查看平均翻转次数。

    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 循环迭代而不添加翻转。此外,如果 while 循环在随机尝试等于 first_flip 时运行,则在 while 循环轨迹内,即,不添加 for 循环中“i”的值。简而言之,最终的翻转次数或多于或少于试验次数。

谁能帮我解释这背后的逻辑或更好的 python 脚本?

最佳答案

代码主要按照您的想法工作。您缺少的部分:

if the first_flip is 0 and the while loop condition produces 1 at the very first random attempt, the for loop iterates without adding the flips.

这在底部解决了,

print(flips / trials + 2.0)  # Initial trial and final trial added.

他们在此处添加每次试验的 2 个“缺失”翻转。


如果代码是我写的,我会这样做。

flips = 0
def flip():
global flips
flips += 1
return randint(0,1)

trials = 10000
for i in range(trials):
first_flip = flip()
while flip() == first_flip:
pass

print("flips done is {}".format(flips))
print("average flips", flips / trials)

关于python - 模拟抛硬币实验 - RealPython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com