python案例统计角球数哪边领先?

wen python案例 1

本文目录导读:

python案例统计角球数哪边领先?

  1. 完整案例:角球数统计系统
  2. 额外功能:可视化统计
  3. 使用说明
  4. 扩展功能建议

我来创建一个统计足球比赛中角球数领先情况的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)

使用说明

  1. 手动模式:实时输入角球事件,系统会即时更新领先情况
  2. 自动模式:模拟一场完整的比赛,生成随机的角球事件
  3. 统计功能
    • 实时显示双方角球数和领先差距
    • 分析角球发生的高峰时段
    • 计算角球占比和趋势

扩展功能建议

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编程,也能用于实际的足球数据分析场景,你可以根据自己的需求进行修改和扩展。

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