资讯动态

使用 Epley 公式估算 1RM:One-Rep Max Calculator 命令行版与 Tkinter GUI 版源码解析

发布时间:2026/9/19 22:36:13 来源:尧图企业网站定制
使用 Epley 公式估算 1RMOne-Rep Max Calculator 命令行版与 Tkinter GUI 版源码解析【免费下载链接】PythonMy Python Examples项目地址: https://gitcode.com/gh_mirrors/py/Python导读本文围绕仓库 nitkarshchourasia/to_sort/one_rep_max_calculator 目录下的 One-Rep Max Calculator 项目展开剖析其基于Epley 公式估算举重动作 1 次最大重复重量1RM的实现方式。项目提供两个版本命令行交互版 one_rep_max_calculator.py 与 Tkinter 图形界面版 one_rep_max_calculator_gui.py。读完本文你将掌握 1RM 估算的数学原理、Epley 公式的 Python 落地写法以及同一算法如何在纯终端与桌面 GUI 两种形态下复用。1RM 是什么为什么需要估算1RMOne-Repetition Maximum单次最大重复重量指某个举重动作中你以标准动作只能完成 1 次的极限重量。它是衡量力量水平最直观的指标常用于跟踪一段训练周期内的力量增长为后续训练计划设定负荷百分比如 70% 1RM、85% 1RM在不冒实际冲击极限重量风险的前提下评估力量。直接实测 1RM 存在受伤风险因此实践中普遍采用公式估算记录一组较轻的重量与可重复次数代入经验公式推算 1RM。这正是本项目两个程序的核心用途。Epley 公式一行的核心算法本项目两个版本均采用Epley 公式其原始出处为 README「References」一节所列文献Epley, B.Poundage chart. In: Boyd Epley Workout. Lincoln, NE: Body Enterprises, 1985. p. 23。Epley 公式的标准形式为1RM 重量 × (1 次数 × 0.0333)即1RM weight × reps × 0.0333 weight。其中 0.0333 是 1/30 的近似值含义是每多完成 1 次重复重量大约可上浮 3.33% 用于估算 1RM。在命令行版源码中该公式被封装为类方法one_rep_max_calculator.py#L20-L24def calculate_one_rep_max(self): Calculates the one-rep max based on the Epley formula. return (self.weight_lifted * self.reps_performed * 0.0333) self.weight_liftedGUI 版中的对应方法几乎一致one_rep_max_calculator_gui.py#L50-L54def calculate_1rm(self): Calculates and returns the estimated 1RM. weight int(self.weight_entry.get()) reps int(self.rep_entry.get()) return (weight * reps * 0.0333) weight两处实现完全等价体现了算法逻辑与界面形态解耦的良好实践核心公式只需一行CLI 与 GUI 各自负责输入采集与结果展示。命令行版本one_rep_max_calculator.py运行环境与启动方式按 README 说明命令行版只需Python 3即可运行无需任何第三方依赖。在仓库根目录执行python nitkarshchourasia/to_sort/one_rep_max_calculator/one_rep_max_calculator.py程序启动后会依次在终端提示输入全部为纯标准库交互。源码结构拆解整个程序围绕单个类OneRepMaxCalculator组织one_rep_max_calculator.py#L1-L31职责划分清晰方法职责对应源码行__init__将weight_lifted、reps_performed初始化为 0L6-L11get_user_input通过input()采集重量与次数L13-L18calculate_one_rep_max代入 Epley 公式计算并返回 1RML20-L24display_one_rep_max格式化输出估算结果L26-L31输入采集使用了int(input(...))强制转换为整数self.weight_lifted int(input(Enter the weight you lifted (in kg): )) self.reps_performed int(input(Enter the number of reps you performed: ))入口采用标准if __name__ __main__:守卫L44-L45调用main()依次执行创建实例 → 获取输入 → 计算并展示三步流程L34-L41def main(): calculator OneRepMaxCalculator() calculator.get_user_input() calculator.display_one_rep_max()这种初始化—输入—计算—展示的线性流程非常适合作为初学者理解面向对象封装的入门范例。一次完整的运行示例假设你卧推 60 kg 完成了 10 次运行效果如下Enter the weight you lifted (in kg): 60 Enter the number of reps you performed: 10 Your estimated one-rep max (1RM) is: 79.98 kg验算60 × 10 × 0.0333 60 79.98即按 Epley 公式该表现对应的 1RM 约为 80 kg。Tkinter 图形界面版one_rep_max_calculator_gui.py运行环境与启动方式GUI 版同样基于 Python 3额外依赖标准库中的Tkinter一般随 Python 官方安装包自带无需单独 pip 安装。启动命令python nitkarshchourasia/to_sort/one_rep_max_calculator/one_rep_max_calculator_gui.py界面布局与交互逻辑程序创建一个标题为 One-Rep Max Calculator、尺寸300x150的主窗口L31-L33自上而下依次放置L36-L48提示标签Enter the weight you lifted (in kg):重量输入框weight_entry提示标签Enter the number of reps you performed:次数输入框rep_entry计算按钮 Calculate绑定display_result回调结果标签与用于显示数值的result_value_label。控件全部采用pack()几何管理器按顺序纵向排布代码直观易读。交互回调机制用户点击按钮后Tkinter 触发display_resultL56-L59def display_result(self): Calculates the 1RM and updates result_value_label with it. one_rep_max self.calculate_1rm() self.result_value_label.config(textf{one_rep_max} kg)它从两个Entry控件取值、调用calculate_1rm()完成 Epley 公式计算再用config(text...)动态更新标签文本——这是 Tkinter 应用中读取输入 → 计算 → 更新界面最典型的回调写法。事件循环由run()方法启动L61-L63def run(self): Runs the Tkinter event loop. self.window.mainloop()入口同样使用if __name__ __main__:守卫L67-L69实例化后直接进入mainloop()。源码注释中的改进方向值得注意的是源码末尾保留了一组面向未来的 TODO 注释L71-L75包括放大字体、使用更好的文本格式、引入深色模式并支持深浅色主题切换。这些注释为读者指明了可以自行练习的扩展点是学习 Tkinter 样式定制与主题切换的良好素材。命令行版与 GUI 版对比维度命令行版GUI 版文件one_rep_max_calculator.pyone_rep_max_calculator_gui.py依赖仅 Python 3 标准库Python 3 Tkinter输入方式终端input()提示Entry输入框 按钮点击输出方式终端print()文本窗口内Label实时更新核心算法(w * r * 0.0333) w(w * r * 0.0333) w一致适用场景脚本化、管道、无头环境交互式桌面使用两个版本共享完全相同的 Epley 公式实现只是壳不同——这恰好演示了同一业务逻辑在 CLI 与 GUI 两种前端下的迁移方式。使用注意事项与已知局限结合源码实现以下几点需要使用者留意输入类型限制两版均用int()强制转换输入。从源码可以推断若输入非整数如小数或字母会直接抛出ValueError程序未做异常捕获与重试提示。单位约定程序提示重量单位为 kg但公式本身与单位无关换成磅lb结果同样成立只是输出标签仍写死为 kg跨单位使用时需自行换算。估算而非实测1RM 是经验公式推算值不同公式如 Brzycki、Lombardi 等结果略有差异Epley 在中等次数范围内约 1–10 次表现稳定。README 的 References 一节提供了该公式的学术出处与延伸阅读材料。重复次数上限次数越高估算误差通常越大建议将程序用于 10 次以内的高质量组记录。在仓库中的位置与延伸阅读本项目位于 nitkarshchourasia/to_sort/one_rep_max_calculator/ 目录归属于仓库中nitkarshchourasia作者的to_sort待整理子目录。仓库根目录 README.md 将其定位为减少人工负担的脚本集合与 Python 入门教学示例本项目正是其中面向健身场景的小型实用工具范例。若要进一步深入可以阅读 one_rep_max_calculator.py 全文体会面向对象封装的四个方法如何各司其职对照 one_rep_max_calculator_gui.py 全文学习 Tkinter 控件的创建、pack布局与command回调绑定结合源码末尾的注释尝试自行扩展深色模式、更大字体等 GUI 增强功能。【免费下载链接】PythonMy Python Examples项目地址: https://gitcode.com/gh_mirrors/py/Python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价