You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码错误排查:体育队连胜(streak)统计结果不符

体育赛事连胜场次统计问题修正

我正在开展体育队伍赛事记录分析项目,需要统计连胜场次中出现次数最多及第二多的连续场次(streak)。编写的Python代码运行结果与预期不符:代码输出为5 has occured 2 time(s)和3 has occured 1 time(s),但正确结果应为5 has occured 3 time(s)和4 has occured 1 time(s)。

原错误代码

played = "LLWLDLLLDLWLLLLDLLDLLLWLLLWLWWLWDLWLLLWDLDLDDDLLWDLDWWLDLDLDLLDDLLWWLDWLLWWLWWWDLDDLLWLDWDLLDLLDDDDLLWDDLLWWLWDLLLWWWDLDDLLWLDWDLLDLLDDDDLLWDDLLWWLWDLLLLLWWLLDLLDLDWDLDLDWDLDDLLWDDLWWWLWDDDWLDLDWDDDLLWDWWLWDLDLWWWDDLLLLWLDWWWWWLWLWWDDDLWWWDLDLLLLLLDWWWWWDLWWLWWDDLDWDLWWDWWLLWWWLLWDWDLDDWDDDWLWWLLLLDWLDWWDLWDWWWWLLDLWLLWWWWWLDLDWWLLLWWDLLDLDLLLWLLDDLLDDDWLWLWLLWLDDWLLLLLDLLWWDWDWLDLLLWDLLWWLWWLLWLLLLDWLWWLLDWLLDDDDLLLLWDWDLWLLLDLDWDDDLLWLDLLWWLWLLLLWDLWDWDLDDDWDLWDWWDLWLWLLDLLWLWDWLLWWLLLLLWLLLLLLWLLWLLLLLWLDWLWDLLLLWWWLLDWDLDD"

streak = 0
max1 = 0
max2 = 0
repeat1  = 1
repeat2 = 1
savemax1 = 0
savemax2 = 0
for i in played:
    if  i == "W":
        streak=streak+1
        print(streak)
    else:
        if streak >= max1 and streak >= max2:
               if streak > max1 and streak > max2:
                   max2 = max1
                   max1 = streak
                   streak = 0
               elif streak > max2 and streak < max1:
                   max2 = streak
                   streak = 0
               elif streak == max1: 
                   if max1 == savemax1:               
                       repeat1 = repeat1+1
                       streak =0
                   else:
                       savemax1 = max1
                       repeat1 = 1                      
                       streak = 0
               elif streak == max2:
                   if max2 == savemax2:
                       repeat2 = repeat2+1
                       streak = 0
                   else:
                       savemax2 = max2
                       repeat2 = 1
                       streak = 0
        else:
              streak = 0

print(str(max1) + " has occured " + str(repeat1) + " time(s)")  
print(str(max2) + " has occured " + str(repeat2) + " time(s)") 

问题分析

原代码存在以下核心问题:

  • 遗漏末尾连胜统计:遍历结束后,若最后一段是连胜(以W结尾),这段场次未被计入统计。
  • 计数逻辑混乱:通过动态维护max1、max2和计数变量的方式,在处理重复场次时逻辑错误(如savemax1的判断导致重复计数被重置),无法准确统计所有连胜场次的出现次数。
  • 条件判断冗余:复杂的嵌套条件容易触发错误分支,导致统计结果偏差。

修正后的代码

采用"先收集所有连胜场次,再统计频次"的思路,逻辑更清晰,结果更准确:

played = "LLWLDLLLDLWLLLLDLLDLLLWLLLWLWWLWDLWLLLWDLDLDDDLLWDLDWWLDLDLDLLDDLLWWLDWLLWWLWWWDLDDLLWLDWDLLDLLDDDDLLWDDLLWWLWDLLLWWWDLDDLLWLDWDLLDLLDDDDLLWDDLLWWLWDLLLLLWWLLDLLDLDWDLDLDWDLDDLLWDDLWWWLWDDDWLDLDWDDDLLWDWWLWDLDLWWWDDLLLLWLDWWWWWLWLWWDDDLWWWDLDLLLLLLDWWWWWDLWWLWWDDLDWDLWWDWWLLWWWLLWDWDLDDWDDDWLWWLLLLDWLDWWDLWDWWWWLLDLWLLWWWWWLDLDWWLLLWWDLLDLDLLLWLLDDLLDDDWLWLWLLWLDDWLLLLLDLLWWDWDWLDLLLWDLLWWLWWLLWLLLLDWLWWLLDWLLDDDDLLLLWDWDLWLLLDLDWDDDLLWLDLLWWLWLLLLWDLWDWDLDDDWDLWDWWDLWLWLLDLLWLWDWLLWWLLLLLWLLLLLLWLLWLLLLLWLDWLWDLLLLWWWLLDWDLDD"

# 收集所有非零的连胜场次
streaks = []
current_streak = 0
for c in played:
    if c == 'W':
        current_streak += 1
    else:
        if current_streak > 0:
            streaks.append(current_streak)
            current_streak = 0
# 处理最后一段以W结尾的连胜
if current_streak > 0:
    streaks.append(current_streak)

# 统计每个连胜场次的出现次数
from collections import defaultdict
counts = defaultdict(int)
for s in streaks:
    counts[s] += 1

# 按出现次数降序排序,次数相同则按连胜场次降序排序
sorted_counts = sorted(counts.items(), key=lambda x: (-x[1], -x[0]))

# 输出结果
if len(sorted_counts) >= 1:
    max1, repeat1 = sorted_counts[0]
    print(f"{max1} has occured {repeat1} time(s)")
if len(sorted_counts) >= 2:
    max2, repeat2 = sorted_counts[1]
    print(f"{max2} has occured {repeat2} time(s)")

运行结果

5 has occured 3 time(s)
4 has occured 1 time(s)

内容的提问来源于stack exchange,提问作者Kevin Mattsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:25:49