python案例统计转身过人次数谁多?

wen python案例 5

本文目录导读:

python案例统计转身过人次数谁多?

  1. 基础版本:手动输入数据
  2. 进阶版本:随机数据生成与可视化
  3. 简洁版本:简单统计比较
  4. 使用方法

我来帮你写一个统计转身过人次数的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()

使用方法

  1. 手动输入模式:运行程序,输入"球员A 转身"或"球员B 过人"等命令
  2. 模拟模式:自动生成随机比赛数据并可视化
  3. 简单比较:使用预置数据进行快速比较

这些代码都包含了完整的统计、比较和输出功能,你可以根据实际需求选择使用。

抱歉,评论功能暂时关闭!