有人能帮我解释一下下面Realpython分配任务的解决方案吗?我发现的解决方案似乎令人困惑。在
编写一个python脚本,它使用掷硬币模拟来确定这个稍微复杂一些的概率谜题的答案:我不断地翻转一个公平的硬币,直到我看到它至少每个正面和反面都落下一次——换句话说,在我第一次掷硬币之后,我继续掷硬币,直到得到不同的结果。平均来说,我总共要掷多少次硬币?同样,可以计算出实际的概率,但这里的重点是使用randint来模拟事件。为了得到预期的平均投掷次数,你应该设置一个变量试验值为10000,一个变量翻转值为0,然后在每次掷硬币时将1加到你的掷骰变量中。然后你可以在代码末尾打印翻转/试验,看看平均翻转次数是多少。在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.
在上面的情况下,如果第一个“翻转”为0,而while循环条件在第一次随机尝试时生成1,则for循环将迭代而不添加翻转。此外,如果while循环在随机尝试等于first_flip时运行,则在while循环轨迹ie中,for循环中的“i”值不会被添加。简言之,最后的翻身次数或多或少要比试验次数少。在
有人能帮我解释一下这背后的逻辑还是更好的python脚本?在