本文目录导读:

我来帮你创建一个统计冲刺跑次数的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等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播