python案例统计任意球直接得分几次?

wen python案例 4

足球任意球直接得分统计案例

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

python案例统计任意球直接得分几次?

场景说明

假设我们有一份比赛数据,记录了球员的射门信息,需要统计:

  1. 每个球员任意球直接得分的次数
  2. 全场任意球直接得分总数
  3. 按得分次数排序

代码实现

# ========== 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"),需要统一转换
  • 可扩展方向:加入比赛场次、赛季筛选、按球队统计等维度

这样就能清楚统计出每位球员任意球直接得分次数及整体数据了 ⚽

上一篇这个python案例如何点评本场MVP表现?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!