python案例统计角球数哪边领先?

wen python案例 5

本文目录导读:

python案例统计角球数哪边领先?

  1. 核心功能:
  2. 特色功能:
  3. 使用方法:

我来为您提供一个统计角球数领先情况的Python案例,这个程序可以跟踪比赛双方的角球数,并判断哪一方领先。

import csv
from datetime import datetime
from collections import defaultdict
class CornerKickTracker:
    def __init__(self, home_team, away_team):
        """
        初始化角球追踪器
        参数:
        home_team: 主队名称
        away_team: 客队名称
        """
        self.home_team = home_team
        self.away_team = away_team
        self.home_corners = 0
        self.away_corners = 0
        self.timeline = []  # 记录角球事件时间线
        self.corner_history = []  # 记录所有角球事件的详细历史
    def register_corner(self, team, minute, additional_time=0):
        """
        登记一次角球
        参数:
        team: 获得角球的队伍 ('home' 或 'away')
        minute: 比赛时间(分钟)
        additional_time: 补时(秒)
        """
        if team not in ['home', 'away']:
            raise ValueError("Team must be 'home' or 'away'")
        # 更新角球计数
        if team == 'home':
            self.home_corners += 1
            current_count = self.home_corners
        else:
            self.away_corners += 1
            current_count = self.away_corners
        # 记录事件
        event = {
            'team': team,
            'team_name': self.home_team if team == 'home' else self.away_team,
            'minute': minute,
            'additional_time': additional_time,
            'corner_number': current_count,
            'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            'home_total': self.home_corners,
            'away_total': self.away_corners
        }
        self.timeline.append(event)
        self.corner_history.append(event)
        return event
    def get_leading_team(self):
        """
        获取领先的队伍
        返回:
        (领先队伍名称, 领先数量) 或 None
        """
        if self.home_corners > self.away_corners:
            return (self.home_team, self.home_corners - self.away_corners)
        elif self.away_corners > self.home_corners:
            return (self.away_team, self.away_corners - self.home_corners)
        else:
            return None
    def get_score_text(self):
        """获取比分文本"""
        return f"{self.home_team}:{self.home_corners} - {self.away_corners}:{self.away_team}"
    def print_status(self):
        """打印当前状态"""
        print(f"\n{'='*50}")
        print(f"比赛状态:")
        print(f"{self.home_team}:{self.home_corners} - {self.away_corners}:{self.away_team}")
        leader = self.get_leading_team()
        if leader:
            print(f"🔴 当前领先:{leader[0]}(领先 {leader[1]} 个角球)")
        else:
            print("⚖️ 双方角球数持平")
        print("="*50)
    def print_timeline(self):
        """打印角球时间线"""
        if not self.timeline:
            print("暂无角球事件")
            return
        print(f"\n📋 角球时间线:")
        for event in self.timeline:
            team_icon = "🏠" if event['team'] == 'home' else "🚗"
            time_str = f"{event['minute']}'"
            if event['additional_time']:
                time_str += f"+{event['additional_time']}"
            print(f"{team_icon} {event['team_name']} - 第{time_str}分钟 - 第{event['corner_number']}个角球")
    def save_to_file(self, filename):
        """保存数据到CSV文件"""
        try:
            with open(filename, 'w', newline='', encoding='utf-8') as file:
                writer = csv.DictWriter(file, fieldnames=[
                    'team', 'team_name', 'minute', 'additional_time', 
                    'corner_number', 'timestamp', 'home_total', 'away_total'
                ])
                writer.writeheader()
                writer.writerows(self.timeline)
            print(f"数据已保存到 {filename}")
        except Exception as e:
            print(f"保存文件时出错:{e}")
    def load_from_file(self, filename):
        """从CSV文件加载数据"""
        try:
            with open(filename, 'r', encoding='utf-8') as file:
                reader = csv.DictReader(file)
                for row in reader:
                    event = {
                        'team': row['team'],
                        'team_name': row['team_name'],
                        'minute': int(row['minute']),
                        'additional_time': int(row['additional_time']),
                        'corner_number': int(row['corner_number']),
                        'timestamp': row['timestamp'],
                        'home_total': int(row['home_total']),
                        'away_total': int(row['away_total'])
                    }
                    self.timeline.append(event)
                    # 更新当前计数
                    if event['team'] == 'home':
                        self.home_corners = event['home_total']
                    else:
                        self.away_corners = event['away_total']
            print(f"从 {filename} 加载了 {len(self.timeline)} 条角球记录")
        except FileNotFoundError:
            print(f"文件 {filename} 不存在")
        except Exception as e:
            print(f"加载文件时出错:{e}")
