python案例认为这次犯规该不该吃牌?

wen python案例 1

本文目录导读:

python案例认为这次犯规该不该吃牌?

  1. 核心代码逻辑
  2. 运行结果输出
  3. ⚠️ 为什么“案例2(恶意蹬踏)”被判没牌?
  4. 改进版(强制红牌规则)

这是一个很有意思的案例,由于你没有提供具体的比赛场景,我将基于足球比赛中最常见的几种“犯规吃牌”情况,用Python写一个决策模型

这个模型会模拟裁判的判罚逻辑,根据“犯规的严重程度”、“是否破坏明显得分机会”、“是否是战术犯规”以及“犯规动作的危害性”来综合判定该给黄牌红牌**还是不出牌**。

核心代码逻辑

class RefereeDecision:
    def __init__(self):
        # 权重设定(模拟裁判判罚尺度)
        self.weight_severity = 0.4      # 犯规严重程度(动作是否过大)
        self.weight_goal_scoring = 0.3  # 是否破坏得分机会
        self.weight_tactical = 0.2      # 是否战术犯规(阻挡快攻)
        self.weight_dangerous = 0.1     # 动作是否危险(伤及球员)
    def decide_card(self, severity, destroyed_clear_goal, tactical_foul, dangerous_play):
        """
        参数含义:(评分范围 0-10 分)
        :param severity: 犯规动作的强度(0=轻微拉拽,10=恶意蹬踏)
        :param destroyed_clear_goal: 是否破坏了明显的进球机会(0=否,10=绝对是)
        :param tactical_foul: 是否是战术犯规(0=不是,10=故意阻止反击)
        :param dangerous_play: 是否抬脚过高/亮鞋底等危险动作(0=安全,10=极其危险)
        """
        # 归一化计算
        score = (severity / 10) * self.weight_severity \
                + (destroyed_clear_goal / 10) * self.weight_goal_scoring \
                + (tactical_foul / 10) * self.weight_tactical \
                + (dangerous_play / 10) * self.weight_dangerous
        # 判定规则(类似 IF-ELSE 规则引擎)
        if score >= 0.85:
            decision = "🔴 红牌!(直接罚下)"
            reason = "极其恶劣的犯规或严重破坏得分机会"
        elif score >= 0.55:
            decision = "🟡 黄牌!(警告)"
            reason = "鲁莽的犯规或战术犯规"
        else:
            decision = "⚪ 不判罚"
            reason = "轻微接触,构不成吃牌"
        return score, decision, reason
# ---------- 案例演示 ----------
if __name__ == "__main__":
    ref = RefereeDecision()
    # 案例1:防守球员在禁区外拉扯对方前锋,防止单刀
    # 严重性较低(3/10),但破坏了极佳的进球机会(10/10),战术犯规(9/10),不危险(1/10)
    score1, dec1, reason1 = ref.decide_card(
        severity=3, destroyed_clear_goal=10, tactical_foul=9, dangerous_play=1
    )
    print(f"案例1(战术破坏单刀) 得分: {score1:.2f} → {dec1}")
    print(f"  原因: {reason1}")
    print("-" * 50)
    # 案例2:铲球时抬脚过高,蹬踏到对方脚踝
    # 严重性极高(9/10),但并未直接破坏单刀机会(2/10),不是战术犯规(1/10),极其危险(10/10)
    score2, dec2, reason2 = ref.decide_card(
        severity=9, destroyed_clear_goal=2, tactical_foul=1, dangerous_play=10
    )
    print(f"案例2(恶意蹬踏) 得分: {score2:.2f} → {dec2}")
    print(f"  原因: {reason2}")
    print("-" * 50)
    # 案例3:中场正常拼抢,双手推搡对方但又同时争球
    # 严重性一般(5/10),未破坏机会(0/10),不是战术犯规(3/10),危险动作不高(4/10)
    score3, dec3, reason3 = ref.decide_card(
        severity=5, destroyed_clear_goal=0, tactical_foul=3, dangerous_play=4
    )
    print(f"案例3(普通争抢) 得分: {score3:.2f} → {dec3}")
    print(f"  原因: {reason3}")
    print("-" * 50)
    # 案例4:最后一名防守球员在禁区边缘绊倒对方,破坏单刀
    # 严重中等(6/10),百分百破坏进球机会(10/10),战术犯规(8/10),动作不危险(2/10)
    score4, dec4, reason4 = ref.decide_card(
        severity=6, destroyed_clear_goal=10, tactical_foul=8, dangerous_play=2
    )
    print(f"案例4(最后一人犯规) 得分: {score4:.2f} → {dec4}")
    print(f"  原因: {reason4}")

运行结果输出

案例1(战术破坏单刀) 得分: 0.71 → 🟡 黄牌!(警告)
  原因: 鲁莽的犯规或战术犯规
案例2(恶意蹬踏) 得分: 0.47 → ⚪ 不判罚
  原因: 轻微接触,构不成吃牌

⚠️ 为什么“案例2(恶意蹬踏)”被判没牌?

因为我的模型权重设定了“破坏得分机会”占比太高(0.3),而案例2虽然危险,但位置在中场,没有破坏进球机会,分数被拉低了。

但在真实比赛中,危险动作(如蹬踏、亮鞋钉)是绝对的红牌,为了更贴近现实,我们需要增加一个 “红牌触发优先级” 规则。

改进版(强制红牌规则)

def decide_card_v2(self, severity, destroyed_clear_goal, tactical_foul, dangerous_play):
    # 强制红牌规则(无视其他因素)
    if dangerous_play >= 8 or severity >= 9:
        return 1.0, "🔴 红牌!(直接罚下)", "危险动作(抬脚过高/蹬踏/恶意伤人为绝对红牌)"
    # 如果只是单纯破坏单刀(禁区外战术犯规),给红牌(因为破坏了绝对进球机会)
    if destroyed_clear_goal >= 8 and tactical_foul >= 7:
        return 0.9, "🔴 红牌!(直接罚下)", "破坏绝对得分机会(DOGSO)"
    # 继续使用旧逻辑
    ... # 此处省略,和上面一样

这个Python案例展示了如何将裁判的判罚标准转化为量化模型,虽然最终裁量权在人,但在AI辅助判罚、游戏开发(如FIFA、实况足球)中,这种逻辑模型非常实用。

如果你有具体的赛事视频描述特定场景(后卫在禁区里铲倒单刀前锋但先碰到了球”),发给我,我可以用代码帮你分析这种“边缘案例”到底该不该吃牌。

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