python案例统计红黄牌数量哪队更多?

wen python案例 4

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

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()

代码特点:

  1. 数据结构:使用字典存储球队和球员的牌数统计
  2. 功能完整:支持球队级别和球员级别的统计
  3. 排序功能:自动按总牌数排序,找出最多的球队
  4. 可扩展性:可以轻松添加更多球员和球队数据

输出示例:

=== 各球队红黄牌统计 ===
球队              黄牌     红牌     总牌数   
-------------------------------------------------
德国              4        0        4       
法国              3        1        4       
英格兰            2        1        3       
西班牙            2        1        3       
=== 红黄牌最多球队 ===
🏆 德国 - 总牌数: 4张
🏆 法国 - 总牌数: 4张

这个程序可以根据实际需要修改,比如添加比赛轮次、日期等更多维度的统计功能。

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