本文目录导读:

我来创建一个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 次
使用场景:
- 比赛战术分析
- 球员表现评估
- 球队进攻效率研究
- 教练组决策参考
程序支持手动添加事件和批量导入数据,可以根据实际需求灵活调整统计维度。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播