python案例统计反越位成功形成单刀几次?

wen python案例 2

我来帮你创建一个统计反越位成功形成单刀次数的Python案例,这个案例会模拟足球比赛中的反越位情况:

python案例统计反越位成功形成单刀几次?

import random
from datetime import datetime
class 反越位统计系统:
    def __init__(self, 比赛名称="友谊赛"):
        self.比赛名称 = 比赛名称
        self.反越位尝试次数 = 0
        self.反越位成功次数 = 0
        self.单刀形成次数 = 0
        self.事件记录 = []
    def 记录反越位尝试(self, 进攻方, 防守方, 时间):
        """记录一次反越位尝试"""
        self.反越位尝试次数 += 1
        事件 = {
            '时间': time,
            '进攻方': 进攻方,
            '防守方': 防守方,
            '类型': '反越位尝试'
        }
        self.事件记录.append(事件)
    def 判断反越位成功(self):
        """模拟判断反越位是否成功"""
        # 模拟成功率约60%
        return random.random() < 0.6
    def 判断形成单刀(self):
        """模拟判断是否形成单刀"""
        # 模拟从反越位成功到形成单刀的成功率约70%
        return random.random() < 0.7
    def 模拟进攻回合(self, 进攻方, 防守方, 时间):
        """模拟一次进攻回合"""
        print(f"\n🕐 第{时间}分钟 - {进攻方}进攻")
        # 是否尝试反越位
        if random.random() < 0.3:  # 30%的进攻会尝试反越位
            self.记录反越位尝试(进攻方, 防守方, 时间)
            print(f"⚽ 尝试反越位...")
            if self.判断反越位成功():
                self.反越位成功次数 += 1
                print("✅ 反越位成功!")
                if self.判断形成单刀():
                    self.单刀形成次数 += 1
                    print("🎯 形成单刀机会!")
                    # 单刀进球概率
                    if random.random() < 0.5:  # 50%的进球率
                        print("⚽ 球进了!!")
                        return '进球'
                    else:
                        print("❌ 单刀被扑出")
                        return '单刀未进'
                else:
                    print("⏹️ 被后卫追上,未能形成单刀")
                    return '未能形成单刀'
            else:
                print("🚫 反越位失败,越位了")
                return '越位'
        else:
            print("↩️ 选择阵地进攻")
            return '未尝试反越位'
    def 生成比赛报告(self, 回合数=20):
        """生成详细比赛分析报告"""
        print("\n" + "="*50)
        print(f"📊 {self.比赛名称} - 反越位分析报告")
        print("="*50)
        # 获取统计数据
        stats = self.获取统计数据()
        print(f"\n📈 进攻总回合数: {回合数}")
        print(f"🔄 反越位尝试次数: {self.反越位尝试次数}")
        print(f"✅ 反越位成功率: {stats['反越位成功率']:.1%}")
        print(f"🎯 形成单刀次数: {self.单刀形成次数}")
        print(f"⚽ 单刀转化进球数: {stats['进球次数']}")
        return stats
    def 获取统计数据(self):
        """获取统计结果"""
        进球次数 = sum(1 for e in self.事件记录 if '进球' in e.get('类型', ''))
        反越位成功率 = self.反越位成功次数 / self.反越位尝试次数 if self.反越位尝试次数 > 0 else 0
        单刀转化率 = 进球次数 / self.单刀形成次数 if self.单刀形成次数 > 0 else 0
        return {
            '反越位尝试次数': self.反越位尝试次数,
            '反越位成功次数': self.反越位成功次数,
            '反越位成功率': 反越位成功率,
            '单刀形成次数': self.单刀形成次数,
            '进球次数': 进球次数,
            '单刀转化率': 单刀转化率
        }
    def 可视化统计(self):
        """用简单图表展示统计结果"""
        import matplotlib.pyplot as plt
        统计 = self.获取统计数据()
        类别 = ['反越位尝试', '反越位成功', '形成单刀', '进球']
        数据 = [
            统计['反越位尝试次数'],
            统计['反越位成功次数'],
            统计['单刀形成次数'],
            统计['进球次数']
        ]
        plt.figure(figsize=(10, 6))
        # 柱状图
        plt.subplot(1, 2, 1)
        颜色 = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']
        plt.bar(类别, 数据, color=颜色, width=0.5)
        plt.title(f'反越位数据统计 - {self.比赛名称}')
        plt.ylabel('次数')
        # 添加数值标签
        for i, v in enumerate(数据):
            plt.text(i, v + 0.5, str(v), ha='center')
        # 饼图
        plt.subplot(1, 2, 2)
        if 统计['反越位尝试次数'] > 0:
            sizes = [统计['反越位成功次数'], 统计['反越位尝试次数'] - 统计['反越位成功次数']]
            labels = ['成功', '失败']
            colors = ['#4ECDC4', '#FF6B6B']
            plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%',
                   startangle=90)
            plt.title('反越位成功率')
        plt.tight_layout()
        plt.show()
