python案例统计任意球直接得分几次?

wen python案例 4

本文目录导读:

python案例统计任意球直接得分几次?

  1. 方案1:简单的数据统计
  2. 方案2:使用Pandas进行统计(更强大)
  3. 方案3:面向对象方式
  4. 方案4:带文件读取的完整示例
  5. 使用建议

我来帮你创建一个统计任意球直接得分的Python案例,这里提供几种不同的实现方式:

方案1:简单的数据统计

def count_direct_free_kick_goals(records):
    """
    统计任意球直接得分的次数
    参数:
    records: 包含进球记录的列表,每条记录是一个字典
    返回:
    直接任意球得分的次数
    """
    count = 0
    for record in records:
        if record['得分方式'] == '任意球直接得分':
            count += 1
    return count
# 示例数据
match_records = [
    {'球员': '梅西', '得分方式': '任意球直接得分', '分钟': 23},
    {'球员': 'C罗', '得分方式': '点球', '分钟': 45},
    {'球员': '贝克汉姆', '得分方式': '任意球直接得分', '分钟': 67},
    {'球员': '内马尔', '得分方式': '运动战进球', '分钟': 78},
    {'球员': '皮尔洛', '得分方式': '任意球直接得分', '分钟': 89},
    {'球员': '姆巴佩', '得分方式': '运动战进球', '分钟': 90},
]
result = count_direct_free_kick_goals(match_records)
print(f"任意球直接得分的次数: {result}")

方案2:使用Pandas进行统计(更强大)

import pandas as pd
def analyze_free_kicks_with_pandas():
    # 创建包含多场比赛的数据
    data = {
        '比赛编号': ['A001', 'A001', 'A002', 'A002', 'A003', 'A003', 'A004'],
        '球员': ['梅西', 'C罗', '贝克汉姆', '内马尔', '皮尔洛', '姆巴佩', '哈兰德'],
        '进球方式': ['任意球直接', '点球', '任意球直接', '运动战', '任意球直接', '运动战', '头球'],
        '比分影响': ['1-0', '2-0', '1-1', '2-1', '0-1', '1-1', '2-0']
    }
    df = pd.DataFrame(data)
    # 统计任意球直接得分
    free_kick_goals = df[df['进球方式'] == '任意球直接']
    print("=== 任意球直接得分统计 ===")
    print(f"总次数: {len(free_kick_goals)}")
    print("\n详细记录:")
    print(free_kick_goals)
    # 按球员统计
    player_stats = df[df['进球方式'] == '任意球直接'].groupby('球员').size().reset_index(name='次数')
    print("\n按球员统计:")
    print(player_stats)
    return len(free_kick_goals)
# 运行分析
total = analyze_free_kicks_with_pandas()
print(f"\n总的直接任意球进球数: {total}")

方案3:面向对象方式

class FootballMatchAnalyzer:
    def __init__(self):
        self.goals = []
    def add_goal(self, player, goal_type, minute, team):
        """添加进球记录"""
        self.goals.append({
            'player': player,
            'goal_type': goal_type,
            'minute': minute,
            'team': team
        })
    def count_direct_free_kicks(self, team=None):
        """
        统计直接任意球得分次数
        可以指定球队
        """
        count = 0
        for goal in self.goals:
            if goal['goal_type'] == 'free_kick_direct':
                if team is None or goal['team'] == team:
                    count += 1
        return count
    def get_free_kick_details(self):
        """获取所有直接任意球得分的详细情况"""
        free_kicks = [g for g in self.goals if g['goal_type'] == 'free_kick_direct']
        return free_kicks
# 使用示例
analyzer = FootballMatchAnalyzer()
# 添加比赛数据
analyzer.add_goal('Mess', 'free_kick_direct', 23, 'Barcelona')
analyzer.add_goal('Ronaldo', 'penalty', 45, 'Real Madrid')
analyzer.add_goal('Beckham', 'free_kick_direct', 67, 'Manchester United')
analyzer.add_goal('Neymar', 'open_play', 78, 'PSG')
analyzer.add_goal('Pirlo', 'free_kick_direct', 89, 'Juventus')
# 统计
total_free_kicks = analyzer.count_direct_free_kicks()
print(f"所有球队的任意球直接得分: {total_free_kicks}")
# 按球队统计
barcelona_free_kicks = analyzer.count_direct_free_kicks('Barcelona')
print(f"巴塞罗那的任意球直接得分: {barcelona_free_kicks}")
# 查看详情
print("\n任意球得分详情:")
for fk in analyzer.get_free_kick_details():
    print(f"球员: {fk['player']}, 分钟: {fk['minute']}, 球队: {fk['team']}")

方案4:带文件读取的完整示例

import csv
from collections import Counter
def analyze_from_csv(file_path):
    """
    从CSV文件读取数据并统计
    """
    try:
        # 模拟CSV数据
        sample_data = [
            ['球员', '球队', '进球方式', '比赛日期'],
            ['梅西', '巴萨', '任意球直接', '2023-01-15'],
            ['C罗', '皇马', '点球', '2023-01-15'],
            ['贝克汉姆', '曼联', '任意球直接', '2023-01-22'],
            ['内马尔', '巴黎', '运动战', '2023-01-22'],
            ['皮尔洛', '尤文', '任意球直接', '2023-02-01']
        ]
        # 写入临时文件
        with open(file_path, 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerows(sample_data)
        # 读取并统计
        free_kick_count = 0
        all_goal_types = []
        with open(file_path, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            for row in reader:
                all_goal_types.append(row['进球方式'])
                if row['进球方式'] == '任意球直接':
                    free_kick_count += 1
        # 统计所有进球方式
        type_counter = Counter(all_goal_types)
        print("=== 统计分析结果 ===")
        print(f"任意球直接得分: {free_kick_count}次")
        print("\n所有进球方式统计:")
        for goal_type, count in type_counter.items():
            print(f"  {goal_type}: {count}次")
        return free_kick_count
    except Exception as e:
        print(f"处理文件时出错: {e}")
        return 0
# 运行分析
result = analyze_from_csv('match_data.csv')
print(f"\n最终直接任意球得分总数: {result}")

使用建议

  1. 简单场景:使用方案1,直接列表操作
  2. 数据分析:使用方案2,Pandas功能更强大
  3. 复杂项目:使用方案3,面向对象设计更清晰
  4. 真实数据:使用方案4,结合文件读取

这些示例都包含了:

  • 数据定义和输入
  • 统计逻辑
  • 结果输出
  • 可扩展性

你可以根据实际需求选择合适的方案,或者组合使用,需要我详细解释某个特定部分吗?

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