python案例统计角球数哪边领先?

wen python案例 1

Python 案例:统计角球数哪边领先

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

python案例统计角球数哪边领先?

基础版本(手动录入数据)

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 读取并统计的版本吗?

抱歉,评论功能暂时关闭!