本文目录导读:

我来帮你创建一个统计篮球关门防守(Closeout)成功次数的Python程序,关门防守是指防守球员快速冲向持球进攻球员,阻止其投篮或突破的防守动作。
基础版本
class CloseoutDefense:
def __init__(self):
self.attempts = 0 # 总防守次数
self.successful = 0 # 成功次数
self.failed = 0 # 失败次数
self.details = [] # 详细记录
def record_defense(self, defender_name, offender_name, result, quarter, minute):
"""
记录一次关门防守
:param defender_name: 防守球员姓名
:param offender_name: 进攻球员姓名
:param result: 'success' 成功, 'fail' 失败
:param quarter: 第几节
:param minute: 比赛时间(分钟)
"""
self.attempts += 1
if result == 'success':
self.successful += 1
else:
self.failed += 1
record = {
'defender': defender_name,
'offender': offender_name,
'result': result,
'quarter': quarter,
'minute': minute,
'attempt_num': self.attempts
}
self.details.append(record)
def get_success_rate(self):
"""计算成功率"""
if self.attempts == 0:
return 0
return (self.successful / self.attempts) * 100
def get_player_stats(self, player_name):
"""获取特定球员的防守统计"""
player_attempts = 0
player_success = 0
for record in self.details:
if record['defender'] == player_name:
player_attempts += 1
if record['result'] == 'success':
player_success += 1
if player_attempts == 0:
return 0, 0, 0 # 尝试次数, 成功次数, 成功率
return player_attempts, player_success, (player_success/player_attempts)*100
def print_summary(self):
"""打印统计摘要"""
print("=" * 50)
print("关门防守统计报告")
print("=" * 50)
print(f"总防守次数: {self.attempts}")
print(f"成功次数: {self.successful}")
print(f"失败次数: {self.failed}")
print(f"成功率: {self.get_success_rate():.1f}%")
print("=" * 50)
def print_player_stats(self):
"""打印各球员统计"""
players = set(record['defender'] for record in self.details)
print("\n球员个人统计:")
print("-" * 50)
for player in players:
attempts, success, rate = self.get_player_stats(player)
print(f"{player}: 防守{attempts}次, 成功{success}次, 成功率{rate:.1f}%")
# 使用示例
def main():
# 创建统计对象
defense = CloseoutDefense()
# 模拟记录几次防守数据
# 参数: 防守球员, 进攻球员, 结果, 节数, 分钟
defense.record_defense("王明", "李强", 'success', 1, 5)
defense.record_defense("王明", "张伟", 'success', 1, 8)
defense.record_defense("刘洋", "李强", 'fail', 1, 12)
defense.record_defense("王明", "赵磊", 'success', 2, 3)
defense.record_defense("刘洋", "张伟", 'success', 2, 6)
defense.record_defense("王明", "李强", 'fail', 2, 9)
defense.record_defense("陈杰", "赵磊", 'success', 3, 2)
defense.record_defense("刘洋", "李强", 'success', 3, 5)
defense.record_defense("王明", "张伟", 'success', 4, 1)
defense.record_defense("陈杰", "赵磊", 'fail', 4, 4)
# 打印统计报告
defense.print_summary()
defense.print_player_stats()
# 显示详细记录
print("\n详细防守记录:")
print("-" * 50)
for record in defense.details:
result_text = "成功" if record['result'] == 'success' else "失败"
print(f"第{record['attempt_num']}次: {record['defender']}防守{record['offender']} "
f"- {result_text} (第{record['quarter']}节 {record['minute']}分钟)")
if __name__ == "__main__":
main()
进阶版本(包含更多功能)
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
import json
class AdvancedCloseoutDefense(CloseoutDefense):
def __init__(self, game_id=None):
super().__init__()
self.game_id = game_id or datetime.now().strftime("%Y%m%d_%H%M%S")
self.defense_types = {} # 防守方式统计
self.offensive_players = {} # 进攻球员统计
def record_defense(self, defender_name, offender_name, result, quarter, minute,
defense_type='standard', notes=''):
"""
高级版本记录防守
defense_type: 'standard'(标准), 'aggressive'(侵略性), 'conservative'(保守)
"""
super().record_defense(defender_name, offender_name, result, quarter, minute)
# 记录防守方式
if defense_type not in self.defense_types:
self.defense_types[defense_type] = {'attempts': 0, 'success': 0}
self.defense_types[defense_type]['attempts'] += 1
if result == 'success':
self.defense_types[defense_type]['success'] += 1
# 记录进攻球员
if offender_name not in self.offensive_players:
self.offensive_players[offender_name] = {'attempts': 0, 'success': 0}
self.offensive_players[offender_name]['attempts'] += 1
if result == 'success':
self.offensive_players[offender_name]['success'] += 1
# 在详细记录中添加更多信息
if self.details:
self.details[-1].update({
'defense_type': defense_type,
'notes': notes
})
def get_offensive_player_stats(self, player_name):
"""获取被防守球员的数据"""
if player_name in self.offensive_players:
stats = self.offensive_players[player_name]
return stats['attempts'], stats['success']
return 0, 0
def get_defense_type_stats(self):
"""获取不同防守方式的统计"""
stats = {}
for def_type, data in self.defense_types.items():
rate = (data['success']/data['attempts']*100) if data['attempts'] > 0 else 0
stats[def_type] = {
'attempts': data['attempts'],
'success': data['success'],
'success_rate': rate
}
return stats
def generate_report(self, filename=None):
"""生成详细的报告"""
if not filename:
filename = f"closeout_report_{self.game_id}.json"
report = {
'game_id': self.game_id,
'summary': {
'total_attempts': self.attempts,
'successful': self.successful,
'failed': self.failed,
'success_rate': self.get_success_rate()
},
'details': self.details,
'defense_types': self.get_defense_type_stats(),
'offensive_stats': self.offensive_players
}
with open(filename, 'w', encoding='utf-8') as f:
json.dump(report, f, ensure_ascii=False, indent=2)
return filename
def plot_statistics(self):
"""绘制统计图表"""
# 球员成功率对比
players = set(record['defender'] for record in self.details)
player_data = {}
for player in players:
attempts, success, rate = self.get_player_stats(player)
player_data[player] = rate
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 第一张图:球员成功率
ax1.bar(player_data.keys(), player_data.values())
ax1.set_title('球员关门防守成功率')
ax1.set_xlabel('防守球员')
ax1.set_ylabel('成功率 (%)')
ax1.set_ylim(0, 100)
# 第二张图:防守方式统计
def_stats = self.get_defense_type_stats()
def_types = list(def_stats.keys())
def_rates = [def_stats[t]['success_rate'] for t in def_types]
ax2.bar(def_types, def_rates)
ax2.set_title('不同防守方式成功率')
ax2.set_xlabel('防守方式')
ax2.set_ylabel('成功率 (%)')
ax2.set_ylim(0, 100)
plt.tight_layout()
plt.savefig(f'closeout_stats_{self.game_id}.png')
plt.show()
return f'closeout_stats_{self.game_id}.png'
# 使用示例
def advanced_example():
# 创建高级统计对象
defense = AdvancedCloseoutDefense(game_id="20240115_001")
# 模拟更详细的数据
defense.record_defense("王明", "李强", 'success', 1, 3, 'aggressive', "抢断成功")
defense.record_defense("王明", "张伟", 'success', 1, 6, 'standard', "干扰投篮")
defense.record_defense("刘洋", "李强", 'fail', 1, 10, 'conservative', "被突破")
defense.record_defense("王明", "赵磊", 'success', 2, 2, 'standard', "造成失误")
defense.record_defense("刘洋", "张伟", 'success', 2, 5, 'aggressive', "封盖")
defense.record_defense("王明", "李强", 'fail', 2, 8, 'standard', "犯规")
defense.record_defense("陈杰", "赵磊", 'success', 3, 1, 'standard', "干扰投篮")
# 打印统计
defense.print_summary()
defense.print_player_stats()
# 打印进攻球员统计
print("\n进攻球员被防守情况:")
for player in defense.offensive_players:
attempts, success = defense.get_offensive_player_stats(player)
rate = (success/attempts*100) if attempts > 0 else 0
print(f"{player}: 被防守{attempts}次, 成功破坏{success}次, 效率{rate:.1f}%")
# 生成报告
report_file = defense.generate_report()
print(f"\n报告已生成: {report_file}")
# 绘制图表(如果安装了matplotlib)
try:
chart_file = defense.plot_statistics()
print(f"统计图表已生成: {chart_file}")
except ImportError:
print("未安装matplotlib,跳过图表生成")
if __name__ == "__main__":
choice = input("选择版本 (1-基础版, 2-高级版): ")
if choice == '2':
advanced_example()
else:
main()
使用说明
-
基础版本:适合快速统计,主要功能包括:
- 记录每次防守
- 计算成功率
- 按球员统计
-
高级版本:增加更多功能:
- 支持不同防守方式
- 生成JSON格式报告
- 生成统计图表
- 记录进攻球员数据
如何运行
# 保存文件为 closeout_defense.py python closeout_defense.py
这个程序可以帮助统计关门防守的成功次数、成功率,以及分析不同球员和防守方式的效果,你可以根据实际需要调整代码中的记录方式和统计维度。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播