本文目录导读:

我来帮你实现一个统计关门防守(close-out defense)成功次数的Python案例。
实现方案
class CloseOutDefense:
"""关门防守统计类"""
def __init__(self):
self.defense_records = [] # 防守记录
self.success_count = 0 # 成功次数
self.total_count = 0 # 总次数
def record_defense(self, player_name, is_success, details=""):
"""记录一次关门防守
Args:
player_name: 防守球员姓名
is_success: 是否成功
details: 防守细节说明
"""
record = {
'player': player_name,
'success': is_success,
'details': details,
'timestamp': len(self.defense_records) + 1 # 序号
}
self.defense_records.append(record)
self.total_count += 1
if is_success:
self.success_count += 1
def get_stats(self):
"""获取统计数据"""
success_rate = (self.success_count / self.total_count * 100) if self.total_count > 0 else 0
return {
'total_defenses': self.total_count,
'success_count': self.success_count,
'fail_count': self.total_count - self.success_count,
'success_rate': f"{success_rate:.1f}%"
}
def get_player_stats(self, player_name):
"""获取特定球员的防守统计"""
player_records = [r for r in self.defense_records if r['player'] == player_name]
total = len(player_records)
success = sum(1 for r in player_records if r['success'])
if total > 0:
return {
'player': player_name,
'total': total,
'success': success,
'fail': total - success,
'rate': f"{(success/total*100):.1f}%"
}
return None
def show_all_records(self):
"""显示所有防守记录"""
print("=" * 50)
print(" 关门防守记录统计")
print("=" * 50)
for i, record in enumerate(self.defense_records, 1):
status = "✓ 成功" if record['success'] else "✗ 失败"
print(f"#{i:2d} | 球员: {record['player']:6s} | {status} | {record['details']}")
print("=" * 50)
stats = self.get_stats()
print(f"总防守次数: {stats['total_defenses']}")
print(f"成功次数: {stats['success_count']}")
print(f"失败次数: {stats['fail_count']}")
print(f"成功率: {stats['success_rate']}")
print("=" * 50)
# 测试案例 - 模拟篮球比赛数据
def simulate_basketball_game():
"""模拟一场篮球比赛中的关门防守数据"""
defense_tracker = CloseOutDefense()
# 模拟多个防守回合
scenarios = [
# (球员, 是否成功, 描述)
("张伟", True, "成功迫使对手传球失误"),
("李强", True, "逼迫对手仓促出手不中"),
("王明", False, "被对手突破得分"),
("赵华", True, "成功干扰三分投篮"),
("张伟", True, "造成对手进攻犯规"),
("李强", False, "被对手造犯规"),
("王明", True, "成功封盖投篮"),
("赵华", True, "迫使对手24秒违例"),
("张伟", False, "被对手假动作晃过"),
("李强", True, "成功抢断传球"),
("王明", True, "逼迫对手传失误球"),
("赵华", False, "对手命中高难度投篮"),
("张伟", True, "成功预判突破路线"),
("李强", True, "迫使对手停球"),
("王明", False, "被对手传球助攻"),
]
for player, success, detail in scenarios:
defense_tracker.record_defense(player, success, detail)
return defense_tracker
# 高级版 - 支持更多功能
class AdvancedCloseOutDefense(CloseOutDefense):
"""增强版关门防守统计"""
def __init__(self):
super().__init__()
self.player_stats = {} # 球员详细统计
self.time_periods = [] # 时间阶段统计
def record_defense_with_time(self, player, is_success, quarter, minute, details=""):
"""带时间记录的防守"""
record = {
'player': player,
'success': is_success,
'quarter': quarter,
'minute': minute,
'details': details,
'timestamp': len(self.defense_records) + 1
}
self.defense_records.append(record)
self.total_count += 1
# 更新球员统计
if player not in self.player_stats:
self.player_stats[player] = {'total': 0, 'success': 0}
self.player_stats[player]['total'] += 1
if is_success:
self.success_count += 1
self.player_stats[player]['success'] += 1
def analyze_by_quarter(self):
"""按节次分析防守效果"""
quarter_stats = {}
for record in self.defense_records:
q = record['quarter']
if q not in quarter_stats:
quarter_stats[q] = {'total': 0, 'success': 0}
quarter_stats[q]['total'] += 1
if record['success']:
quarter_stats[q]['success'] += 1
print("\n=== 各节次关门防守分析 ===")
for q, stats in quarter_stats.items():
rate = (stats['success'] / stats['total'] * 100) if stats['total'] > 0 else 0
print(f"第{q}节: 总共{stats['total']}次, 成功{stats['success']}次, 成功率{rate:.1f}%")
def get_hot_streak(self, player=None):
"""获取连续成功防守记录"""
records = self.defense_records if not player else \
[r for r in self.defense_records if r['player'] == player]
max_streak = 0
current_streak = 0
for record in records:
if record['success']:
current_streak += 1
max_streak = max(max_streak, current_streak)
else:
current_streak = 0
return max_streak
# 主程序
if __name__ == "__main__":
print("=== 基本版关门防守统计 ===")
game_stats = simulate_basketball_game()
game_stats.show_all_records()
# 查看特定球员统计
print("\n=== 张伟个人统计 ===")
zhang_stats = game_stats.get_player_stats("张伟")
if zhang_stats:
for key, value in zhang_stats.items():
print(f"{key}: {value}")
# 使用高级版
print("\n\n=== 高级版关门防守统计 ===")
advanced = AdvancedCloseOutDefense()
# 模拟更多带时间的数据
game_data = [
# (球员, 成功, 节次, 分钟, 描述)
("张伟", True, 1, 3, "成功干扰投篮"),
("李强", False, 1, 5, "被突破"),
("王明", True, 1, 8, "造成对手失误"),
("张伟", True, 2, 2, "迫使传球失误"),
("李强", True, 2, 6, "成功封盖"),
("王明", False, 2, 9, "对手三分命中"),
("张伟", True, 3, 1, "抢断成功"),
("李强", True, 3, 4, "逼迫走步违例"),
]
for data in game_data:
advanced.record_defense_with_time(*data)
# 显示结果
advanced.show_all_records()
advanced.analyze_by_quarter()
print(f"\n张伟最长连续成功防守: {advanced.get_hot_streak('张伟')}次")
运行结果示例
=== 基本版关门防守统计 ===
==================================================
关门防守记录统计
==================================================
# 1 | 球员: 张伟 | ✓ 成功 | 成功迫使对手传球失误
# 2 | 球员: 李强 | ✓ 成功 | 逼迫对手仓促出手不中
# 3 | 球员: 王明 | ✗ 失败 | 被对手突破得分
... (省略中间数据)
#15 | 球员: 王明 | ✗ 失败 | 被对手传球助攻
==================================================
总防守次数: 15
成功次数: 10
失败次数: 5
成功率: 66.7%
==================================================
=== 张伟个人统计 ===
player: 张伟
total: 4
success: 3
fail: 1
rate: 75.0%
主要功能特点
- 基础统计:记录总次数、成功/失败次数、成功率
- 个人统计:查看特定球员的防守数据
- 详细记录:保存每次防守的具体情况
- 高级分析:按节次、时间段分析防守效果
- 连胜统计:计算连续成功防守的次数
这个案例可以应用在篮球比赛分析、训练评估等场景中。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播