本文目录导读:

我来帮你创建一个统计任意球直接得分的Python案例,这里提供几种不同的实现方式:
方案1:简单的数据统计
def count_direct_free_kick_goals(records):
"""
统计任意球直接得分的次数
参数:
records: 包含进球记录的列表,每条记录是一个字典
返回:
直接任意球得分的次数
"""
count = 0
for record in records:
if record['得分方式'] == '任意球直接得分':
count += 1
return count
# 示例数据
match_records = [
{'球员': '梅西', '得分方式': '任意球直接得分', '分钟': 23},
{'球员': 'C罗', '得分方式': '点球', '分钟': 45},
{'球员': '贝克汉姆', '得分方式': '任意球直接得分', '分钟': 67},
{'球员': '内马尔', '得分方式': '运动战进球', '分钟': 78},
{'球员': '皮尔洛', '得分方式': '任意球直接得分', '分钟': 89},
{'球员': '姆巴佩', '得分方式': '运动战进球', '分钟': 90},
]
result = count_direct_free_kick_goals(match_records)
print(f"任意球直接得分的次数: {result}")
方案2:使用Pandas进行统计(更强大)
import pandas as pd
def analyze_free_kicks_with_pandas():
# 创建包含多场比赛的数据
data = {
'比赛编号': ['A001', 'A001', 'A002', 'A002', 'A003', 'A003', 'A004'],
'球员': ['梅西', 'C罗', '贝克汉姆', '内马尔', '皮尔洛', '姆巴佩', '哈兰德'],
'进球方式': ['任意球直接', '点球', '任意球直接', '运动战', '任意球直接', '运动战', '头球'],
'比分影响': ['1-0', '2-0', '1-1', '2-1', '0-1', '1-1', '2-0']
}
df = pd.DataFrame(data)
# 统计任意球直接得分
free_kick_goals = df[df['进球方式'] == '任意球直接']
print("=== 任意球直接得分统计 ===")
print(f"总次数: {len(free_kick_goals)}")
print("\n详细记录:")
print(free_kick_goals)
# 按球员统计
player_stats = df[df['进球方式'] == '任意球直接'].groupby('球员').size().reset_index(name='次数')
print("\n按球员统计:")
print(player_stats)
return len(free_kick_goals)
# 运行分析
total = analyze_free_kicks_with_pandas()
print(f"\n总的直接任意球进球数: {total}")
方案3:面向对象方式
class FootballMatchAnalyzer:
def __init__(self):
self.goals = []
def add_goal(self, player, goal_type, minute, team):
"""添加进球记录"""
self.goals.append({
'player': player,
'goal_type': goal_type,
'minute': minute,
'team': team
})
def count_direct_free_kicks(self, team=None):
"""
统计直接任意球得分次数
可以指定球队
"""
count = 0
for goal in self.goals:
if goal['goal_type'] == 'free_kick_direct':
if team is None or goal['team'] == team:
count += 1
return count
def get_free_kick_details(self):
"""获取所有直接任意球得分的详细情况"""
free_kicks = [g for g in self.goals if g['goal_type'] == 'free_kick_direct']
return free_kicks
# 使用示例
analyzer = FootballMatchAnalyzer()
# 添加比赛数据
analyzer.add_goal('Mess', 'free_kick_direct', 23, 'Barcelona')
analyzer.add_goal('Ronaldo', 'penalty', 45, 'Real Madrid')
analyzer.add_goal('Beckham', 'free_kick_direct', 67, 'Manchester United')
analyzer.add_goal('Neymar', 'open_play', 78, 'PSG')
analyzer.add_goal('Pirlo', 'free_kick_direct', 89, 'Juventus')
# 统计
total_free_kicks = analyzer.count_direct_free_kicks()
print(f"所有球队的任意球直接得分: {total_free_kicks}")
# 按球队统计
barcelona_free_kicks = analyzer.count_direct_free_kicks('Barcelona')
print(f"巴塞罗那的任意球直接得分: {barcelona_free_kicks}")
# 查看详情
print("\n任意球得分详情:")
for fk in analyzer.get_free_kick_details():
print(f"球员: {fk['player']}, 分钟: {fk['minute']}, 球队: {fk['team']}")
方案4:带文件读取的完整示例
import csv
from collections import Counter
def analyze_from_csv(file_path):
"""
从CSV文件读取数据并统计
"""
try:
# 模拟CSV数据
sample_data = [
['球员', '球队', '进球方式', '比赛日期'],
['梅西', '巴萨', '任意球直接', '2023-01-15'],
['C罗', '皇马', '点球', '2023-01-15'],
['贝克汉姆', '曼联', '任意球直接', '2023-01-22'],
['内马尔', '巴黎', '运动战', '2023-01-22'],
['皮尔洛', '尤文', '任意球直接', '2023-02-01']
]
# 写入临时文件
with open(file_path, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(sample_data)
# 读取并统计
free_kick_count = 0
all_goal_types = []
with open(file_path, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
all_goal_types.append(row['进球方式'])
if row['进球方式'] == '任意球直接':
free_kick_count += 1
# 统计所有进球方式
type_counter = Counter(all_goal_types)
print("=== 统计分析结果 ===")
print(f"任意球直接得分: {free_kick_count}次")
print("\n所有进球方式统计:")
for goal_type, count in type_counter.items():
print(f" {goal_type}: {count}次")
return free_kick_count
except Exception as e:
print(f"处理文件时出错: {e}")
return 0
# 运行分析
result = analyze_from_csv('match_data.csv')
print(f"\n最终直接任意球得分总数: {result}")
使用建议
- 简单场景:使用方案1,直接列表操作
- 数据分析:使用方案2,Pandas功能更强大
- 复杂项目:使用方案3,面向对象设计更清晰
- 真实数据:使用方案4,结合文件读取
这些示例都包含了:
- 数据定义和输入
- 统计逻辑
- 结果输出
- 可扩展性
你可以根据实际需求选择合适的方案,或者组合使用,需要我详细解释某个特定部分吗?