足球任意球直接得分统计案例
下面是一个完整的 Python 案例,用于统计球员的任意球直接得分次数。

场景说明
假设我们有一份比赛数据,记录了球员的射门信息,需要统计:
- 每个球员任意球直接得分的次数
- 全场任意球直接得分总数
- 按得分次数排序
代码实现
# ========== 1. 模拟比赛数据 ==========
# 每条记录包含:球员姓名、射门类型、是否进球
shots_data = [
{"player": "梅西", "type": "任意球", "goal": True},
{"player": "梅西", "type": "任意球", "goal": False},
{"player": "C罗", "type": "任意球", "goal": True},
{"player": "C罗", "type": "点球", "goal": True},
{"player": "梅西", "type": "任意球", "goal": True},
{"player": "内马尔", "type": "任意球", "goal": False},
{"player": "C罗", "type": "任意球", "goal": False},
{"player": "内马尔", "type": "任意球", "goal": True},
{"player": "梅西", "type": "点球", "goal": True},
{"player": "C罗", "type": "任意球", "goal": True},
]
# ========== 2. 统计任意球直接得分 ==========
free_kick_goals = {} # 记录每个球员任意球进球数
free_kick_shots = {} # 记录每个球员任意球射门总数
for shot in shots_data:
player = shot["player"]
if shot["type"] == "任意球":
# 先初始化计数
free_kick_goals.setdefault(player, 0)
free_kick_shots.setdefault(player, 0)
free_kick_shots[player] += 1
if shot["goal"]: # 如果是任意球且进球
free_kick_goals[player] += 1
# ========== 3. 输出结果 ==========
print("=" * 40)
print("任意球直接得分统计")
print("=" * 40)
# 按进球数降序排序
sorted_players = sorted(free_kick_goals.items(), key=lambda x: x[1], reverse=True)
total_goals = 0
for player, goals in sorted_players:
attempts = free_kick_shots[player]
rate = goals / attempts * 100 if attempts else 0
total_goals += goals
print(f"{player:<4} 任意球进球: {goals} 次 | "
f"任意球射门: {attempts} 次 | 命中率: {rate:.1f}%")
print("-" * 40)
print(f"全场任意球直接得分总计: {total_goals} 次")
print("=" * 40)
运行结果
========================================
任意球直接得分统计
========================================
梅西 任意球进球: 2 次 | 任意球射门: 3 次 | 命中率: 66.7%
C罗 任意球进球: 2 次 | 任意球射门: 3 次 | 命中率: 66.7%
内马尔 任意球进球: 1 次 | 任意球射门: 2 次 | 命中率: 50.0%
----------------------------------------
全场任意球直接得分总计: 5 次
========================================
关键点讲解
| 步骤 | 说明 |
|---|---|
| 数据准备 | 用字典列表模拟比赛记录,字段含义清晰 |
| 条件筛选 | shot["type"] == "任意球" 只统计任意球类型 |
| 计分判断 | 在任意球前提下再判断 goal,避免把点球混入 |
| 字典统计 | 用两个字典分别记录进球数和射门数,便于算命中率 |
| 排序输出 | sorted(..., key=lambda x: x[1], reverse=True) 按进球数降序 |
进阶:处理文件数据(可选)
实际项目中数据常来自 CSV/JSON,可替换第一部分:
import csv
free_kick_goals = {}
free_kick_shots = {}
with open("match_data.csv", encoding="utf-8") as f:
for row in csv.DictReader(f):
if row["type"] == "任意球":
p = row["player"]
free_kick_goals.setdefault(p, 0)
free_kick_shots.setdefault(p, 0)
free_kick_shots[p] += 1
if row["goal"].strip().lower() == "true":
free_kick_goals[p] += 1
小结
- 核心思路:筛选 → 计数 → 排序 → 输出
- 易踩坑:
goal是布尔值还是字符串(CSV 里通常是字符串 "True"),需要统一转换 - 可扩展方向:加入比赛场次、赛季筛选、按球队统计等维度
这样就能清楚统计出每位球员任意球直接得分次数及整体数据了 ⚽