本文目录导读:

我来帮你创建一个统计冲刺跑次数的Python程序,这个程序可以记录和分析不同运动员的冲刺跑数据。
简单版本(手动输入数据)
def count_sprints_manual():
"""手动输入数据统计冲刺跑次数"""
sprint_data = {}
print("=== 冲刺跑次数统计系统 ===")
print("请输入运动员姓名和冲刺次数(输入'结束'退出)")
while True:
name = input("请输入运动员姓名(或输入'结束'):")
if name == '结束':
break
try:
count = int(input(f"请输入{name}的冲刺次数:"))
sprint_data[name] = sprint_data.get(name, 0) + count
except ValueError:
print("请输入有效的数字!")
continue
if not sprint_data:
print("没有录入任何数据!")
return
print("\n=== 统计结果 ===")
for name, count in sprint_data.items():
print(f"{name}: {count}次")
# 找出最多的
max_name = max(sprint_data, key=sprint_data.get)
max_count = sprint_data[max_name]
print(f"\n🏆 冲刺跑次数最多的是:{max_name},共{max_count}次!")
# 运行简单版本
if __name__ == "__main__":
count_sprints_manual()
数据文件版本
import json
import os
from datetime import datetime
class SprintTracker:
def __init__(self, filename='sprint_data.json'):
self.filename = filename
self.data = self.load_data()
def load_data(self):
"""加载数据"""
if os.path.exists(self.filename):
with open(self.filename, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
def save_data(self):
"""保存数据"""
with open(self.filename, 'w', encoding='utf-8') as f:
json.dump(self.data, f, ensure_ascii=False, indent=2)
def add_sprint(self, name, count=1):
"""添加冲刺记录"""
today = datetime.now().strftime("%Y-%m-%d")
if name not in self.data:
self.data[name] = {'total': 0, 'daily': {}}
self.data[name]['total'] += count
self.data[name]['daily'][today] = self.data[name]['daily'].get(today, 0) + count
self.save_data()
print(f"✅ {name} 今日已累计 {self.data[name]['total']} 次冲刺")
def get_stats(self):
"""获取统计信息"""
if not self.data:
return "暂无数据"
stats = []
for name, info in self.data.items():
stats.append((name, info['total']))
stats.sort(key=lambda x: x[1], reverse=True)
result = "=== 冲刺跑排行榜 ===\n"
for i, (name, count) in enumerate(stats, 1):
medal = ['🥇', '🥈', '🥉'][i-1] if i <= 3 else f"{i}."
result += f"{medal} {name}: {count}次\n"
return result
def main_file_version():
"""文件版本的主程序"""
tracker = SprintTracker()
while True:
print("\n" + "="*30)
print("冲刺跑统计系统 - 文件版")
print("1. 添加冲刺记录")
print("2. 查看排行榜")
print("3. 查看个人详情")
print("4. 清除数据")
print("5. 退出")
print("="*30)
choice = input("请选择操作:")
if choice == '1':
name = input("请输入姓名:")
try:
count = int(input("请输入冲刺次数(默认1):") or "1")
tracker.add_sprint(name, count)
except ValueError:
print("⚠️ 请输入有效的数字!")
elif choice == '2':
print(tracker.get_stats())
elif choice == '3':
name = input("请输入姓名:")
if name in tracker.data:
print(f"\n{name}的总冲刺次数:{tracker.data[name]['total']}")
print("每日记录:")
for date, count in tracker.data[name]['daily'].items():
print(f" {date}: {count}次")
else:
print(f"❌ 没有找到{name}的记录")
elif choice == '4':
confirm = input("确定要清除所有数据吗?(y/n):")
if confirm.lower() == 'y':
tracker.data = {}
tracker.save_data()
print("✅ 数据已清除")
elif choice == '5':
print("👋 再见!")
break
else:
print("⚠️ 无效的选择!")
if __name__ == "__main__":
main_file_version()
图形界面版本(Tkinter)
import tkinter as tk
from tkinter import ttk, messagebox
from collections import defaultdict
class SprintGUI:
def __init__(self):
self.root = tk.Tk()
self.root.title("🏃 冲刺跑统计系统")
self.root.geometry("500x400")
# 数据存储
self.sprint_data = defaultdict(int)
# 创建界面
self.create_widgets()
self.root.mainloop()
def create_widgets(self):
# 标题
title = tk.Label(self.root, text="🏃 冲刺跑记录系统",
font=("Arial", 20, "bold"))
title.pack(pady=20)
# 输入框区域
input_frame = tk.Frame(self.root)
input_frame.pack(pady=10)
tk.Label(input_frame, text="姓名:", font=("Arial", 12)).grid(row=0, column=0)
self.name_entry = tk.Entry(input_frame, font=("Arial", 12), width=15)
self.name_entry.grid(row=0, column=1, padx=5)
tk.Label(input_frame, text="次数:", font=("Arial", 12)).grid(row=0, column=2)
self.count_entry = tk.Entry(input_frame, font=("Arial", 12), width=8)
self.count_entry.grid(row=0, column=3, padx=5)
# 按钮
button_frame = tk.Frame(self.root)
button_frame.pack(pady=15)
tk.Button(button_frame, text="➕ 添加记录", command=self.add_record,
font=("Arial", 12), bg="#4CAF50", fg="white").grid(row=0, column=0, padx=5)
tk.Button(button_frame, text="📊 显示统计", command=self.show_stats,
font=("Arial", 12), bg="#2196F3", fg="white").grid(row=0, column=1, padx=5)
tk.Button(button_frame, text="🗑️ 清空数据", command=self.clear_data,
font=("Arial", 12), bg="#f44336", fg="white").grid(row=0, column=2, padx=5)
# 结果显示区域
self.result_text = tk.Text(self.root, height=12, width=55, font=("Arial", 11))
self.result_text.pack(pady=10, padx=20)
def add_record(self):
name = self.name_entry.get().strip()
if not name:
messagebox.showwarning("警告", "请输入姓名!")
return
try:
count = int(self.count_entry.get() or "1")
if count <= 0:
raise ValueError
except ValueError:
messagebox.showwarning("警告", "请输入有效的正整数次数!")
return
self.sprint_data[name] += count
messagebox.showinfo("成功", f"✅ {name} 已记录 {count} 次冲刺")
# 清空输入
self.name_entry.delete(0, tk.END)
self.count_entry.delete(0, tk.END)
def show_stats(self):
if not self.sprint_data:
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "暂无数据,请先添加记录!")
return
# 排序
sorted_data = sorted(self.sprint_data.items(),
key=lambda x: x[1], reverse=True)
result = "=== 冲刺跑排行榜 ===\n\n"
for i, (name, count) in enumerate(sorted_data, 1):
medal = ['🥇', '🥈', '🥉'][i-1] if i <= 3 else f"{i}."
result += f"{medal} {name}: {count}次\n"
# 找出最多者
max_name, max_count = sorted_data[0]
result += f"\n🏆 冠军:{max_name}({max_count}次)"
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, result)
def clear_data(self):
if messagebox.askyesno("确认", "确定要清空所有数据吗?"):
self.sprint_data.clear()
self.result_text.delete(1.0, tk.END)
messagebox.showinfo("成功", "数据已清空!")
if __name__ == "__main__":
SprintGUI()
使用说明
- 简单版本:直接运行,手动输入数据
- 文件版本:数据会保存到JSON文件中,支持持久化存储
- GUI版本:带图形界面,适合非技术用户
示例运行效果
=== 冲刺跑排行榜 ===
🥇 张三: 15次
🥈 李四: 12次
🥉 王五: 8次
4. 赵六: 5次
选择哪个版本取决于你的需求:
- 快速使用选方案一
- 需要保存数据选方案二
- 想要图形界面选方案三
需要我帮你定制其他功能吗?比如按日期统计、导出Excel等。