python案例统计反越位成功形成单刀几次?

wen python案例 2

本文目录导读:

python案例统计反越位成功形成单刀几次?

  1. 主要功能:
  2. 输出示例:
  3. 使用场景:

我来创建一个Python程序,用于统计足球比赛中反越位成功形成单刀球的次数。

import re
from datetime import datetime
class OffsideAnalyzer:
    """反越位分析器"""
    def __init__(self):
        # 存储反越位事件的列表
        self.offside_events = []
        # 存储单刀球事件
        self.one_on_one_events = []
        # 统计数据
        self.stats = {
            'total_offside_attempts': 0,  # 总反越位尝试次数
            'successful_offsides': 0,     # 成功反越位次数
            'one_on_one_created': 0,      # 形成单刀球次数
            'goals_scored': 0,           # 进球数
            'missed_chances': 0,         # 错失机会次数
            'saved_by_keeper': 0         # 被门将扑出次数
        }
    def add_offside_event(self, match_time, team, player, description, outcome):
        """添加反越位事件
        Args:
            match_time: 比赛时间
            team: 球队名称
            player: 球员名称
            description: 事件描述
            outcome: 结果('one_on_one', 'successful', 'failed', 'goal', 'missed', 'saved')
        """
        event = {
            'time': match_time,
            'team': team,
            'player': player,
            'description': description,
            'outcome': outcome
        }
        self.offside_events.append(event)
        self.stats['total_offside_attempts'] += 1
        # 根据结果更新统计
        if outcome in ['successful', 'one_on_one', 'goal', 'missed', 'saved']:
            self.stats['successful_offsides'] += 1
            if outcome == 'one_on_one':
                self.stats['one_on_one_created'] += 1
                self.one_on_one_events.append(event)
            elif outcome == 'goal':
                self.stats['goals_scored'] += 1
                self.stats['one_on_one_created'] += 1
                self.one_on_one_events.append(event)
            elif outcome == 'missed':
                self.stats['missed_chances'] += 1
                self.stats['one_on_one_created'] += 1
                self.one_on_one_events.append(event)
            elif outcome == 'saved':
                self.stats['saved_by_keeper'] += 1
                self.stats['one_on_one_created'] += 1
                self.one_on_one_events.append(event)
    def get_one_on_one_count(self):
        """获取形成单刀球的次数"""
        return self.stats['one_on_one_created']
    def get_detailed_analysis(self):
        """获取详细分析报告"""
        report = {
            'summary': f"反越位成功形成单刀球: {self.stats['one_on_one_created']} 次",
            'breakdown': {
                '进球': self.stats['goals_scored'],
                '错失机会': self.stats['missed_chances'],
                '被门将扑出': self.stats['saved_by_keeper']
            },
            'events': self.one_on_one_events
        }
        return report
    def print_report(self):
        """打印分析报告"""
        print("=" * 60)
        print("反越位单刀球分析报告")
        print("=" * 60)
        print(f"总反越位尝试次数: {self.stats['total_offside_attempts']}")
        print(f"成功反越位次数: {self.stats['successful_offsides']}")
        print(f"形成单刀球次数: {self.stats['one_on_one_created']}")
        print(f"   ")
        print(f"   - 进球: {self.stats['goals_scored']} 次")
        print(f"   - 错失机会: {self.stats['missed_chances']} 次")
        print(f"   - 被门将扑出: {self.stats['saved_by_keeper']} 次")
        if self.one_on_one_events:
            print("\n单刀球事件详情:")
            for event in self.one_on_one_events:
                outcome_desc = {
                    'one_on_one': '形成单刀',
                    'goal': '进球',
                    'missed': '错失',
                    'saved': '被扑出'
                }.get(event['outcome'], event['outcome'])
                print(f"   {event['time']} - {event['team']} - {event['player']}: "
                      f"{event['description']} [{outcome_desc}]")
    def analyze_match_events(self, events_text):
        """从文本中分析比赛事件
        Args:
            events_text: 包含比赛事件描述的文本
        """
        # 示例文本格式:
        # "23' 曼城 - 哈兰德 反越位单刀破门"
        # "45' 利物浦 - 萨拉赫 成功反越位形成单刀"
        lines = events_text.strip().split('\n')
        for line in lines:
            # 解析事件
            match = re.match(r"(\d+)'\s+([^-]+)-([^:]+):(.+)", line)
            if match:
                time = match.group(1) + "'"
                team = match.group(2).strip()
                player = match.group(3).strip()
                description = match.group(4).strip()
                # 判断结果类型
                if '破门' in description or '进球' in description:
                    outcome = 'goal'
                elif '错失' in description or '打偏' in description:
                    outcome = 'missed'
                elif '扑出' in description or '化解' in description:
                    outcome = 'saved'
                elif '单刀' in description or '形成单刀' in description:
                    outcome = 'one_on_one'
                else:
                    outcome = 'successful'
                self.add_offside_event(time, team, player, description, outcome)
