Python案例:统计失误次数,哪队更少?
下面我用一个完整的案例来演示如何统计两支队伍的失误次数,并判断哪队失误更少。

案例背景
假设我们有两支篮球队(A队和B队)的比赛失误记录,需要统计各自的失误总数,然后比较哪队失误更少。
完整代码实现
# ========== 方法一:基础版 ==========
def compare_turnovers(team_a, team_b):
"""统计两队失误次数并比较"""
total_a = sum(team_a)
total_b = sum(team_b)
print(f"A队各场失误: {team_a}")
print(f"B队各场失误: {team_b}")
print(f"A队总失误: {total_a}")
print(f"B队总失误: {total_b}")
print("-" * 30)
if total_a < total_b:
print(f"✅ A队失误更少(少 {total_b - total_a} 次)")
elif total_b < total_a:
print(f"✅ B队失误更少(少 {total_a - total_b} 次)")
else:
print("🤝 两队失误次数相同")
# 测试数据:每场比赛的失误次数
team_a = [12, 8, 15, 10, 7]
team_b = [10, 14, 9, 11, 13]
compare_turnovers(team_a, team_b)
输出结果:
A队各场失误: [12, 8, 15, 10, 7]
B队各场失误: [10, 14, 9, 11, 13]
A队总失误: 52
B队总失误: 57
------------------------------
✅ A队失误更少(少 5 次)
进阶版:使用字典和函数式编程
from functools import reduce
def analyze_turnovers(data):
"""
data: {'队名': [失误列表], ...}
返回统计结果
"""
stats = {}
for team, turnovers in data.items():
stats[team] = {
'总失误': sum(turnovers),
'平均失误': round(sum(turnovers) / len(turnovers), 2),
'最多失误': max(turnovers),
'最少失误': min(turnovers),
}
# 找出失误最少的队
min_team = min(stats, key=lambda t: stats[t]['总失误'])
return stats, min_team
# 数据
data = {
'A队': [12, 8, 15, 10, 7],
'B队': [10, 14, 9, 11, 13],
'C队': [6, 9, 8, 7, 10],
}
stats, winner = analyze_turnovers(data)
# 打印统计表
print(f"{'队伍':<6}{'总失误':<8}{'平均失误':<10}{'最多':<6}{'最少':<6}")
print("-" * 40)
for team, s in stats.items():
print(f"{team:<6}{s['总失误']:<8}{s['平均失误']:<10}{s['最多失误']:<6}{s['最少失误']:<6}")
print(f"\n🏆 失误最少的队伍是:{winner}(共 {stats[winner]['总失误']} 次)")
输出结果:
队伍 总失误 平均失误 最多 最少
----------------------------------------
A队 52 10.4 15 7
B队 57 11.4 14 9
C队 40 8.0 10 6
🏆 失误最少的队伍是:C队(共 40 次)
关键知识点
| 知识点 | 说明 |
|---|---|
sum() |
求列表元素总和 |
min(key=...) |
按指定规则找最小值 |
lambda |
匿名函数,用于排序/查找规则 |
| 字典遍历 | 存储多队数据,结构清晰 |
输入动态数据版(可交互)
def input_team_data():
"""让用户输入每队的失误数据"""
data = {}
n = int(input("请输入队伍数量: "))
for i in range(n):
name = input(f"第{i+1}队名称: ")
turnovers = list(map(int, input(f"{name}各场失误(空格分隔): ").split()))
data[name] = turnovers
return data
data = input_team_data()
stats, winner = analyze_turnovers(data)
print(f"\n失误最少的队伍:{winner}")
统计"哪队失误更少"的核心逻辑:
- 收集数据 → 用列表/字典存储每队失误
- 汇总计算 → 用
sum()求总数 - 比较大小 → 用
min()或if-elif找最少 - 输出结论 → 格式化打印结果
如果你有具体的场景(比如足球、考试错题、代码报错等),告诉我,我可以针对性改写这个案例 😊