本文目录导读:

我来为您提供一个统计角球数领先情况的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()
这个程序的主要功能包括:
核心功能:
- 角球登记 - 实时记录每个角球事件
- 领先统计 - 自动判断哪方领先
- 时间线记录 - 记录每个角球的详细信息
- 数据持久化 - 支持保存和加载数据
特色功能:
- 实时比分显示 - 用友好的界面显示当前角球数
- 补时处理 - 支持记录补时的角球
- 数据导出 - 可以将数据保存为CSV格式
- 模拟演示 - 提供完整的模拟比赛示例
使用方法:
您可以直接运行程序查看模拟演示,或者选择交互模式手动输入角球数据,程序会实时更新比分并显示领先情况。
这份代码包含了详细的注释,方便您理解每个部分的功能,如果需要调整或扩展功能,可以在此基础上进行修改。