我来帮你创建一个统计反越位成功形成单刀次数的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:
# 自动模拟
自动统计 = 模拟完整比赛()
这个程序的主要功能:
-
📊 核心统计功能:
- 记录反越位尝试次数
- 统计反越位成功率
- 计算形成单刀的次数
- 跟踪进球转化率
-
🎮 比赛模拟:
- 自动模拟比赛进程
- 每次进攻随机判断是否尝试反越位
- 记录每次反越位的结果
-
📈 数据分析:
- 生成详细的比赛报告
- 直观显示统计数据
- 提供可视化图表(需matplotlib)
-
💡 使用方法:
- 可以自动模拟整场比赛
- 也可以手动输入真实比赛数据
运行结果会显示每轮进攻的反越位情况,并最终统计出反越位成功形成单刀的总次数,你可以调整参数来适应不同的统计需求。