本文目录导读:

我来帮你写一个统计“关门防守成功”次数的实用脚本,这里我理解“关门防守”(Closeout Defense)通常指:当进攻球员突破时,防守球员提前站到突破路线上(制造进攻犯规或迫使对方停球/失误)的防守动作。
由于你的需求比较泛,我提供一个通用且可配置的Python脚本,你可以根据自己记录数据的方式(手动输入或CSV文件)来统计次数。
交互式手动输入(最简单,适合现场记录)
这个脚本会循环询问每次防守回合,你只需输入 Y(成功关门)或 N(失败),最后自动结算。
# -*- coding: utf-8 -*-
"""
统计"关门防守"成功次数脚本
使用方式:运行后,根据提示输入每次防守的结果。
输入 y 或 Y 表示成功关门,输入 n 或 N 表示失败,输入 q 退出并显示统计。
"""
def main():
total_attempts = 0 # 总尝试关门次数
successful_closeouts = 0 # 成功关门并防住对手的次数
print("=" * 40)
print(" 关门防守(Closeout)统计器")
print("=" * 40)
print("指令说明:")
print(" y / Y = 关门成功(迫使对手停球/失误/进攻犯规)")
print(" n / N = 关门失败(被对手突破)")
print(" q / Q = 退出并查看统计结果")
print("-" * 40)
while True:
try:
user_input = input("本次防守结果 (y/n/q): ").strip().lower()
except (EOFError, KeyboardInterrupt):
print("\n检测到退出,正在生成报表...")
break
if user_input == 'q':
break
elif user_input == 'y':
total_attempts += 1
successful_closeouts += 1
print(f" ✅ 记录成功(第 {total_attempts} 次尝试)")
elif user_input == 'n':
total_attempts += 1
print(f" ❌ 记录失败(第 {total_attempts} 次尝试)")
else:
print(" ⚠️ 输入无效,请输入 y, n 或 q")
continue
# 输出统计报表
print("\n" + "=" * 40)
print(" 📊 比赛统计报表")
print("=" * 40)
print(f" 总关门尝试次数: {total_attempts} 次")
print(f" 成功关门次数: {successful_closeouts} 次")
print(f" 失败次数: {total_attempts - successful_closeouts} 次")
if total_attempts > 0:
success_rate = (successful_closeouts / total_attempts) * 100
print(f" 关门成功率: {success_rate:.1f}%")
else:
print(" 关门成功率: 暂无数据")
print("=" * 40)
if __name__ == "__main__":
main()
批量处理CSV文件(适合比赛录像后复盘)
如果你已经有一份包含每次防守记录的CSV文件(defense_log.csv),脚本会直接读取并计算。
CSV文件格式示例(第一行是表头):
时间,对手球员,是否关门成功(1/0) 第一节3分40秒,球员A,1 第一节2分10秒,球员B,0 第二节1分30秒,球员A,1
Python批量统计脚本:
import csv
def analyze_closeout(csv_file_path):
"""
从CSV文件中统计关门防守成功的次数
期望CSV有一列名为'是否关门成功(1/0)',值为1(成功)或0(失败)
"""
successful = 0
failed = 0
total = 0
try:
with open(csv_file_path, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file) # 使用字典读取器,方便通过列名访问
for row in reader:
# 尝试获取成功列(兼容不同表头写法)
result_value = row.get('是否关门成功(1/0)') or row.get('是否成功') or row.get('result')
if result_value is None:
print("⚠️ 未找到包含成功状态的列,请检查列名")
return
total += 1
try:
# 如果是数字 1/0 或者是 'Y'/'N' 字符
if str(result_value).strip().lower() in ['1', 'y', 'true', '成功']:
successful += 1
else:
failed += 1
except:
print(f"⚠️ 无法解析第 {total} 行数据: {result_value}")
except FileNotFoundError:
print(f"❌ 未找到文件: {csv_file_path}")
return
# 输出结果
print("=" * 40)
print(" 📊 批量统计报表")
print("=" * 40)
print(f" 分析文件: {csv_file_path}")
print(f" 总防守回合: {total} 次")
print(f" 关门成功: {successful} 次")
print(f" 关门失败: {failed} 次")
if total > 0:
print(f" 成功率: {successful / total * 100:.1f}%")
print("=" * 40)
if __name__ == "__main__":
# 使用示例:请将文件路径换成你的实际路径
file_path = "defense_log.csv" # 修改为你的CSV文件路径
analyze_closeout(file_path)
使用方法建议
- 如果看比赛实录:用方案一,旁边开着电脑,按
y或n记录。 - 如果有技战术统计表:用方案二,把Excel数据导出为CSV后一键分析。
自定义扩展(可选)
如果你需要更详细的统计(例如区分“制造进攻犯规”和“迫使对手停球”),可以将代码中的 successful_closeouts 拆分成两个变量,并增加一个输入选项(a 代表进攻犯规,b 代表迫使传球失误)。
提示:直接在终端运行脚本(python 脚本名.py)即可使用,如果你用的是Excel,建议先另存为CSV格式再交给方案二脚本处理。
关门防守”指的是其他特定场景(比如足球的“关门防守”或者游戏中的特定技能),请补充说明,我可以进一步调整代码逻辑!