def simulate_match(demo_modes=True):
    """
    模拟一场比赛的角球记录
    """
    tracker = CornerKickTracker("曼城", "利物浦")
    print("🎯 角球统计系统演示")
    print("="*50)
    if demo_modes:
        # 模拟一些角球事件
        demo_events = [
            ('home', 3), ('home', 8), ('away', 12), ('home', 15), 
            ('away', 22), ('home', 28), ('away', 35), ('home', 45), 
            ('home', 52), ('away', 60), ('away', 45, 2),  # 补时角球
            ('home', 75), ('away', 82), ('home', 90, 1)   # 最后时刻角球
        ]
        for event in demo_events:
            tracker.register_corner(event[0], event[1], 
                                  event[2] if len(event) > 2 else 0)
            tracker.print_status()
            input("按Enter键继续...")
            print()
    return tracker
def main():
    """主函数"""
    print("⚽ 足球角球统计系统")
    print("="*50)
    # 创建追踪器
    tracker = CornerKickTracker("曼城", "利物浦")
    # 提供交互式操作
    while True:
        print("\n请选择操作:")
        print("1. 登记角球(主队)")
        print("2. 登记角球(客队)")
        print("3. 查看当前比分和领先情况")
        print("4. 查看完整时间线")
        print("5. 保存数据到文件")
        print("6. 从文件加载数据")
        print("7. 模拟整场比赛")
        print("8. 退出")
        choice = input("请输入选择 (1-8): ").strip()
        if choice == '1':
            try:
                minute = int(input("请输入比赛时间(分钟):"))
                add_time = input("是否有补时?(秒,默认0): ")
                add_time = int(add_time) if add_time else 0
                tracker.register_corner('home', minute, add_time)
                tracker.print_status()
            except ValueError:
                print("请输入有效的时间!")
        elif choice == '2':
            try:
                minute = int(input("请输入比赛时间(分钟):"))
                add_time = input("是否有补时?(秒,默认0): ")
                add_time = int(add_time) if add_time else 0
                tracker.register_corner('away', minute, add_time)
                tracker.print_status()
            except ValueError:
                print("请输入有效的时间!")
        elif choice == '3':
            tracker.print_status()
        elif choice == '4':
            tracker.print_timeline()
        elif choice == '5':
            filename = input("请输入文件名(如:corners.csv):")
            tracker.save_to_file(filename)
        elif choice == '6':
            filename = input("请输入文件名(如:corners.csv):")
            tracker.load_from_file(filename)
        elif choice == '7':
            print("开始模拟比赛...")
            tracker = simulate_match(demo_modes=False)
            tracker.print_status()
            tracker.print_timeline()
        elif choice == '8':
            print("感谢使用足球角球统计系统!")
            break
        else:
            print("无效的选择,请重新输入!")
if __name__ == "__main__":
    # 可以直接运行模拟演示,或者使用交互式界面
    print("选择运行模式:")
    print("1. 快速模拟演示")
    print("2. 交互式操作")
    mode = input("请输入选择 (1/2): ").strip()
    if mode == '1':
        # 快速模拟演示
        tracker = simulate_match(demo_modes=True)
        print("\n📊 最终统计结果:")
        tracker.print_status()
        print(f"\n总角球数:{tracker.home_corners + tracker.away_corners}")
        print("="*50)
        # 保存演示数据
        tracker.save_to_file("match_corners.csv")
    else:
        # 交互式操作
        main()

这个程序的主要功能包括:

核心功能:

  1. 角球登记 - 实时记录每个角球事件
  2. 领先统计 - 自动判断哪方领先
  3. 时间线记录 - 记录每个角球的详细信息
  4. 数据持久化 - 支持保存和加载数据

特色功能:

  • 实时比分显示 - 用友好的界面显示当前角球数
  • 补时处理 - 支持记录补时的角球
  • 数据导出 - 可以将数据保存为CSV格式
  • 模拟演示 - 提供完整的模拟比赛示例

使用方法:

您可以直接运行程序查看模拟演示,或者选择交互模式手动输入角球数据,程序会实时更新比分并显示领先情况。

这份代码包含了详细的注释,方便您理解每个部分的功能,如果需要调整或扩展功能,可以在此基础上进行修改。

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