开发硬币翻转模拟程序并探究连续三次同结果的翻转次数问题
连续三次相同硬币翻转的次数探究
问题描述
要得到连续三次相同的硬币翻转结果(三次正面H或三次反面T):
- 最少需要翻转多少次?
- 最多可能需要多少次?
- 平均需要多少次?
我们可以通过Python程序模拟公平硬币(正反概率各50%)的翻转过程来探究这些问题,要求:
- 持续翻转直到出现连续三次H或T
- 同一行输出所有翻转结果及达到条件所需的翻转次数
- 执行10次模拟,并最终报告平均翻转次数
修正后的实现代码
原代码存在逻辑错误(如平均次数计算错误、结果输出时机偏差),以下是修正后的可运行代码:
import random def simulate_flips(): choices = ["H", "T"] sequence = [] while True: flip = random.choice(choices) sequence.append(flip) # 检查最后三次翻转是否完全相同 if len(sequence) >= 3 and sequence[-3] == sequence[-2] == sequence[-1]: return sequence total_flips = 0 for _ in range(10): result = simulate_flips() flip_count = len(result) total_flips += flip_count # 输出单次模拟的结果序列与翻转次数 print(" ".join(result), f"({flip_count} flips)") # 计算并输出10次模拟的平均翻转次数 average = total_flips / 10 print(f"\nOn average, {average} flips were needed.")
示例输出
H T T T (4 flips) H H T T H T H T T H H T H T T H T T T (19 flips) T T T (3 flips) T H H H (4 flips) H H H (3 flips) T H T T H T H H T T H H T H T H H H (18 flips) H T T H H H (6 flips) T H T T T (5 flips) T T H T T H T H T H H H (12 flips) T H T T T (5 flips) On average, 7.9 flips were needed.
问题解答
- 最少次数:3次。只要前三次翻转结果完全一致(连续三次H或连续三次T),即可满足条件。
- 最多次数:理论上无上限。存在无限不出现连续三次相同结果的翻转序列(比如交替翻转H和T,或每次出现两次相同结果就切换),因此从概率角度,最多可能需要无限次翻转;但实际模拟中每次都会得到有限的次数。
- 平均次数:通过马尔可夫链模型推导,公平硬币下得到连续三次相同结果的期望翻转次数为14次。小样本模拟(如10次)的结果会有波动,样本量越大,平均结果越接近14。
内容的提问来源于stack exchange,提问作者Mankesh Raj
相关产品推荐
相关产品推荐

