如何在Python抛硬币模拟器中统计最长连续Heads/Tails streak?
抛硬币模拟器:添加最长连续正反面统计并修复逻辑问题
现有代码存在的问题
- 未导入
randint函数,运行会触发未定义错误 - 重复游玩的逻辑混乱,
while循环位置错误,且turn == 0是比较操作而非赋值 - 缺少最长连续正面/反面的统计逻辑
修改后的完整代码
from random import randint def coin_toss(): heads_count = 0 tails_count = 0 # 初始化连续次数统计变量 current_heads_streak = 0 max_heads_streak = 0 current_tails_streak = 0 max_tails_streak = 0 number_of_flips = int(input('请输入抛硬币次数:')) for index in range(1, number_of_flips + 1): flip = randint(1, 2) if flip == 1: print(f'第{index}次结果:正面(Heads)') heads_count += 1 # 更新正面连续次数 current_heads_streak += 1 current_tails_streak = 0 # 更新最长正面连续记录 if current_heads_streak > max_heads_streak: max_heads_streak = current_heads_streak else: print(f'第{index}次结果:反面(Tails)') tails_count += 1 # 更新反面连续次数 current_tails_streak += 1 current_heads_streak = 0 # 更新最长反面连续记录 if current_tails_streak > max_tails_streak: max_tails_streak = current_tails_streak print('\n') print(f'正面次数:{heads_count}') print(f'反面次数:{tails_count}') print(f'最长连续正面:{max_heads_streak}次') print(f'最长连续反面:{max_tails_streak}次') print('\n') # 控制重复游玩的逻辑 while True: coin_toss() replay = input('是否要继续游玩?y/n ') if replay.lower() != 'y': break
关键修改说明
- 补充
from random import randint:解决随机数函数未定义的问题 - 变量命名规范化:将原大写变量改为小写(如
Heads→heads_count),符合Python代码风格 - 新增连续次数统计:用两组变量分别跟踪当前连续次数和历史最长连续次数,每次抛硬币时实时更新
- 重构循环索引:直接通过
range生成从1开始的次数编号,去掉冗余的index变量 - 修复重复游玩逻辑:用
while True循环替代原混乱的turn变量逻辑,每次游戏结束后询问用户是否继续,输入非'y'则退出
内容的提问来源于stack exchange,提问作者catsim2
相关产品推荐
相关产品推荐

