本文目录导读:

我来创建一个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()
这个程序的亮点:
主要功能:
- 事件记录:记录每次反越位事件的时间、球队、球员和结果
- 结果分类:区分进球、错失、被扑出等不同结果
- 统计分析:自动计算总尝试次数、成功率等数据
- 报告生成:生成详细的分析报告
- 球队排名:支持多场比赛的球队排名分析
输出示例:
反越位成功形成单刀球的次数: 8 次
反越位单刀球分析报告
============================================================
总反越位尝试次数: 8
成功反越位次数: 8
形成单刀球次数: 8
- 进球: 2 次
- 错失机会: 2 次
- 被门将扑出: 2 次
使用场景:
- 比赛战术分析
- 球员表现评估
- 球队进攻效率研究
- 教练组决策参考
程序支持手动添加事件和批量导入数据,可以根据实际需求灵活调整统计维度。