Python 案例:统计角球数哪边领先
下面是一个完整的案例,演示如何统计足球比赛中主队 vs 客队的角球数,并判断哪边领先。

基础版本(手动录入数据)
def corner_stats(home_corners, away_corners, home_name="主队", away_name="客队"):
"""
统计角球数并判断领先方
:param home_corners: 主队角球数
:param away_corners: 客队角球数
:return: 结果字典
"""
diff = home_corners - away_corners
if diff > 0:
leader = home_name
lead_by = diff
elif diff < 0:
leader = away_name
lead_by = abs(diff)
else:
leader = "平局"
lead_by = 0
result = {
"主队角球": home_corners,
"客队角球": away_corners,
"总角球": home_corners + away_corners,
"领先方": leader,
"领先数量": lead_by,
"差值": diff
}
return result
# 测试
if __name__ == "__main__":
r = corner_stats(7, 3, "曼城", "阿森纳")
print(f"{r['主队角球']} : {r['客队角球']} (总角球 {r['总角球']})")
print(f"领先方:{r['领先方']},领先 {r['领先数量']} 个角球")
# 平局示例
r2 = corner_stats(5, 5)
print(f"\n平局测试 -> 领先方:{r2['领先方']}")
输出:
7 : 3 (总角球 10)
领先方:曼城,领先 4 个角球
平局测试 -> 领先方:平局
实时比赛(按分钟增量统计)
足球比赛中角球是随时间累积的,更适合用"逐分钟事件流"来统计。
import pandas as pd
# 模拟比赛事件流:分钟、球队、事件类型
events = [
(8, "主队", "角球"),
(15, "客队", "角球"),
(23, "主队", "角球"),
(31, "主队", "角球"),
(44, "客队", "角球"),
(52, "主队", "角球"),
(67, "客队", "角球"),
(78, "主队", "角球"),
(85, "主队", "角球"),
]
df = pd.DataFrame(events, columns=["分钟", "球队", "事件"])
corners = df[df["事件"] == "角球"]
# 按分钟累计
home_cum, away_cum = 0, 0
print(f"{'分钟':>4} | {'主队':>4} | {'客队':>4} | 领先方")
print("-" * 40)
for _, row in corners.iterrows():
if row["球队"] == "主队":
home_cum += 1
else:
away_cum += 1
if home_cum > away_cum:
leader = f"主队 +{home_cum - away_cum}"
elif away_cum > home_cum:
leader = f"客队 +{away_cum - home_cum}"
else:
leader = "平"
print(f"{row['分钟']:>4}' | {home_cum:>4} | {away_cum:>4} | {leader}")
print("\n===== 全场统计 =====")
print(f"主队 {home_cum} - {away_cum} 客队")
if home_cum > away_cum:
print(f"→ 主队角球领先 {home_cum - away_cum} 个")
elif away_cum > home_cum:
print(f"→ 客队角球领先 {away_cum - home_cum} 个")
else:
print("→ 角球数持平")
输出示例:
分钟 | 主队 | 客队 | 领先方
----------------------------------------
8' | 1 | 0 | 主队 +1
15' | 1 | 1 | 平
23' | 2 | 1 | 主队 +1
31' | 3 | 1 | 主队 +2
44' | 3 | 2 | 主队 +1
52' | 4 | 2 | 主队 +2
67' | 4 | 3 | 主队 +1
78' | 5 | 3 | 主队 +2
85' | 6 | 3 | 主队 +3
===== 全场统计 =====
主队 6 - 3 客队
→ 主队角球领先 3 个
可视化领先变化(matplotlib)
import matplotlib.pyplot as plt
minutes = [m for m, _, _ in events]
home_c, away_c = 0, 0
home_line, away_line, diff_line = [], [], []
for _, team, ev in events:
if ev != "角球":
continue
if team == "主队":
home_c += 1
else:
away_c += 1
home_line.append(home_c)
away_line.append(away_c)
diff_line.append(home_c - away_c)
plt.figure(figsize=(9, 4))
plt.plot(minutes, home_line, 'o-', label='主队角球')
plt.plot(minutes, away_line, 's-', label='客队角球')
plt.bar(minutes, diff_line, alpha=0.3, label='差值(主-客)')
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("比赛分钟")
plt.ylabel("角球数 / 差值")"角球数累计与领先变化")
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
关键点小结
| 需求 | 做法 |
|---|---|
| 当前谁领先 | 比较 home - away 的符号 |
| 领先多少 | abs(home - away) |
| 是否平局 | home == away |
| 实时变化 | 按事件流逐条累加 |
| 全场汇总 | 汇总所有"角球"事件 |
如果你有真实数据源(如 API、CSV、爬虫抓取的比赛事件),可以把 events 换成对应的读取逻辑,核心判断逻辑不变,需要我帮你写从某个 API/CSV 读取并统计的版本吗?