本文目录导读:

我来创建一个统计足球比赛中角球数领先情况的Python案例,这个程序会展示如何统计和比较两支球队的角球数据。
完整案例:角球数统计系统
import random
from datetime import datetime
from collections import defaultdict
class CornerKickStats:
"""角球统计数据类"""
def __init__(self, home_team, away_team):
self.home_team = home_team
self.away_team = away_team
self.home_corners = 0
self.away_corners = 0
self.corner_events = [] # 记录角球事件
self.match_time = 0 # 比赛时间(分钟)
def add_corner(self, team, minute):
"""添加一次角球记录"""
if team == self.home_team:
self.home_corners += 1
elif team == self.away_team:
self.away_corners += 1
else:
raise ValueError("未知球队")
# 记录事件
self.corner_events.append({
'minute': minute,
'team': team,
'type': 'corner'
})
self.match_time = minute
def get_leader(self):
"""获取领先的球队"""
if self.home_corners > self.away_corners:
return self.home_team, self.home_corners - self.away_corners
elif self.away_corners > self.home_corners:
return self.away_team, self.away_corners - self.home_corners
else:
return None, 0
def get_total_corners(self):
"""获取总角球数"""
return self.home_corners + self.away_corners
def get_difference(self):
"""获取角球数差"""
return abs(self.home_corners - self.away_corners)
def display_status(self):
"""显示当前状态"""
print(f"\n{'='*50}")
print(f"比赛时间: {self.match_time}分钟")
print(f"{'='*50}")
# 计算领先情况
leader, diff = self.get_leader()
print(f"📊 角球统计:")
print(f"{'─'*30}")
print(f"🏠 {self.home_team}: {self.home_corners}个角球")
print(f"🚌 {self.away_team}: {self.away_corners}个角球")
print(f"{'─'*30}")
# 显示领先状态
if leader:
print(f"✅ {leader}队领先{diff}个角球")
else:
print(f"⚖️ 双方角球数持平")
print(f"总计: {self.get_total_corners()}个角球")
print(f"{'='*50}\n")
def simulate_match(minutes=90):
"""模拟一场比赛并统计角球"""
# 创建比赛实例
home = "曼联"
away = "利物浦"
match = CornerKickStats(home, away)
print(f"🏆 模拟比赛: {home} vs {away}")
print(f"⏱️ 比赛时长: {minutes}分钟\n")
# 模拟角球事件(随机生成)
corner_probability = 0.3 # 每分钟产生角球的概率
for minute in range(1, minutes + 1):
# 随机决定是否产生角球
if random.random() < corner_probability:
# 30%概率是主队角球,70%概率是客队角球(根据实际情况调整)
team = home if random.random() < 0.5 else away
match.add_corner(team, minute)
return match
def analyze_corner_moments(match):
"""分析角球高峰期"""
moments = defaultdict(int)
for event in match.corner_events:
# 将比赛分为三个阶段
if event['minute'] <= 30:
phase = "上半场前半段 (1-30分钟)"
elif event['minute'] <= 60:
phase = "上半场后半段至中场 (31-60分钟)"
else:
phase = "下半场及加时 (61-90+分钟)"
moments[phase] += 1
print("📈 角球发生时段分布:")
for phase, count in sorted(moments.items(), key=lambda x: x[1], reverse=True):
print(f" {phase}: {count}个角球")
def generate_report(match):
"""生成比赛报告"""
print("\n" + "="*60)
print("📋 比赛角球分析报告")
print("="*60)
# 基础统计
print(f"\n🎯 基本数据:")
print(f" 总角球数: {match.get_total_corners()}")
print(f" 角球数差: {match.get_difference()}")
# 领先情况
leader, diff = match.get_leader()
if leader:
print(f"\n🏆 角球领先:")
print(f" {leader}队领先{diff}个角球")
else:
print(f"\n⚖️ 角球数持平")
# 双方角球占比
total = match.get_total_corners()
if total > 0:
home_percent = (match.home_corners / total) * 100
away_percent = (match.away_corners / total) * 100
print(f"\n📊 占比分析:")
print(f" {match.home_team}: {home_percent:.1f}%")
print(f" {match.away_team}: {away_percent:.1f}%")
# 角球高峰期分析
print(f"\n🕐 时间分析:")
analyze_corner_moments(match)
# 最终状态
match.display_status()
def main():
"""主函数"""
print("🎮 足球角球数统计系统")
print("="*50)
# 1. 手动输入模式
choice = input("\n选择模式:\n1. 手动输入角球记录\n2. 自动模拟比赛\n请输入选择(1/2): ")
if choice == "1":
# 手动模式
home = input("请输入主队名称: ")
away = input("请输入客队名称: ")
match = CornerKickStats(home, away)
print("\n📝 输入角球记录 (输入'结束'退出):")
while True:
minute = input(f"输入角球时间(分钟)或'结束': ")
if minute.lower() == '结束':
break
try:
minute = int(minute)
team = input(f"输入球队({home}/{away}): ")
if team in [home, away]:
match.add_corner(team, minute)
match.display_status()
else:
print("❌ 无效球队名称")
except ValueError:
print("❌ 无效的分钟数,请输入数字")
else:
# 模拟模式
minutes = int(input("模拟比赛时长(默认90分钟): ") or "90")
match = simulate_match(minutes)
# 生成最终报告
generate_report(match)
if __name__ == "__main__":
main()
额外功能:可视化统计
import matplotlib.pyplot as plt
import numpy as np
def visualize_corner_stats(match):
"""可视化角球统计数据"""
# 准备数据
teams = [match.home_team, match.away_team]
corners = [match.home_corners, match.away_corners]
# 创建图表
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 柱状图
colors = ['#FF6B6B', '#4ECDC4']
bars = ax1.bar(teams, corners, color=colors, alpha=0.7)
ax1.set_title('角球数对比')
ax1.set_ylabel('角球数')
# 添加数值标签
for bar, count in zip(bars, corners):
ax1.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.1,
str(count), ha='center', fontweight='bold')
# 饼图
if sum(corners) > 0:
ax2.pie(corners, labels=teams, autopct='%1.1f%%',
colors=colors, startangle=90)
ax2.set_title('角球占比分布')
plt.tight_layout()
plt.show()
# 使用示例
if __name__ == "__main__":
# 创建一场模拟比赛
match = simulate_match(90)
match.display_status()
# 可视化
visualize_corner_stats(match)
使用说明
- 手动模式:实时输入角球事件,系统会即时更新领先情况
- 自动模式:模拟一场完整的比赛,生成随机的角球事件
- 统计功能:
- 实时显示双方角球数和领先差距
- 分析角球发生的高峰时段
- 计算角球占比和趋势
扩展功能建议
class AdvancedCornerStats(CornerKickStats):
"""高级角球统计功能"""
def __init__(self, home_team, away_team):
super().__init__(home_team, away_team)
self.corner_timing = [] # 存储角球时间点
def calculate_corner_rate(self):
"""计算角球率(每分钟角球数)"""
if self.match_time == 0:
return 0
return self.get_total_corners() / self.match_time
def predict_final_corners(self, current_minute, total_minutes=90):
"""预测最终角球数"""
rate = self.calculate_corner_rate()
remaining_time = total_minutes - current_minute
predicted = self.get_total_corners() + rate * remaining_time
return int(predicted)
def get_streak(self, team):
"""获取某队的连续角球数"""
streak = 0
max_streak = 0
current_team = None
for event in self.corner_events:
if event['team'] == team:
if current_team == team:
streak += 1
else:
streak = 1
max_streak = max(max_streak, streak)
else:
streak = 0
current_team = event['team']
return max_streak
这个案例提供了完整的角球统计功能,既适合学习Python编程,也能用于实际的足球数据分析场景,你可以根据自己的需求进行修改和扩展。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播