本文目录导读:

我可以为您提供一个实用的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("巴西", "德国")
核心功能
- 添加/移除红黄牌
- 比较两支球队(红牌优先级更高,加权分 = 红牌×3 + 黄牌)
- 显示所有球队排名
- 数据持久化(保存/加载JSON)
- 判断结果明确显示哪队红黄牌更多
运行示例
$ python script.py
🏆 足球红黄牌统计工具
==================================================
1. 添加黄牌
2. 添加红牌
...
输入数据后可立即看到:
- 每队的红黄牌数量
- 红牌优先的比较结果
- 加权积分排名
扩展建议
- 可以修改红牌权重(如改成2倍或5倍)
- 添加球队分组/联赛支持
- 增加图表可视化
- 支持CSV/Excel导出
这个脚本简单实用,适合记录和比较足球比赛中各队的纪律处罚情况。