def 模拟完整比赛():
    """模拟一场完整的比赛"""
    系统 = 反越位统计系统("世界杯半决赛")
    # 模拟45分钟的上半场
    print("🏟️ 比赛开始!")
    print("比赛双方:西班牙 vs 德国")
    上半场进球 = 0
    下半场进球 = 0
    # 模拟上半场(每2分钟一个进攻回合)
    print("\n🕐 上半场开始!")
    for 分钟 in range(1, 46, 1):
        if random.random() < 0.2:  # 20%的概率每分钟有一次进攻
            if random.random() < 0.5:
                进攻方 = "西班牙"
                防守方 = "德国"
            else:
                进攻方 = "德国"
                防守方 = "西班牙"
            结果 = 系统.模拟进攻回合(进攻方, 防守方, 分钟)
            if 结果 == '进球':
                上半场进球 += 1
                print(f"⚽ 比分 - 西班牙 {上半场进球 + 下半场进球}")
    print("\n🏁 上半场结束!")
    print(f"📊 比分:西班牙 vs 德国")
    # 模拟下半场
    print("\n🕐 下半场开始!")
    for 分钟 in range(46, 91, 1):
        if random.random() < 0.2:
            if random.random() < 0.5:
                进攻方 = "西班牙"
                防守方 = "德国"
            else:
                进攻方 = "德国"
                防守方 = "西班牙"
            结果 = 系统.模拟进攻回合(进攻方, 防守方, 分钟)
            if 结果 == '进球':
                下半场进球 += 1
                print(f"⚽ 比分 - 西班牙 {上半场进球} : {下半场进球} 德国")
    print("\n🏁 全场比赛结束!")
    # 生成最终报告
    报告 = 系统.生成比赛报告()
    print("\n💡 详细分析:")
    print(f"- 总反越位成功次数:{报告['反越位成功次数']}")
    print(f"- 形成单刀次数:{报告['单刀形成次数']}")
    print(f"- 单刀进球转化率:{报告['单刀转化率']:.1%}")
    if 报告['单刀形成次数'] > 0:
        print(f"\n📌 {系统.比赛名称}中,反越位成功形成单刀的机会有 {系统.单刀形成次数} 次!")
    return 报告
# 运行模拟
if __name__ == "__main__":
    # 方式1:自动模拟一场比赛
    print("="*50)
    print("🏆 反越位单刀机会统计分析")
    print("="*50)
    # 方式2:手动输入数据
    print("\n📝 您也可以手动输入反越位数据")
    系统2 = 反越位统计系统("自定义统计")
    想要手动输入 = input("\n是否手动输入数据?(y/n): ").lower() == 'y'
    if 想要手动输入:
        print("\n请输入反越位相关数据:")
        尝试次数 = int(input("反越位尝试次数:"))
        成功次数 = int(input("反越位成功次数:"))
        单刀次数 = int(input("单刀形成次数:"))
        系统2.反越位尝试次数 = 尝试次数
        系统2.反越位成功次数 = 成功次数
        系统2.单刀形成次数 = 单刀次数
        报告 = 系统2.生成比赛报告()
        print(f"\n📊 统计结果:")
        print(f"反越位成功率:{报告['反越位成功率']:.1%}")
        print(f"形成单刀次数:{报告['单刀形成次数']}")
    else:
        # 自动模拟
        自动统计 = 模拟完整比赛()

这个程序的主要功能:

  1. 📊 核心统计功能

    • 记录反越位尝试次数
    • 统计反越位成功率
    • 计算形成单刀的次数
    • 跟踪进球转化率
  2. 🎮 比赛模拟

    • 自动模拟比赛进程
    • 每次进攻随机判断是否尝试反越位
    • 记录每次反越位的结果
  3. 📈 数据分析

    • 生成详细的比赛报告
    • 直观显示统计数据
    • 提供可视化图表(需matplotlib)
  4. 💡 使用方法

    • 可以自动模拟整场比赛
    • 也可以手动输入真实比赛数据

运行结果会显示每轮进攻的反越位情况,并最终统计出反越位成功形成单刀的总次数,你可以调整参数来适应不同的统计需求。

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