本文目录导读:

我来帮你写一个统计转身过人次数的Python案例,这通常用于篮球、足球等运动数据分析。
基础版本:手动输入数据
def count_turnover_moves():
"""统计球员转身过人次数"""
# 创建球员数据字典
players = {
'球员A': {'转身次数': 0, '过人次数': 0},
'球员B': {'转身次数': 0, '过人次数': 0}
}
print("=== 转身过人次数统计系统 ===")
print("请输入比赛数据(输入'结束'退出)")
print("格式:球员名 操作(转身/过人)")
print("示例:球员A 转身")
print("-" * 40)
while True:
data = input("请输入数据:").strip()
if data == '结束':
break
try:
parts = data.split()
if len(parts) != 2:
print("格式错误!请输入:球员名 操作")
continue
player_name, action = parts
if player_name not in players:
print("球员不存在,请重新输入")
continue
if action == '转身':
players[player_name]['转身次数'] += 1
elif action == '过人':
players[player_name]['过人次数'] += 1
else:
print("操作类型错误(应为'转身'或'过人')")
continue
print(f"已记录:{player_name} - {action}")
except Exception as e:
print(f"输入错误:{e}")
# 输出统计结果
print("\n" + "="*50)
print("统计结果:")
print("="*50)
for player, stats in players.items():
print(f"\n{player}:")
print(f" 转身次数:{stats['转身次数']}")
print(f" 过人次数:{stats['过人次数']}")
print(f" 总数:{stats['转身次数'] + stats['过人次数']}")
# 比较谁多
print("\n" + "="*50)
print("对比结果:")
p1_turns = players['球员A']['转身次数']
p2_turns = players['球员B']['转身次数']
p1_dribbles = players['球员A']['过人次数']
p2_dribbles = players['球员B']['过人次数']
print(f"转身次数对比:球员A({p1_turns}) vs 球员B({p2_turns})")
if p1_turns > p2_turns:
print("→ 球员A转身次数更多")
elif p1_turns < p2_turns:
print("→ 球员B转身次数更多")
else:
print("→ 转身次数相同")
print(f"过人次数对比:球员A({p1_dribbles}) vs 球员B({p2_dribbles})")
if p1_dribbles > p2_dribbles:
print("→ 球员A过人次数更多")
elif p1_dribbles < p2_dribbles:
print("→ 球员B过人次数更多")
else:
print("→ 过人次数相同")
# 运行程序
if __name__ == "__main__":
count_turnover_moves()
进阶版本:随机数据生成与可视化
import random
import matplotlib.pyplot as plt
from collections import defaultdict
class PlayerStats:
"""球员统计数据类"""
def __init__(self, name):
self.name = name
self.turns = 0
self.dribbles = 0
def add_turn(self):
self.turns += 1
def add_dribble(self):
self.dribbles += 1
def total_moves(self):
return self.turns + self.dribbles
def simulate_match():
"""模拟一场比赛数据"""
players = {
'球员A': PlayerStats('球员A'),
'球员B': PlayerStats('球员B')
}
# 模拟比赛时间(10分钟,每分钟随机产生操作)
print("\n模拟比赛数据生成中...")
for minute in range(1, 11):
# 每个球员在这一分钟可能产生1-3次操作
for player_name, player in players.items():
operations = random.randint(1, 3)
for _ in range(operations):
if random.random() < 0.4: # 40%概率是转身
player.add_turn()
else: # 60%概率是过人
player.add_dribble()
print(f"第{minute}分钟数据更新...")
return players
def visualize_stats(players):
"""可视化统计数据"""
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
names = list(players.keys())
turns = [players[name].turns for name in names]
dribbles = [players[name].dribbles for name in names]
totals = [players[name].total_moves() for name in names]
# 转身次数对比
ax1.bar(names, turns, color=['blue', 'red'])
ax1.set_title('转身次数对比')
ax1.set_ylabel('次数')
for i, v in enumerate(turns):
ax1.text(i, v + 0.5, str(v), ha='center')
# 过人次数对比
ax2.bar(names, dribbles, color=['green', 'orange'])
ax2.set_title('过人次数对比')
ax2.set_ylabel('次数')
for i, v in enumerate(dribbles):
ax2.text(i, v + 0.5, str(v), ha='center')
plt.tight_layout()
plt.show()
return fig
def analyze_and_compare(players):
"""分析和比较结果"""
print("\n" + "="*60)
print("比赛统计报告")
print("="*60)
# 详细统计
for name, player in players.items():
print(f"\n{player.name}:")
print(f" ├─ 转身次数: {player.turns}")
print(f" ├─ 过人次数: {player.dribbles}")
print(f" └─ 总操作: {player.total_moves()}")
print(f" 转身占比: {player.turns/player.total_moves()*100:.1f}%")
# 对比分析
print("\n" + "="*60)
player_names = list(players.keys())
p1, p2 = player_names[0], player_names[1]
# 转身对比
print(f"\n转身对比:")
if players[p1].turns > players[p2].turns:
print(f"🏆 {p1}转身更多({players[p1].turns} vs {players[p2].turns})")
elif players[p1].turns < players[p2].turns:
print(f"🏆 {p2}转身更多({players[p2].turns} vs {players[p1].turns})")
else:
print(f"🤝 转身次数相同({players[p1].turns})")
# 过人对比
print(f"\n过人对比:")
if players[p1].dribbles > players[p2].dribbles:
print(f"🏆 {p1}过人更多({players[p1].dribbles} vs {players[p2].dribbles})")
elif players[p1].dribbles < players[p2].dribbles:
print(f"🏆 {p2}过人更多({players[p2].dribbles} vs {players[p1].dribbles})")
else:
print(f"🤝 过人次数相同({players[p1].dribbles})")
# 综合评分
print("\n综合评分:")
for name, player in players.items():
score = player.turns * 1.5 + player.dribbles # 转身权重1.5
print(f"{name}: {score}分")
# 主程序
def main():
print("="*60)
print("🏀 转身过人次数统计系统 🏀")
print("="*60)
choice = input("\n选择模式:\n1. 手动输入数据\n2. 模拟比赛数据\n请选择(1/2):")
if choice == '1':
count_turnover_moves()
elif choice == '2':
players = simulate_match()
visualize_stats(players)
analyze_and_compare(players)
else:
print("无效选择!")
if __name__ == "__main__":
main()
简洁版本:简单统计比较
def simple_comparison():
"""简单版本:快速统计比较"""
# 使用字典存储数据
data = {
'球员A': {'转身': [], '过人': []},
'球员B': {'转身': [], '过人': []}
}
# 记录比赛事件(示例数据)
match_events = [
('球员A', '转身', 5), # 第5分钟
('球员B', '过人', 8),
('球员A', '过人', 12),
('球员B', '转身', 15),
('球员A', '转身', 20),
('球员A', '过人', 25),
('球员B', '过人', 30),
('球员B', '转身', 35),
('球员A', '转身', 38),
('球员B', '过人', 42),
]
# 统计数据
for player, action, minute in match_events:
data[player][action].append(minute)
# 输出结果
print("=== 比赛统计 ===")
for player in data:
turns = len(data[player]['转身'])
dribbles = len(data[player]['过人'])
print(f"{player}: 转身{turns}次, 过人{dribbles}次")
# 显示时间点
print(f" 转身时间点: {data[player]['转身']}")
print(f" 过人时间点: {data[player]['过人']}")
# 比较结果
p1_turns = len(data['球员A']['转身'])
p2_turns = len(data['球员B']['转身'])
print("\n=== 对比结果 ===")
if p1_turns > p2_turns:
print("球员A转身更多")
elif p2_turns > p1_turns:
print("球员B转身更多")
else:
print("转身次数相同")
# 运行
if __name__ == "__main__":
simple_comparison()
使用方法
- 手动输入模式:运行程序,输入"球员A 转身"或"球员B 过人"等命令
- 模拟模式:自动生成随机比赛数据并可视化
- 简单比较:使用预置数据进行快速比较
这些代码都包含了完整的统计、比较和输出功能,你可以根据实际需求选择使用。