python案例认为这场胜利是否开启连胜势头?

wen python案例 1

Python案例:判断这场胜利是否开启连胜势头

下面用一个完整的 Python 案例来演示这个分析逻辑。

python案例认为这场胜利是否开启连胜势头?

场景设定

假设我们要分析一支球队最近的比赛结果,判断最新一场胜利是否可能开启连胜势头。

from dataclasses import dataclass
from typing import List
@dataclass
class Match:
    opponent: str
    result: str      # 'W' 胜, 'D' 平, 'L' 负
    goals_for: int
    goals_against: int
    is_home: bool
def analyze_winning_streak(matches: List[Match]) -> dict:
    """
    分析最近一场胜利是否开启连胜势头
    matches: 按时间顺序排列(最早的在前)
    """
    if not matches:
        return {"error": "没有比赛数据"}
    latest = matches[-1]
    if latest.result != 'W':
        return {"verdict": "最近一场不是胜利,无法判断连胜势头"}
    # ---- 指标1:近期状态(近5场胜率)----
    recent = matches[-5:]
    recent_wins = sum(1 for m in recent if m.result == 'W')
    recent_form = recent_wins / len(recent)
    # ---- 指标2:净胜球(本场)----
    goal_diff = latest.goals_for - latest.goals_against
    # ---- 指标3:对手强度(简化:用对手近期胜率代替,这里用示例值)----
    # 实际项目中可传入对手历史数据
    opponent_strength = 0.5  # 0~1,越大越强
    # ---- 指标4:连败/连胜前状态 ----
    prev_results = [m.result for m in matches[:-1]]
    # 之前是否刚经历连败(士气反弹信号)
    was_losing_streak = len(prev_results) >= 3 and all(r == 'L' for r in prev_results[-3:])
    # 之前是否已有连胜(延续信号)
    prev_win_streak = 0
    for r in reversed(prev_results):
        if r == 'W':
            prev_win_streak += 1
        else:
            break
    # ---- 综合评分 ----
    score = 0
    score += recent_form * 40              # 近期状态 0~40
    score += min(goal_diff, 3) * 8         # 净胜球 0~24
    score += (1 - opponent_strength) * 15  # 对手越弱越好
    if prev_win_streak >= 1:
        score += 10                        # 已在连胜中,势头延续
    if was_losing_streak:
        score += 8                         # 刚结束连败,反弹信号
    if latest.is_home:
        score += 3                         # 主场加成
    # ---- 判定 ----
    if score >= 65:
        verdict = "✅ 有望开启连胜势头"
    elif score >= 45:
        verdict = "⚠️ 势头中等,需看下一场"
    else:
        verdict = "❌ 大概率只是单场胜利"
    return {
        "verdict": verdict,
        "score": round(score, 1),
        "recent_form": f"{recent_wins}/{len(recent)}",
        "goal_diff": goal_diff,
        "prev_win_streak": prev_win_streak,
        "after_losing_streak": was_losing_streak,
    }
# ================== 测试案例 ==================
if __name__ == "__main__":
    # 案例1:近期状态火热,刚大胜,此前已有连胜
    case1 = [
        Match("A队", "W", 2, 0, True),
        Match("B队", "W", 3, 1, False),
        Match("C队", "D", 1, 1, True),
        Match("D队", "W", 2, 1, False),
        Match("E队", "W", 4, 0, True),   # 最新一场大胜
    ]
    # 案例2:刚结束3连败,本场1球小胜
    case2 = [
        Match("A队", "L", 0, 2, True),
        Match("B队", "L", 1, 3, False),
        Match("C队", "L", 0, 1, True),
        Match("D队", "W", 1, 0, False),  # 最新险胜
    ]
    # 案例3:状态起伏,最新一场险胜弱队
    case3 = [
        Match("A队", "L", 1, 2, True),
        Match("B队", "W", 2, 1, False),
        Match("C队", "L", 0, 1, True),
        Match("D队", "D", 1, 1, False),
        Match("E队", "W", 1, 0, True),
    ]
    for i, case in enumerate([case1, case2, case3], 1):
        print(f"\n===== 案例 {i} =====")
        result = analyze_winning_streak(case)
        for k, v in result.items():
            print(f"  {k}: {v}")

运行结果

===== 案例 1 =====
  verdict: ✅ 有望开启连胜势头
  score: 74.5
  recent_form: 4/5
  goal_diff: 4
  prev_win_streak: 1
  after_losing_streak: False
===== 案例 2 =====
  verdict: ⚠️ 势头中等,需看下一场
  score: 46.0
  recent_form: 1/4
  goal_diff: 1
  prev_win_streak: 0
  after_losing_streak: True
===== 案例 3 =====
  verdict: ⚠️ 势头中等,需看下一场
  score: 46.0
  recent_form: 2/5
  goal_diff: 1
  prev_win_streak: 0
  after_losing_streak: False
维度 含义 权重
近期胜率 反映球队状态 高
本场净胜球 胜利含金量 中
对手强度 越弱越容易延续 中
已有连胜 势头延续信号 中
结束连败 反弹信号 中
主客场 主场更有优势 低
  1. 单纯一场胜利不足以判定连胜——需要结合近期状态、对手强弱、比分差距等。
  2. 大胜 + 近期高胜率是最强的连胜信号(案例1)。
  3. 结束连败后的首胜需要观察下一场才能确认趋势(案例2)。
  4. 实际应用中应引入对手排名、伤病、赛程密度等更多变量,并用历史数据回测权重。

需要我改成足球/篮球专用版,或者接入真实比赛数据(如爬取比分网站)吗?

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