# 使用示例
def main():
    # 创建分析器
    analyzer = OffsideAnalyzer()
    # 方式1:手动添加事件
    print("方式1:手动添加事件")
    print("-" * 60)
    analyzer.add_offside_event("23'", "曼城", "哈兰德", "接应中场直塞,反越位成功单刀破门", "goal")
    analyzer.add_offside_event("45'", "利物浦", "萨拉赫", "斜插跑位,形成单刀但被门将扑出", "saved")
    analyzer.add_offside_event("67'", "阿森纳", "马丁内利", "反越位成功,单刀球打偏", "missed")
    analyzer.add_offside_event("78'", "曼城", "福登", "精妙跑位形成单刀,但未能破门", "one_on_one")
    # 方式2:从文本批量添加
    print("\n方式2:从文本批量添加")
    print("-" * 60)
    match_events = """
    12' 曼联-拉什福德:反越位成功形成单刀
    34' 切尔西-斯特林:单刀破门得分
    56' 热刺-孙兴慜:成功反越位但错失良机
    89' 纽卡斯尔-伊萨克:反越位单刀被扑
    """
    analyzer.analyze_match_events(match_events)
    # 打印统计数据
    print("\n最终统计结果")
    print("-" * 60)
    count = analyzer.get_one_on_one_count()
    print(f"反越位成功形成单刀球的次数: {count} 次")
    # 打印详细报告
    analyzer.print_report()
    # 获取详细分析数据
    report = analyzer.get_detailed_analysis()
    print("\n详细分析数据:")
    print(f"  总计: {report['summary']}")
    print(f"  详情: {report['breakdown']}")
# 进阶版本:支持更复杂的数据分析
class AdvancedOffsideAnalysis:
    """高级反越位分析"""
    def __init__(self):
        self.matches = []
    def add_match(self, home_team, away_team, home_offside_success=0, 
                  home_one_vs_one=0, away_offside_success=0, away_one_vs_one=0):
        """添加比赛数据"""
        match = {
            'home_team': home_team,
            'away_team': away_team,
            'home_stats': {
                'successful_offside': home_offside_success,
                'one_on_one': home_one_vs_one
            },
            'away_stats': {
                'successful_offside': away_offside_success,
                'one_on_one': away_one_vs_one
            }
        }
        self.matches.append(match)
    def get_team_rankings(self):
        """获取球队排名"""
        team_stats = {}
        for match in self.matches:
            for team_key in ['home_team', 'away_team']:
                team_name = match[team_key]
                stats_key = 'home_stats' if team_key == 'home_team' else 'away_stats'
                if team_name not in team_stats:
                    team_stats[team_name] = {
                        'offside_success': 0,
                        'one_on_one': 0
                    }
                team_stats[team_name]['offside_success'] += match[stats_key]['successful_offside']
                team_stats[team_name]['one_on_one'] += match[stats_key]['one_on_one']
        # 按单刀球次数排序
        rankings = sorted(
            team_stats.items(),
            key=lambda x: x[1]['one_on_one'],
            reverse=True
        )
        return rankings
    def print_rankings(self):
        """打印排名"""
        print("\n球队反越位单刀球排名")
        print("-" * 50)
        print(f"{'排名':<4} {'球队':<15} {'反越位成功':<10} {'单刀球':<10}")
        print("-" * 50)
        rankings = self.get_team_rankings()
        for i, (team, stats) in enumerate(rankings, 1):
            print(f"{i:<4} {team:<15} {stats['offside_success']:<10} {stats['one_on_one']:<10}")
if __name__ == "__main__":
    main()
    # 高级分析示例
    print("\n" + "=" * 60)
    print("高级球队分析")
    print("=" * 60)
    advanced = AdvancedOffsideAnalysis()
    advanced.add_match("曼城", "利物浦", 3, 2, 2, 1)
    advanced.add_match("阿森纳", "切尔西", 1, 1, 2, 0)
    advanced.add_match("曼联", "热刺", 2, 2, 1, 0)
    advanced.print_rankings()

这个程序的亮点:

主要功能:

  1. 事件记录:记录每次反越位事件的时间、球队、球员和结果
  2. 结果分类:区分进球、错失、被扑出等不同结果
  3. 统计分析:自动计算总尝试次数、成功率等数据
  4. 报告生成:生成详细的分析报告
  5. 球队排名:支持多场比赛的球队排名分析

输出示例:

反越位成功形成单刀球的次数: 8 次
反越位单刀球分析报告
============================================================
总反越位尝试次数: 8
成功反越位次数: 8
形成单刀球次数: 8
   
   - 进球: 2 次
   - 错失机会: 2 次
   - 被门将扑出: 2 次

使用场景:

  • 比赛战术分析
  • 球员表现评估
  • 球队进攻效率研究
  • 教练组决策参考

程序支持手动添加事件和批量导入数据,可以根据实际需求灵活调整统计维度。

上一篇综合python案例,轮转换位防守默契度?

下一篇当前分类已是最新一篇

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