python案例统计失误次数哪队更少?

wen python案例 2

本文目录导读:

python案例统计失误次数哪队更少?

  1. 方法一:基础版(字典存储)
  2. 方法二:进阶版(包含多场比赛数据)
  3. 方法三:面向对象版本
  4. 方法四:带可视化(简单图表)

我来帮你写一个Python案例来统计哪支队伍的失误次数更少,这里提供几种不同的实现方式:

基础版(字典存储)

def compare_mistakes(teams_data):
    """
    比较各队的失误次数
    teams_data: 字典,格式为 {球队名: 失误次数}
    """
    if not teams_data:
        return "没有数据"
    # 找出失误最少的球队
    min_mistakes = min(teams_data.values())
    best_teams = [team for team, mistakes in teams_data.items() 
                  if mistakes == min_mistakes]
    print("各队失误情况:")
    for team, mistakes in sorted(teams_data.items(), key=lambda x: x[1]):
        print(f"{team}: {mistakes}次")
    print(f"\n失误最少的球队: {'、'.join(best_teams)} ({min_mistakes}次)")
    return best_teams
# 示例使用
teams = {
    "火箭队": 15,
    "勇士队": 8,
    "湖人队": 12,
    "凯尔特人队": 15,
    "公牛队": 5
}
compare_mistakes(teams)

进阶版(包含多场比赛数据)

def compare_multi_game_mistakes(game_data):
    """
    统计多场比赛的失误总量
    game_data: 字典,格式为 {球队名: [每场失误列表]}
    """
    # 计算每队总失误
    total_mistakes = {}
    for team, mistakes_list in game_data.items():
        total = sum(mistakes_list)
        avg = total / len(mistakes_list)
        total_mistakes[team] = {
            'total': total,
            'avg': avg,
            'games': len(mistakes_list)
        }
    # 按总失误排序
    sorted_teams = sorted(total_mistakes.items(), key=lambda x: x[1]['total'])
    print("球队失误统计:")
    print("-" * 40)
    print(f"{'球队':<10} {'总失误':<8} {'场均':<8} {'场次'}")
    print("-" * 40)
    for team, stats in sorted_teams:
        print(f"{team:<10} {stats['total']:<8} {stats['avg']:.2f}     {stats['games']}")
    # 找出最少失误的球队
    min_team = sorted_teams[0][0]
    min_mistakes = sorted_teams[0][1]['total']
    print(f"\n🏆 失误最少的球队: {min_team} (总失误: {min_mistakes}次)")
    return min_team
# 示例数据:某赛季各队前5场比赛的失误
game_data = {
    "勇士队": [8, 12, 7, 9, 10],
    "湖人队": [15, 11, 13, 8, 12],
    "火箭队": [20, 18, 16, 19, 17],
    "凯尔特人队": [14, 12, 15, 13, 11],
}
compare_multi_game_mistakes(game_data)

面向对象版本

class Team:
    def __init__(self, name):
        self.name = name
        self.mistakes = []
    def add_game_mistakes(self, mistakes):
        self.mistakes.append(mistakes)
    def total_mistakes(self):
        return sum(self.mistakes)
    def avg_mistakes(self):
        if not self.mistakes:
            return 0
        return self.total_mistakes() / len(self.mistakes)
    def __str__(self):
        return f"{self.name} (总失误: {self.total_mistakes()}, 场均: {self.avg_mistakes():.2f})"
class MistakeStatistician:
    def __init__(self):
        self.teams = {}
    def add_team(self, team_name, mistakes_list):
        if team_name not in self.teams:
            self.teams[team_name] = Team(team_name)
        for mistakes in mistakes_list:
            self.teams[team_name].add_game_mistakes(mistakes)
    def find_best_team(self):
        if not self.teams:
            return None
        best_team = min(self.teams.values(), key=lambda t: t.total_mistakes())
        return best_team
    def display_comparison(self):
        print("🏀 球队失误对比表")
        print("=" * 40)
        sorted_teams = sorted(self.teams.values(), key=lambda t: t.total_mistakes())
        for team in sorted_teams:
            print(f"• {team}")
        best = self.find_best_team()
        print(f"\n✅ 失误最少的队伍: {best.name}")
        print(f"  总失误: {best.total_mistakes()}次 | 场均: {best.avg_mistakes():.2f}次")
# 使用示例
stat = MistakeStatistician()
# 添加各队数据
stat.add_team("勇士", [8, 12, 7, 9])
stat.add_team("湖人", [15, 11, 13, 8])
stat.add_team("火箭", [20, 18, 16, 19])
stat.add_team("热火", [10, 12, 8, 11])
stat.display_comparison()

带可视化(简单图表)

import matplotlib.pyplot as plt
def visualize_mistakes(teams_data):
    """
    可视化比较各队失误
    """
    teams = list(teams_data.keys())
    mistakes = list(teams_data.values())
    plt.figure(figsize=(10, 6))
    bars = plt.bar(teams, mistakes, color=['#FF6B6B' if m != min(mistakes) else '#4ECDC4' 
                   for m in mistakes])
    # 添加数字标签
    for bar, mistake in zip(bars, mistakes):
        plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.5, 
                str(mistake), ha='center', va='bottom')
    plt.title('各队失误次数对比', fontsize=16)
    plt.xlabel('球队', fontsize=12)
    plt.ylabel('失误次数', fontsize=12)
    plt.ylim(0, max(mistakes) * 1.2)
    # 用颜色标注最少失误的球队
    least_labels = []
    min_value = min(mistakes)
    for i, (team, value) in enumerate(zip(teams, mistakes)):
        if value == min_value:
            least_labels.append(team)
    if least_labels:
        plt.text(0.02, 0.98, f'🏆 最佳: {", ".join(least_labels)} ({min_value}次)', 
                transform=plt.gca().transAxes, fontsize=12, 
                bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
    plt.grid(axis='y', alpha=0.3)
    plt.tight_layout()
    plt.show()
# 使用示例
teams_data = {
    "勇士队": 8,
    "湖人队": 12,
    "火箭队": 15,
    "热火队": 5,
    "凯尔特人队": 10
}
compare_mistakes(teams_data)
# visualize_mistakes(teams_data)  # 取消注释可查看图表

这些代码提供了不同的解决方案:

  1. 基础版:简单直接,适合快速比较
  2. 进阶版:包含多场比赛的数据统计
  3. 面向对象版:更规范的代码结构,便于扩展
  4. 可视化版:图形化展示结果

运行这些代码时会发现,它会自动找出失误最少的球队,并显示详细的比较信息,你可以根据自己的需求选择合适的版本使用。

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