本文目录导读:

- 方案一:基于CSV数据的统计脚本(最通用)
- 方案二:纯模拟模拟器(无数据时演示)
- 方案三:基于Excel宏(VBA)的实用工具
- 方案四:针对篮球/足球等特定运动的高级统计(含权重)
- 为了让脚本更符合你的需求,请告诉我:
要制作一个显示“人盯人防守成功率”的实用脚本,首先需要明确你手头有什么数据,因为防守成功率是一个综合性指标,通常基于防守回合的结果来计算。
这里提供几种不同场景下的脚本方案,你可以根据自己的需求选择:
基于CSV数据的统计脚本(最通用)
适用场景:比赛录像分析师或业余球队,记录每次防守对位的结果。 算法:将“人被过了”、“成功断球”、“迫使失误”、“被造犯规”、“对方得分”等结果分类。
代码逻辑(Python):
import csv
from collections import defaultdict
def calculate_defense_rate(filename):
player_data = defaultdict(lambda: {"succeed": 0, "fail": 0})
with open(filename, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
player = row['player']
result = row['result'] # 假设只有成功或失败两种录入
# 关键:定义什么样的结果算作“成功防守”
if result in ['抢断', '逼迫失误', '投篮不中', '盖帽']:
player_data[player]["succeed"] += 1
elif result in ['被打进', '犯规', '过人成功']:
player_data[player]["fail"] += 1
else:
# 忽略“无对抗回合”等中性数据
continue
# 打印结果
for player, stats in player_data.items():
total = stats["succeed"] + stats["fail"]
if total > 0:
rate = stats["succeed"] / total * 100
print(f"{player}: 成功率 {rate:.1f}% (成功{stats['succeed']}次/失败{stats['fail']}次)")
else:
print(f"{player}: 暂无有效数据")
纯模拟模拟器(无数据时演示)
适用场景:如果你现在没有数据,只是想看脚本效果,或者教学演示。
// JavaScript 控制台版本(浏览器按F12粘贴运行即可)
function simulateGame() {
const teamA = ['小张', '小李', '小王', '小赵', '小钱'];
const teamB = ['防守者A', '防守者B', '防守者C', '防守者D', '防守者E'];
// 模拟每次进攻,防守者随机成功或失败
const results = {};
for (let round = 1; round <= 20; round++) { // 模拟20回合
const defender = teamB[Math.floor(Math.random() * teamB.length)];
const success = Math.random() > 0.45; // 假设基础成功率55%
if (!results[defender]) {
results[defender] = { success: 0, total: 0 };
}
results[defender].total++;
if (success) results[defender].success++;
}
// 输出排名表
console.log("=== 人盯人防守成功率排名 ===");
Object.entries(results)
.sort((a, b) => (b[1].success / b[1].total) - (a[1].success / a[1].total))
.forEach(([name, data]) => {
const rate = (data.success / data.total * 100).toFixed(1);
console.log(`${name}: ${rate}% (${data.success}/${data.total})`);
});
}
simulateGame();
基于Excel宏(VBA)的实用工具
如果你习惯用Excel记录,可以做成一个点击按钮就出结果的表格。
在Excel中新建一个Sheet,列名为:球员、防守结果。
在“防守结果”列中,用下拉菜单输入“成功”或“失败”。
然后在VBA编辑器(Alt+F11)中插入代码:
Sub 显示防守成功率()
Dim ws As Worksheet
Dim lastRow As Long
Dim player As String
Dim result As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Set ws = ThisWorkbook.Sheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 循环读取数据
For i = 2 To lastRow
player = ws.Cells(i, 1).Value
result = ws.Cells(i, 2).Value
If Not dict.Exists(player) Then
dict.Add player, Array(0, 0) ' [成功数, 总次数]
End If
dict(player)(1) = dict(player)(1) + 1
If result = "成功" Then
dict(player)(0) = dict(player)(0) + 1
End If
Next i
' 输出到立即窗口
For Each p In dict.Keys
Debug.Print p & ": " & Format(dict(p)(0) / dict(p)(1) * 100, "0.0") & "%"
Next p
End Sub
针对篮球/足球等特定运动的高级统计(含权重)
如果常规的“成功/失败”太单一,可以引入加权分数体系。
评分公式:防守得分 = 抢断得分(2分) + 盖帽(3分) + 迫使失误(2分) - 失误失位( - 3分) - 犯规( - 1分)
然后计算成功率 = (防守得分 / 出场时间) × 100。
为了让脚本更符合你的需求,请告诉我:
- 你是在哪种场景下用?(业余球队记录?专业分析?游戏辅助?)
- 你手头的数据长什么样?(比如有没有录像统计表?有没有现成的技术统计Excel?)
- 你希望“成功”的定义是什么?(是限制住对方命中率?还是必须完成断球?)
如果你能提供几条示例数据,我可以直接帮你写一个精准匹配你数据的脚本。 回复格式示例:
防守者:张三, 进攻者:李四, 结果:投篮不中
防守者:王五, 进攻者:赵六, 结果:过人成功