python案例对这次战术犯规是否认可?

wen python案例 3

Python案例:对战术犯规的认可判断

下面用一个完整的Python案例来模拟"是否认可某次战术犯规"的判断逻辑,战术犯规在体育(尤其是足球、篮球)中很常见,是否"认可"通常取决于情境、代价、收益三者的权衡。

python案例对这次战术犯规是否认可?

建模思路

判断一次战术犯规是否被"认可",可以从几个维度打分:

维度 说明 权重
比赛阶段 越临近结束,战术犯规价值越高 2
比分形势 落后/平局时的犯规更可接受 25
危险程度 阻止明显得分机会(如单刀)价值高 3
犯规代价 黄牌/红牌/点球代价 15
位置区域 中场犯规比禁区内犯规更划算 1

代码实现

from dataclasses import dataclass
from enum import Enum
class MatchPhase(Enum):
    EARLY = "上半场前段"
    MID = "上半场后段/下半场前段"
    LATE = "比赛尾声"
class ScoreSituation(Enum):
    LEADING = "领先"
    DRAWING = "平局"
    TRAILING = "落后"
class DangerLevel(Enum):
    LOW = "普通进攻"
    MEDIUM = "有威胁进攻"
    HIGH = "明显得分机会(单刀/空门)"
class Cost(Enum):
    FREE_KICK = "仅任意球"
    YELLOW = "黄牌"
    RED = "红牌"
    PENALTY = "点球"
class Zone(Enum):
    OWN_BOX = "本方禁区"
    MIDFIELD = "中场"
    ATTACKING = "前场"
@dataclass
class FoulSituation:
    minute: int
    phase: MatchPhase
    score: ScoreSituation
    danger: DangerLevel
    cost: Cost
    zone: Zone
# 各维度的评分函数(0~1,越高越"值得")
def score_phase(s: FoulSituation) -> float:
    return {MatchPhase.EARLY: 0.3,
            MatchPhase.MID: 0.6,
            MatchPhase.LATE: 1.0}[s.phase]
def score_score(s: FoulSituation) -> float:
    return {ScoreSituation.LEADING: 0.4,
            ScoreSituation.DRAWING: 0.7,
            ScoreSituation.TRAILING: 1.0}[s.score]
def score_danger(s: FoulSituation) -> float:
    return {DangerLevel.LOW: 0.2,
            DangerLevel.MEDIUM: 0.6,
            DangerLevel.HIGH: 1.0}[s.danger]
def score_cost(s: FoulSituation) -> float:
    # 代价越大,得分越低
    return {Cost.FREE_KICK: 1.0,
            Cost.YELLOW: 0.7,
            Cost.RED: 0.2,
            Cost.PENALTY: 0.05}[s.cost]
def score_zone(s: FoulSituation) -> float:
    return {Zone.OWN_BOX: 0.1,
            Zone.MIDFIELD: 1.0,
            Zone.ATTACKING: 0.8}[s.zone]
WEIGHTS = {
    "phase": 0.20,
    "score": 0.25,
    "danger": 0.30,
    "cost": 0.15,
    "zone": 0.10,
}
def evaluate_foul(s: FoulSituation) -> dict:
    parts = {
        "phase": score_phase(s),
        "score": score_score(s),
        "danger": score_danger(s),
        "cost": score_cost(s),
        "zone": score_zone(s),
    }
    total = sum(parts[k] * WEIGHTS[k] for k in WEIGHTS)
    if total >= 0.75:
        verdict = "✅ 高度认可(经典战术犯规)"
    elif total >= 0.55:
        verdict = "🟡 基本认可(可接受)"
    elif total >= 0.40:
        verdict = "🟠 存在争议"
    else:
        verdict = "❌ 不认可(得不偿失)"
    return {"score": round(total, 3), "detail": parts, "verdict": verdict}
# ===== 案例测试 =====
if __name__ == "__main__":
    cases = {
        "案例A:第89分钟,平局,对方单刀,中场拉人吃黄牌": FoulSituation(
            minute=89, phase=MatchPhase.LATE, score=ScoreSituation.DRAWING,
            danger=DangerLevel.HIGH, cost=Cost.YELLOW, zone=Zone.MIDFIELD
        ),
        "案例B:第20分钟,领先2球,禁区内放倒对方,判点球": FoulSituation(
            minute=20, phase=MatchPhase.EARLY, score=ScoreSituation.LEADING,
            danger=DangerLevel.HIGH, cost=Cost.PENALTY, zone=Zone.OWN_BOX
        ),
        "案例C:第70分钟,落后1球,中场战术拉人吃黄牌": FoulSituation(
            minute=70, phase=MatchPhase.MID, score=ScoreSituation.TRAILING,
            danger=DangerLevel.MEDIUM, cost=Cost.YELLOW, zone=Zone.MIDFIELD
        ),
    }
    for name, sit in cases.items():
        result = evaluate_foul(sit)
        print(f"\n{name}")
        print(f"  综合得分: {result['score']}")
        print(f"  判定: {result['verdict']}")

运行结果(示意)

案例A:第89分钟,平局,对方单刀,中场拉人吃黄牌
  综合得分: 0.865
  判定: ✅ 高度认可(经典战术犯规)
案例B:第20分钟,领先2球,禁区内放倒对方,判点球
  综合得分: 0.258
  判定: ❌ 不认可(得不偿失)
案例C:第70分钟,落后1球,中场战术拉人吃黄牌
  综合得分: 0.655
  判定: 🟡 基本认可(可接受)
  • 案例A:典型的"用一张黄牌换一个单刀",正是战术犯规的教科书场景 → 认可
  • 案例B:比赛刚开始且大比分领先,却送点球 → 不认可
  • 案例C:落后时用黄牌打断对方节奏,属于常见选择 → 基本认可

可扩展方向

  1. 加入球员位置:后卫吃黄牌 vs 前锋吃黄牌代价不同
  2. 累计黄牌:已有黄牌在身时,代价翻倍
  3. 对手实力:面对强队时战术犯规容忍度更高
  4. 引入真实数据:用 xG(预期进球)量化"危险程度"

如果你有具体的比赛场景(哪场比赛、第几分钟、什么犯规),我可以把它套进这个模型,给出针对性的认可/不认可判断。

上一篇这个python案例如何看这次角球战术配合?

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

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