本文目录导读:

我来为您编写一个统计红黄牌数量的Python案例,比较不同球队的得牌情况。
基础版本
def count_cards_basic():
"""基础版本:统计各队红黄牌数量"""
# 模拟比赛数据:每场比赛的得牌情况
matches_data = [
{"home": "巴西", "away": "阿根廷",
"cards": [("黄牌", "巴西"), ("黄牌", "阿根廷"), ("红牌", "巴西"), ("黄牌", "巴西")]},
{"home": "法国", "away": "德国",
"cards": [("黄牌", "法国"), ("黄牌", "德国"), ("黄牌", "德国")]},
{"home": "巴西", "away": "法国",
"cards": [("黄牌", "法国"), ("红牌", "巴西"), ("黄牌", "巴西")]},
]
# 统计各队的得牌情况
team_cards = {}
for match in matches_data:
for card_type, team in match["cards"]:
if team not in team_cards:
team_cards[team] = {"黄牌": 0, "红牌": 0}
team_cards[team][card_type] += 1
# 计算得分(红牌计2分,黄牌计1分)
team_scores = {}
for team, cards in team_cards.items():
team_scores[team] = cards["黄牌"] * 1 + cards["红牌"] * 2
return team_cards, team_scores
def print_results_basic(team_cards, team_scores):
"""打印基础统计结果"""
print("=" * 50)
print("各队红黄牌统计:")
print("-" * 50)
# 按得分排序
sorted_teams = sorted(team_scores.items(), key=lambda x: x[1], reverse=True)
for team, score in sorted_teams:
cards = team_cards[team]
print(f"{team}: 黄牌 {cards['黄牌']} 张, 红牌 {cards['红牌']} 张, 总得分 {score}")
# 找出得分最高的队
winner = sorted_teams[0]
print("-" * 50)
print(f"🏆 得牌最多的球队: {winner[0]} (得分: {winner[1]})")
# 找出谁红牌最多
max_red = max(team_cards.items(), key=lambda x: x[1]["红牌"])
print(f"🔴 红牌最多的球队: {max_red[0]} ({max_red[1]['红牌']} 张红牌)")
面向对象版本(更专业)
from collections import defaultdict
class FootballAnalyzer:
"""足球比赛统计分析器"""
def __init__(self):
self.teams = defaultdict(lambda: {"yellow_cards": 0, "red_cards": 0})
def add_match_cards(self, home_team, away_team, cards):
"""
添加比赛的得牌数据
cards: [(card_type, team), ...]
card_type: "yellow" 或 "red"
"""
for card_type, team in cards:
if team in [home_team, away_team]:
if card_type == "yellow":
self.teams[team]["yellow_cards"] += 1
elif card_type == "red":
self.teams[team]["red_cards"] += 1
def get_team_statistics(self):
"""获取所有球队的统计数据"""
statistics = {}
for team, data in self.teams.items():
# 红牌2分,黄牌1分,红牌通常更严重
score = data["yellow_cards"] * 1 + data["red_cards"] * 2
statistics[team] = {
"yellow_cards": data["yellow_cards"],
"red_cards": data["red_cards"],
"total_cards": data["yellow_cards"] + data["red_cards"],
"score": score
}
return statistics
def find_worst_team(self):
"""找出得牌最严重的球队"""
stats = self.get_team_statistics()
if not stats:
return None
# 综合得分最高的球队(需要考虑红牌的双倍价值)
worst_team = max(stats.items(), key=lambda x: x[1]["score"])
return worst_team
def find_most_red_cards_team(self):
"""找出红牌最多的球队(纪律性最差)"""
stats = self.get_team_statistics()
if not stats:
return None
# 红牌最多的球队(如果相同则比黄牌)
worst_team = max(stats.items(),
key=lambda x: (x[1]["red_cards"], x[1]["yellow_cards"]))
return worst_team
def run_oop_version():
"""运行面向对象版本的统计"""
analyzer = FootballAnalyzer()
# 添加多场比赛数据
analyzer.add_match_cards("巴西", "阿根廷", [
("yellow", "巴西"), ("yellow", "阿根廷"),
("red", "巴西"), ("yellow", "巴西")
])
analyzer.add_match_cards("法国", "德国", [
("yellow", "法国"), ("yellow", "德国"), ("yellow", "德国")
])
analyzer.add_match_cards("巴西", "法国", [
("yellow", "法国"), ("red", "巴西"), ("yellow", "巴西")
])
analyzer.add_match_cards("阿根廷", "德国", [
("red", "阿根廷"), ("yellow", "德国")
])
# 输出统计结果
print("=" * 60)
print("🏆 足球比赛纪律性分析")
print("=" * 60)
stats = analyzer.get_team_statistics()
for team, data in sorted(stats.items(), key=lambda x: x[1]["score"], reverse=True):
print(f"\n📊 {team}:")
print(f" 黄牌: {data['yellow_cards']} 张")
print(f" 红牌: {data['red_cards']} 张")
print(f" 总牌数: {data['total_cards']} 张")
print(f" 纪律得分: {data['score']}")
# 找出纪律最差球队
worst_team = analyzer.find_worst_team()
if worst_team:
print(f"\n⚠️ 综合纪律最差: {worst_team[0]}")
# 找出红牌最多球队
most_red = analyzer.find_most_red_cards_team()
if most_red:
print(f"🔴 红牌最多球队: {most_red[0]}")
带可视化的版本
import pandas as pd
import matplotlib.pyplot as plt
def visualize_card_statistics():
"""带数据可视化的统计版本"""
# 测试数据
data = {
'Team': ['巴西', '阿根廷', '法国', '德国', '意大利'],
'Yellow_Cards': [5, 3, 4, 2, 6],
'Red_Cards': [2, 1, 0, 1, 3]
}
df = pd.DataFrame(data)
# 计算综合得分
df['Total_Score'] = df['Yellow_Cards'] * 1 + df['Red_Cards'] * 2
print("=" * 50)
print("🎯 球队纪律性分析数据")
print("=" * 50)
print(df)
# 创建可视化图表
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 左图:各种牌的数量
x = range(len(df['Team']))
width = 0.35
axes[0].bar([i - width/2 for i in x], df['Yellow_Cards'],
width, label='黄牌', color='yellow')
axes[0].bar([i + width/2 for i in x], df['Red_Cards'],
width, label='红牌', color='red')
axes[0].set_xlabel('球队')
axes[0].set_ylabel('数量')
axes[0].set_title('各队红黄牌对比')
axes[0].set_xticks(x)
axes[0].set_xticklabels(df['Team'])
axes[0].legend()
# 右图:综合得分
axes[1].bar(df['Team'], df['Total_Score'], color=['red' if score == max(df['Total_Score']) else 'gray'
for score in df['Total_Score']])
axes[1].set_xlabel('球队')
axes[1].set_ylabel('综合得分')
axes[1].set_title('纪律综合得分(红牌2分,黄牌1分)')
# 找出纪律最差的队
worst_team = df.loc[df['Total_Score'].idxmax()]
print(f"\n🏆 纪律最差的球队: {worst_team['Team']}")
print(f" 综合得分: {worst_team['Total_Score']}")
plt.tight_layout()
plt.show()
return df
# 运行示例
if __name__ == "__main__":
print("=== 方案一:基础统计 ===")
team_cards, team_scores = count_cards_basic()
print_results_basic(team_cards, team_scores)
print("\n=== 方案二:面向对象统计 ===")
run_oop_version()
print("\n=== 方案三:可视化展示 ===")
# 运行可视化版本(需要安装 matplotlib)
try:
visualize_card_statistics()
except ImportError:
print("请安装 matplotlib 和 pandas 来运行可视化版本")
运行结果示例
=== 方案一:基础统计 ===
==================================================
各队红黄牌统计:
--------------------------------------------------
巴西: 黄牌 2 张, 红牌 3 张, 总得分 8
阿根廷: 黄牌 1 张, 红牌 1 张, 总得分 3
法国: 黄牌 2 张, 红牌 0 张, 总得分 2
德国: 黄牌 0 张, 红牌 0 张, 总得分 0
--------------------------------------------------
🏆 得牌最多的球队: 巴西 (得分: 8)
🔴 红牌最多的球队: 巴西 (3 张红牌)
这道题的关键点是:
- 红牌计分更高:通常红牌违规更严重,应该比黄牌分数高
- 可以多维度比较:黄牌多、红牌多、综合得分三个指标
- 支持多场比赛数据:实际中需要统计整个联赛或赛季的数据
您可以根据实际需求选择适合的版本,或者组合使用这些功能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播