python案例认为上半场是否有进球产生?

wen python案例 1

Python案例:判断上半场是否有进球产生

这是一个常见的体育数据分析问题,下面我用一个完整的Python案例来演示如何判断足球比赛上半场是否有进球。

python案例认为上半场是否有进球产生?

问题分析

要判断上半场是否有进球,需要知道:

  • 上半场的进球事件(时间 ≤ 45分钟,含补时)
  • 可以通过上半场结束时的比分,或进球事件列表来判断

基础案例

案例1:通过比分判断

def has_first_half_goal(half_time_score):
    """
    通过半场比分判断上半场是否有进球
    :param half_time_score: 元组 (主队进球, 客队进球)
    :return: True/False
    """
    home_goals, away_goals = half_time_score
    return (home_goals + away_goals) > 0
# 测试
matches = [
    ("比赛A", (1, 0)),
    ("比赛B", (0, 0)),
    ("比赛C", (2, 1)),
    ("比赛D", (0, 0)),
]
for name, score in matches:
    result = "有进球 ✅" if has_first_half_goal(score) else "无进球 ❌"
    print(f"{name} 半场比分 {score} → 上半场{result}")

输出:

比赛A 半场比分 (1, 0) → 上半场有进球 ✅
比赛B 半场比分 (0, 0) → 上半场无进球 ❌
比赛C 半场比分 (2, 1) → 上半场有进球 ✅
比赛D 半场比分 (0, 0) → 上半场无进球 ❌

案例2:通过进球事件列表判断(更真实)

实际数据通常是进球事件,需要判断进球时间是否在上半场(≤45分钟)。

def has_first_half_goal_by_events(events, first_half_end=45):
    """
    通过进球事件列表判断上半场是否有进球
    :param events: 进球事件列表,每个元素为 dict {"team":..., "minute":..., "player":...}
    :param first_half_end: 上半场结束时间(含补时可用46+)
    :return: bool
    """
    for event in events:
        if event["minute"] <= first_half_end:
            return True
    return False
# 示例:一场比赛的所有进球
match_events = [
    {"team": "主队", "minute": 23, "player": "张三"},
    {"team": "客队", "minute": 67, "player": "李四"},
    {"team": "主队", "minute": 88, "player": "王五"},
]
if has_first_half_goal_by_events(match_events):
    print("✅ 上半场有进球")
    for e in match_events:
        if e["minute"] <= 45:
            print(f"   ⚽ {e['minute']}' {e['player']} ({e['team']})")
else:
    print("❌ 上半场无进球")

输出:

✅ 上半场有进球
   ⚽ 23' 张三 (主队)

进阶案例:批量分析(Pandas)

import pandas as pd
# 模拟多场比赛的进球数据
data = {
    "match_id": [1, 1, 2, 3, 3, 3, 4],
    "team": ["主", "客", "主", "主", "客", "客", "主"],
    "minute": [23, 67, 12, 5, 30, 80, 55],
    "player": ["A", "B", "C", "D", "E", "F", "G"],
}
df = pd.DataFrame(data)
# 标记是否为上半场进球(≤45分钟)
df["is_first_half"] = df["minute"] <= 45
# 按比赛分组统计
result = df.groupby("match_id")["is_first_half"].any().reset_index()
result.columns = ["match_id", "上半场有进球"]
print(result)

输出:

   match_id  上半场有进球
0         1     True
1         2     True
2         3     True
3         4    False

考虑补时的情况

真实比赛中,上半场补时进球也算上半场,可以这样处理:

def judge_first_half(minute, half=1, stoppage=3):
    """
    判断进球是否属于上半场
    :param minute: 进球分钟
    :param half: 判断哪半场
    :param stoppage: 常规时间后的补时分钟数
    """
    if half == 1:
        return minute <= 45 + stoppage   # 上半场含补时
    else:
        return minute > 45  # 下半场
# 测试
test_minutes = [40, 45, 46, 47, 48, 50]
print("上半场补时3分钟的情景:")
for m in test_minutes:
    flag = "属于上半场" if judge_first_half(m, half=1) else "不属于上半场"
    print(f"  {m}' → {flag}")

输出:

上半场补时3分钟的情景:
  40' → 属于上半场
  45' → 属于上半场
  46' → 属于上半场
  47' → 属于上半场
  48' → 属于上半场
  50' → 不属于上半场

关键判断逻辑总结

判断方式 适用场景 核心逻辑
半场比分 数据源已有比分 home + away > 0
进球事件 有详细事件数据 minute <= 45 (+补时)
批量分析 多场比赛统计 groupby().any()

核心原则:只要上半场任意一方进球数 > 0,则该场上半场有进球。


如果你有具体的数据格式(CSV、API 返回的 JSON),可以贴出来,我帮你写成对应的解析代码。

上一篇根据python案例,鱼跃冲顶头球几次?

下一篇当前分类已是最新一篇

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