实用脚本统计红黄牌数量哪队更多?

wen 实用脚本 4

本文目录导读:

实用脚本统计红黄牌数量哪队更多?

  1. 完整脚本
  2. 使用方法
  3. 核心功能
  4. 运行示例
  5. 扩展建议

我可以为您提供一个实用的Python脚本,用于统计两支球队(或更多球队)的红黄牌数量并比较哪队更多。

完整脚本

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
红黄牌统计与比较脚本
功能:统计并比较不同球队的红黄牌数量
"""
import json
import sys
from collections import defaultdict
class RedCardStats:
    def __init__(self):
        self.teams = defaultdict(lambda: {"yellow": 0, "red": 0})
    def add_yellow(self, team_name, count=1):
        """添加黄牌"""
        self.teams[team_name]["yellow"] += count
        print(f"✅ 已为 {team_name} 添加 {count} 张黄牌")
    def add_red(self, team_name, count=1):
        """添加红牌"""
        self.teams[team_name]["red"] += count
        print(f"🔴 已为 {team_name} 添加 {count} 张红牌")
    def remove_yellow(self, team_name, count=1):
        """移除黄牌"""
        if team_name in self.teams:
            self.teams[team_name]["yellow"] = max(0, self.teams[team_name]["yellow"] - count)
            print(f"➖ 已为 {team_name} 移除 {count} 张黄牌")
        else:
            print(f"⚠️ 球队 {team_name} 不存在")
    def remove_red(self, team_name, count=1):
        """移除红牌"""
        if team_name in self.teams:
            self.teams[team_name]["red"] = max(0, self.teams[team_name]["red"] - count)
            print(f"➖ 已为 {team_name} 移除 {count} 张红牌")
        else:
            print(f"⚠️ 球队 {team_name} 不存在")
    def get_total_score(self, team_name):
        """获取球队总处罚分(用于比较)"""
        if team_name in self.teams:
            # 红牌计分更高,但这里主要看数量比较
            return self.teams[team_name]["red"], self.teams[team_name]["yellow"]
        return 0, 0
    def compare_teams(self, team1, team2):
        """比较两支球队的处罚情况"""
        if team1 not in self.teams or team2 not in self.teams:
            missing = [t for t in [team1, team2] if t not in self.teams]
            return f"⚠️ 缺少球队数据: {', '.join(missing)}"
        t1 = self.teams[team1]
        t2 = self.teams[team2]
        # 计算加权分(红牌权重更高,用3倍分)
        t1_score = t1["red"] * 3 + t1["yellow"]
        t2_score = t2["red"] * 3 + t2["yellow"]
        print("\n" + "="*50)
        print(f"📊 球队对比结果")
        print("="*50)
        print(f"🏳️  {team1}:红牌 {t1['red']} 张,黄牌 {t1['yellow']} 张")
        print(f"🏳️  {team2}:红牌 {t2['red']} 张,黄牌 {t2['yellow']} 张")
        print(f"加权分(红牌×3 + 黄牌):{team1} {t1_score} vs {team2} {t2_score}")
        if t1['red'] > t2['red']:
            result = f"🔴 {team1} 红牌更多({t1['red']} vs {t2['red']})"
        elif t2['red'] > t1['red']:
            result = f"🔴 {team2} 红牌更多({t2['red']} vs {t1['red']})"
        elif t1['yellow'] > t2['yellow']:
            result = f"🟡 {team1} 黄牌更多({t1['yellow']} vs {t2['yellow']})"
        elif t2['yellow'] > t1['yellow']:
            result = f"🟡 {team2} 黄牌更多({t2['yellow']} vs {t1['yellow']})"
        else:
            result = "🤝 两队红黄牌完全持平"
        print(f"结果:{result}")
        print("="*50)
        # 返回加权比较结果
        if t1_score > t2_score:
            return f"{team1} 处罚更多"
        elif t2_score > t1_score:
            return f"{team2} 处罚更多"
        else:
            return "两队处罚持平"
    def display_all_teams(self):
        """显示所有球队数据"""
        if not self.teams:
            print("📭 暂无球队数据")
            return
        print("\n" + "="*60)
        print(f"📋 所有球队红黄牌统计(共 {len(self.teams)} 支球队)")
        print("="*60)
        print(f"{'球队':<15} {'红牌':<6} {'黄牌':<6} {'加权分':<8}")
        print("-"*40)
        # 按加权分排序显示
        sorted_teams = sorted(
            self.teams.items(),
            key=lambda x: x[1]["red"]*3 + x[1]["yellow"],
            reverse=True
        )
        for team, stats in sorted_teams:
            score = stats["red"]*3 + stats["yellow"]
            red_icon = "🔴" if stats["red"] > 0 else "⚪"
            yellow_icon = "🟡" if stats["yellow"] > 0 else "⚪"
            print(f"{team:<15} {red_icon} {stats['red']:<4} {yellow_icon} {stats['yellow']:<4} {score:<8}")
        print("="*60)
    def save_to_json(self, filename="red_card_stats.json"):
        """保存数据到JSON文件"""
        try:
            with open(filename, 'w', encoding='utf-8') as f:
                json.dump(dict(self.teams), f, ensure_ascii=False, indent=2)
            print(f"💾 数据已保存到 {filename}")
        except Exception as e:
            print(f"❌ 保存失败: {e}")
    def load_from_json(self, filename="red_card_stats.json"):
        """从JSON文件加载数据"""
        try:
            with open(filename, 'r', encoding='utf-8') as f:
                data = json.load(f)
                for team, stats in data.items():
                    self.teams[team] = stats
            print(f"📂 已从 {filename} 加载数据")
        except FileNotFoundError:
            print(f"⚠️ 文件 {filename} 不存在")
        except Exception as e:
            print(f"❌ 加载失败: {e}")
def main():
    stats = RedCardStats()
    while True:
        print("\n" + "="*50)
        print("🏆 足球红黄牌统计工具")
        print("="*50)
        print("1. 添加黄牌")
        print("2. 添加红牌")
        print("3. 移除黄牌")
        print("4. 移除红牌")
        print("5. 显示所有球队统计")
        print("6. 比较两支球队")
        print("7. 保存数据")
        print("8. 加载数据")
        print("9. 退出")
        print("="*50)
        choice = input("请选择操作: ").strip()
        if choice == '1':
            team = input("球队名称: ").strip()
            count = int(input("黄牌数量: ") or 1)
            stats.add_yellow(team, count)
        elif choice == '2':
            team = input("球队名称: ").strip()
            count = int(input("红牌数量: ") or 1)
            stats.add_red(team, count)
        elif choice == '3':
            team = input("球队名称: ").strip()
            count = int(input("移除黄牌数量: ") or 1)
            stats.remove_yellow(team, count)
        elif choice == '4':
            team = input("球队名称: ").strip()
            count = int(input("移除红牌数量: ") or 1)
            stats.remove_red(team, count)
        elif choice == '5':
            stats.display_all_teams()
        elif choice == '6':
            team1 = input("第一支球队: ").strip()
            team2 = input("第二支球队: ").strip()
            result = stats.compare_teams(team1, team2)
            print(f"\n📌 最终判定: {result}")
        elif choice == '7':
            filename = input("保存文件名(默认 red_card_stats.json): ").strip() or "red_card_stats.json"
            stats.save_to_json(filename)
        elif choice == '8':
            filename = input("加载文件名(默认 red_card_stats.json): ").strip() or "red_card_stats.json"
            stats.load_from_json(filename)
        elif choice == '9':
            print("👋 再见!")
            break
        else:
            print("⚠️ 无效选择,请重新输入")
# 快速示例用法(一行命令模式)
def quick_compare(team1_data, team2_data):
    """
    快速比较两个球队的数据
    参数格式: {"team1": {"red": 1, "yellow": 2}, "team2": {"red": 0, "yellow": 3}}
    """
    stats = RedCardStats()
    for team, data in team1_data.items():
        stats.teams[team] = data
    for team, data in team2_data.items():
        stats.teams[team] = data
    stats.display_all_teams()
if __name__ == "__main__":
    # 如果提供了命令行参数,直接比较
    if len(sys.argv) > 1:
        # 命令行模式: python script.py team1 red1 yellow1 team2 red2 yellow2
        if len(sys.argv) >= 7:
            stats = RedCardStats()
            stats.teams[sys.argv[1]] = {"red": int(sys.argv[2]), "yellow": int(sys.argv[3])}
            stats.teams[sys.argv[4]] = {"red": int(sys.argv[5]), "yellow": int(sys.argv[6])}
            stats.compare_teams(sys.argv[1], sys.argv[4])
            stats.display_all_teams()
        else:
            print("命令行用法: python script.py 球队1 红牌数 黄牌数 球队2 红牌数 黄牌数")
    else:
        main()

使用方法

交互模式(推荐)

直接运行脚本,进入交互菜单:

python script.py

命令行快速比较

python script.py "阿根廷" 1 2 "法国" 0 3

Python代码中直接使用

from script import RedCardStats
stats = RedCardStats()
stats.add_red("巴西", 2)
stats.add_yellow("德国", 3)
stats.add_red("德国", 1)
# 比较
stats.compare_teams("巴西", "德国")

核心功能

  1. 添加/移除红黄牌
  2. 比较两支球队(红牌优先级更高,加权分 = 红牌×3 + 黄牌)
  3. 显示所有球队排名
  4. 数据持久化(保存/加载JSON)
  5. 判断结果明确显示哪队红黄牌更多

运行示例

$ python script.py
🏆 足球红黄牌统计工具
==================================================
1. 添加黄牌
2. 添加红牌
...

输入数据后可立即看到:

  • 每队的红黄牌数量
  • 红牌优先的比较结果
  • 加权积分排名

扩展建议

  • 可以修改红牌权重(如改成2倍或5倍)
  • 添加球队分组/联赛支持
  • 增加图表可视化
  • 支持CSV/Excel导出

这个脚本简单实用,适合记录和比较足球比赛中各队的纪律处罚情况。

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