本文目录导读:

我来为您提供一个统计角球数领先情况的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格式
- 模拟演示 - 提供完整的模拟比赛示例
使用方法:
您可以直接运行程序查看模拟演示,或者选择交互模式手动输入角球数据,程序会实时更新比分并显示领先情况。
这份代码包含了详细的注释,方便您理解每个部分的功能,如果需要调整或扩展功能,可以在此基础上进行修改。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播