如何调整嵌套for循环实现训练重量计算器的练习与重量对应输出?
解决方案
你的核心问题是循环结构错误——原代码在外层遍历训练最大值时,内层会把所有练习都打印一遍,导致每个重量组前都输出全部练习。要实现练习与对应训练最大值一一绑定的输出,需要同时遍历两个列表的对应元素,而非嵌套循环。
调整后的代码如下:
# 假设exercises和training_max已经是用户输入后的列表 for count, (exercise, tm) in enumerate(zip(exercises, training_max), 1): print(count, ') ', exercise, sep='') # 提前转换为浮点型,避免重复计算 tm_float = float(tm) print(f'Week 1 - {round(0.65 * tm_float, 2)}x5, {round(0.75 * tm_float, 2)}x5, {round(0.85 * tm_float, 2)}x5+') print(f'Week 2 - {round(0.70 * tm_float, 2)}x3, {round(0.80 * tm_float, 2)}x3, {round(0.90 * tm_float, 2)}x3+') print(f'Week 3 - {round(0.75 * tm_float, 2)}x5, {round(0.85 * tm_float, 2)}x3, {round(0.95 * tm_float, 2)}x1+') print(f'Week 4 - {round(0.40 * tm_float, 2)}x5, {round(0.50 * tm_float, 2)}x5, {round(0.60 * tm_float, 2)}x5') # 添加空行分隔不同练习,提升可读性 print()
关键调整说明:
- 用
zip(exercises, training_max)将两个列表的对应元素配对,确保每次循环拿到的是同一个练习及其对应的训练最大值。 - 通过
enumerate直接获取练习的序号,无需单独维护计数变量。 - 提前转换
tm为浮点型,减少重复计算;改用f-string简化打印语句(也可保留原写法,f-string更简洁直观)。
修改后的输出示例:
1) 卧推 Week 1 - 65.0x5, 75.0x5, 85.0x5+ Week 2 - 70.0x3, 80.0x3, 90.0x3+ Week 3 - 75.0x5, 85.0x3, 95.0x1+ Week 4 - 40.0x5, 50.0x5, 60.0x5 2) 硬拉 Week 1 - 130.0x5, 150.0x5, 170.0x5+ ...
内容的提问来源于stack exchange,提问作者Privlak
相关产品推荐
相关产品推荐

