如何用循环条件实现Roulette game连胜次数与平均连胜长度统计
实现思路与可运行代码
原有代码的问题
- 你写的
while循环中没有修改i的值,会进入死循环 - 末尾的
break会直接终止外层的for循环,无法完成全序列遍历 - 没有新增变量存储连胜次数、总连胜长度等核心统计指标
实现逻辑(仅使用循环+条件语句)
首先初始化4个核心变量:
- 初始资本
start_capital,用来和第一局的结果做对比 win_streak_count = 0:统计总共有多少次赢的连胜total_win_length = 0:统计所有赢连胜的总长度,用来计算平均值current_streak = 0:统计当前正在持续的赢连胜长度
遍历逻辑:
- 逐对对比相邻两个资本值,如果后一个 > 前一个,说明当前局赢,当前连胜长度+1
- 如果后一个 <= 前一个,说明当前连胜中断:如果此时当前连胜长度>0,就把这次连胜计入统计,再重置当前连胜长度为0
- 遍历结束后需要额外判断一次:如果序列末尾刚好是连胜状态,要把最后这次连胜也计入统计
- 平均连胜长度 = 总连胜长度 / 总连胜次数(注意判断总连胜次数为0的边界情况,避免除0报错)
完整代码示例
# 示例输入 start_capital = 100 series = [102,104,106,105,108,109,120,115,116,118,120,122] # 初始化统计变量 win_streak_count = 0 total_win_length = 0 current_streak = 0 # 遍历序列对比相邻值 for i in range(len(series)): # 第一局单独和初始资本对比 if i == 0: if series[i] > start_capital: current_streak += 1 continue # 从第二局开始和前一局的资本对比 if series[i] > series[i-1]: current_streak += 1 else: # 连胜中断,统计之前的连胜 if current_streak > 0: win_streak_count += 1 total_win_length += current_streak current_streak = 0 # 遍历结束后检查末尾是否有未统计的连胜 if current_streak > 0: win_streak_count += 1 total_win_length += current_streak # 计算平均连胜长度 if win_streak_count > 0: avg_win_length = total_win_length / win_streak_count else: avg_win_length = 0 # 输出结果 print(f"总赢连胜次数:{win_streak_count}") print(f"平均赢连胜长度:{avg_win_length}")
示例运行结果
拿你给出的示例序列运行,输出如下:
总赢连胜次数:3
平均赢连胜长度:3.3333333333333335
和你给出的首段连胜长度为3的示例匹配,三段连胜分别是[102,104,106](长度3)、[108,109,120](长度3)、[116,118,120,122](长度4)。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

