我来为您编写一个统计红黄牌数量的Python案例,这个程序可以帮助统计不同球队的红黄牌情况。

class FootballMatch:
def __init__(self):
# 初始化各球队的红黄牌统计
self.teams = {}
def add_player_card(self, team_name, card_type):
"""
添加球员的牌
:param team_name: 球队名称
:param card_type: 'yellow' 或 'red'
"""
if team_name not in self.teams:
self.teams[team_name] = {'yellow': 0, 'red': 0, 'players': {}}
self.teams[team_name][card_type] += 1
def add_player_specific_card(self, team_name, player_name, card_type):
"""
添加具体球员的牌
:param team_name: 球队名称
:param player_name: 球员姓名
:param card_type: 'yellow' 或 'red'
"""
if team_name not in self.teams:
self.teams[team_name] = {'yellow': 0, 'red': 0, 'players': {}}
if player_name not in self.teams[team_name]['players']:
self.teams[team_name]['players'][player_name] = {'yellow': 0, 'red': 0}
self.teams[team_name][card_type] += 1
self.teams[team_name]['players'][player_name][card_type] += 1
def get_team_statistics(self, team_name):
"""获取特定球队的统计数据"""
if team_name in self.teams:
return self.teams[team_name]
return None
def compare_teams(self):
"""比较所有球队的红黄牌总数"""
print("\n=== 各球队红黄牌统计 ===")
print(f"{'球队':<15} {'黄牌':<8} {'红牌':<8} {'总牌数':<8}")
print("-" * 45)
team_stats = []
for team, stats in self.teams.items():
total_cards = stats['yellow'] + stats['red']
team_stats.append((team, stats['yellow'], stats['red'], total_cards))
# 按总牌数排序
team_stats.sort(key=lambda x: x[3], reverse=True)
for team, yellow, red, total in team_stats:
print(f"{team:<15} {yellow:<8} {red:<8} {total:<8}")
# 找出最多牌的球队
max_total = team_stats[0][3] if team_stats else 0
max_teams = [team for team, y, r, t in team_stats if t == max_total]
print("\n=== 红黄牌最多球队 ===")
for team in max_teams:
print(f"🏆 {team} - 总牌数: {max_total}张")
def print_player_statistics(self, team_name=None):
"""打印球员级别的统计数据"""
teams_to_show = [team_name] if team_name else list(self.teams.keys())
for team in teams_to_show:
if team in self.teams:
print(f"\n=== {team} 球员统计 ===")
print(f"{'球员':<15} {'黄牌':<8} {'红牌':<8} {'总牌数':<8}")
print("-" * 45)
players = sorted(self.teams[team]['players'].items(),
key=lambda x: x[1]['yellow'] + x[1]['red'],
reverse=True)
for player, cards in players:
total = cards['yellow'] + cards['red']
print(f"{player:<15} {cards['yellow']:<8} {cards['red']:<8} {total:<8}")
# 示例使用
def main():
# 创建比赛统计实例
match = FootballMatch()
# 模拟添加比赛数据
print("🏟️ 正在录入比赛数据...\n")
# 添加具体球员的牌
match.add_player_specific_card("西班牙", "罗德里", "yellow")
match.add_player_specific_card("西班牙", "加维", "yellow")
match.add_player_specific_card("西班牙", "拉波尔特", "red")
match.add_player_specific_card("法国", "登贝莱", "yellow")
match.add_player_specific_card("法国", "姆巴佩", "yellow")
match.add_player_specific_card("法国", "特奥", "red")
match.add_player_specific_card("法国", "琼阿梅尼", "yellow")
match.add_player_specific_card("德国", "基米希", "yellow")
match.add_player_specific_card("德国", "吕迪格", "yellow")
match.add_player_specific_card("德国", "穆西亚拉", "yellow")
match.add_player_specific_card("德国", "诺伊尔", "yellow")
match.add_player_specific_card("英格兰", "贝林厄姆", "yellow")
match.add_player_specific_card("英格兰", "凯恩", "red")
match.add_player_specific_card("英格兰", "赖斯", "yellow")
# 显示所有球队的统计
match.compare_teams()
# 显示具体某支球队的球员统计
match.print_player_statistics("西班牙")
match.print_player_statistics("法国")
# 也可以添加一些补充说明
print("\n📊 统计说明:")
print("- 黄牌:警告")
print("- 红牌:罚出场")
print("- 根据统计,总牌数最多的球队在比赛中表现更为激进")
if __name__ == "__main__":
main()
代码特点:
- 数据结构:使用字典存储球队和球员的牌数统计
- 功能完整:支持球队级别和球员级别的统计
- 排序功能:自动按总牌数排序,找出最多的球队
- 可扩展性:可以轻松添加更多球员和球队数据
输出示例:
=== 各球队红黄牌统计 ===
球队 黄牌 红牌 总牌数
-------------------------------------------------
德国 4 0 4
法国 3 1 4
英格兰 2 1 3
西班牙 2 1 3
=== 红黄牌最多球队 ===
🏆 德国 - 总牌数: 4张
🏆 法国 - 总牌数: 4张
这个程序可以根据实际需要修改,比如添加比赛轮次、日期等更多维度的统计功能。