- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有人可以帮我解释以下 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/
有人可以帮我解释以下 Realpython 分配任务的解决方案吗?我发现的解决方案似乎令人困惑。 编写一个使用抛硬币模拟的 Python 脚本来确定这个稍微复杂一些的概率谜题的答案:我不断地抛硬币,直
我是一名优秀的程序员,十分优秀!