本文目录导读:

我来帮你创建一个统计任意球直接得分的Python程序案例。
方案1:基于事件日志的简单统计
def count_direct_free_kick_goals(events):
"""
统计任意球直接得分次数
参数:
events: 事件列表,每个事件是一个字典,包含:
- 'type': 事件类型 ('free_kick', 'goal', 'corner', 'penalty'等)
- 'sub_type': 子类型 ('direct'直接任意球, 'indirect'间接任意球)
- 'player': 球员名称
- 'minute': 比赛时间
返回:
直接任意球得分次数统计
"""
direct_fk_goals = []
for event in events:
if event['type'] == 'goal' and event.get('sub_type') == 'direct':
if 'free_kick' in event.get('source', ''):
direct_fk_goals.append(event)
return direct_fk_goals
# 示例数据
match_events = [
{'type': 'free_kick', 'player': '张三', 'minute': 10},
{'type': 'goal', 'sub_type': 'direct', 'source': 'free_kick', 'player': '张三', 'minute': 10},
{'type': 'corner', 'player': '李四', 'minute': 15},
{'type': 'goal', 'sub_type': 'indirect', 'source': 'corner', 'player': '王五', 'minute': 15},
{'type': 'free_kick', 'player': '赵六', 'minute': 30},
{'type': 'goal', 'sub_type': 'direct', 'source': 'free_kick', 'player': '赵六', 'minute': 30},
{'type': 'penalty', 'player': '孙七', 'minute': 45},
{'type': 'goal', 'sub_type': 'penalty', 'player': '孙七', 'minute': 45},
]
# 统计
direct_goals = count_direct_free_kick_goals(match_events)
print(f"直接任意球得分次数: {len(direct_goals)}")
for goal in direct_goals:
print(f" - {goal['player']} in {goal['minute']}分钟")
方案2:更完整的足球比赛统计系统
from collections import defaultdict
import json
class FootballMatchStatistics:
"""足球比赛统计类"""
def __init__(self):
self.events = []
self.team_players = {} # 球队和球员映射
self.free_kick_goals = [] # 存储所有任意球相关事件
def add_event(self, event_type, player, minute, team, details=None):
"""添加比赛事件"""
event = {
'type': event_type,
'player': player,
'minute': minute,
'team': team,
'details': details or {}
}
self.events.append(event)
# 如果是任意球相关,记录到专项列表
if event_type in ['free_kick', 'direct_free_kick_goal']:
self.free_kick_goals.append(event)
def add_match_data_from_file(self, filename):
"""从JSON文件加载比赛数据"""
try:
with open(filename, 'r', encoding='utf-8') as f:
data = json.load(f)
for event in data:
self.add_event(
event_type=event['type'],
player=event['player'],
minute=event['minute'],
team=event['team'],
details=event.get('details', {})
)
except FileNotFoundError:
print(f"文件 {filename} 不存在")
except json.JSONDecodeError:
print(f"文件 {filename} 格式错误")
def count_direct_free_k_goals(self):
"""
统计直接任意球得分
直接任意球定义:
- 进球方式为任意球
- 没有其他球员接触传球
- 直接射门得分
返回: 进球列表
"""
direct_fk_goals = []
for event in self.events:
# 检查是否是直接任意球进球事件
if event['type'] == 'goal' and event['details'].get('scoring_type') == 'direct_free_kick':
direct_fk_goals.append({
'minute': event['minute'],
'player': event['player'],
'team': event['team'],
'description': f"直接任意球进球 - {event['player']} in {event['minute']}分钟"
})
return direct_fk_goals
def analyze_free_kicks(self):
"""进行全面分析"""
print("\n=== 任意球得分统计 ===")
# 1. 统计总数
direct_goals = self.count_direct_free_k_goals()
print(f"直接任意球得分总次数: {len(direct_goals)}")
# 2. 按球员统计
player_stats = defaultdict(int)
for goal in direct_goals:
player_stats[goal['player']] += 1
if player_stats:
print("\n球员直接任意球得分排名:")
sorted_players = sorted(player_stats.items(), key=lambda x: x[1], reverse=True)
for player, count in sorted_players[:5]: # 显示前5名
print(f" - {player}: {count}次")
# 3. 按球队统计
team_stats = defaultdict(int)
for goal in direct_goals:
team_stats[goal['team']] += 1
if team_stats:
print("\n球队直接任意球得分排名:")
sorted_teams = sorted(team_stats.items(), key=lambda x: x[1], reverse=True)
for team, count in sorted_teams:
print(f" - {team}: {count}次")
# 4. 按时间段统计
time_periods = defaultdict(int)
for goal in direct_goals:
minute = goal['minute']
period = f"{(minute-1)//15*15+1}-{minute//15*15+15}分钟"
time_periods[period] += 1
if time_periods:
print("\n按时段统计:")
for period in sorted(time_periods.keys()):
print(f" - {period}: {time_periods[period]}次")
return direct_goals
# 示例使用
def main():
match = FootballMatchStatistics()
# 模拟比赛数据
test_events = [
{'type': 'goal', 'player': '梅西', 'minute': 5, 'team': '巴萨',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'goal', 'player': 'C罗', 'minute': 12, 'team': '皇马',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'goal', 'player': '皮克', 'minute': 20, 'team': '巴萨',
'details': {'scoring_type': 'header', 'from': 'corner'}},
{'type': 'goal', 'player': '莫德里奇', 'minute': 25, 'team': '皇马',
'details': {'scoring_type': 'long_shot'}},
{'type': 'goal', 'player': '梅西', 'minute': 33, 'team': '巴萨',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'goal', 'player': 'C罗', 'minute': 41, 'team': '皇马',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'foul', 'player': '卡塞米罗', 'minute': 45, 'team': '皇马'},
{'type': 'goal', 'player': '格列兹曼', 'minute': 50, 'team': '巴萨',
'details': {'scoring_type': 'indirect_free_kick'}},
{'type': 'goal', 'player': '本泽马', 'minute': 55, 'team': '皇马',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'goal', 'player': '梅西', 'minute': 68, 'team': '巴萨',
'details': {'scoring_type': 'penalty'}},
{'type': 'goal', 'player': 'C罗', 'minute': 85, 'team': '皇马',
'details': {'scoring_type': 'direct_free_kick'}},
{'type': 'goal', 'player': '梅西', 'minute': 90, 'team': '巴萨',
'details': {'scoring_type': 'direct_free_kick'}}
]
for event in test_events:
match.add_event(
event_type=event['type'],
player=event['player'],
minute=event['minute'],
team=event['team'],
details=event['details']
)
# 统计并显示结果
direct_fk_goals = match.analyze_free_kicks()
# 显示详细进球信息
print("\n=== 直接任意球进球详细记录 ===")
for goal in direct_fk_goals:
print(f"{goal['description']} (球队: {goal['team']})")
# 保存结果到文件
with open('direct_fk_statistics.txt', 'w', encoding='utf-8') as f:
f.write("直接任意球得分统计报告\n")
f.write("=" * 40 + "\n")
f.write(f"总次数: {len(direct_fk_goals)}\n")
for i, goal in enumerate(direct_fk_goals, 1):
f.write(f"{i}. {goal['description']} (球队: {goal['team']})\n")
print("\n统计结果已保存到 'direct_fk_statistics.txt'")
if __name__ == "__main__":
main()
方案3:最简版本(适合快速使用)
# 最简版本的直接任意球得分统计
def simple_free_kick_counter():
"""简单的任意球直接得分计数器"""
# 模拟数据:进球事件列表
# (进球时间, 球员, 是否直接任意球)
goals = [
(10, "张三", True),
(25, "李四", False), # 这是普通进球
(30, "王五", True),
(45, "赵六", False),
(60, "张三", True),
(75, "孙七", False),
(85, "王五", True)
]
direct_fk_count = 0
direct_fk_details = []
for minute, player, is_direct_fk in goals:
if is_direct_fk:
direct_fk_count += 1
direct_fk_details.append((minute, player))
print(f"直接任意球得分总次数: {direct_fk_count}")
print("详细记录:")
for minute, player in direct_fk_details:
print(f" - 第 {minute} 分钟, {player} 直接任意球破门")
return direct_fk_count
# 运行示例
if __name__ == "__main__":
simple_free_kick_counter()
输出示例
运行方案2的示例会得到类似以下的输出:
=== 任意球得分统计 ===
直接任意球得分总次数: 6
球员直接任意球得分排名:
- 梅西: 3次
- C罗: 3次
- 本泽马: 1次
球队直接任意球得分排名:
- 巴萨: 3次
- 皇马: 3次
按时段统计:
- 1-15分钟: 2次
- 16-30分钟: 0次
- 31-45分钟: 2次
- 46-60分钟: 1次
- 61-75分钟: 0次
- 76-90分钟: 2次
=== 直接任意球进球详细记录 ===
直接任意球进球 - 梅西 in 5分钟 (球队: 巴萨)
直接任意球进球 - C罗 in 12分钟 (球队: 皇马)
直接任意球进球 - 梅西 in 33分钟 (球队: 巴萨)
直接任意球进球 - C罗 in 41分钟 (球队: 皇马)
直接任意球进球 - 本泽马 in 55分钟 (球队: 皇马)
直接任意球进球 - C罗 in 85分钟 (球队: 皇马)
直接任意球进球 - 梅西 in 90分钟 (球队: 巴萨)
通过这些代码,你可以根据实际需求选择不同复杂度的方案,方法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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播