提问人:M.J. 提问时间:11/12/2023 最后编辑:M.J. 更新时间:11/12/2023 访问量:50
多线输出输入 while 循环
Multiline output in while loop
问:
我的任务是编写一个函数来规划跟踪运行。我必须添加一个 while 循环来查看输入参数 a_distance 是否被覆盖,并计算此距离内的圈数。我定义了以下(尚未完成的)函数:
import math # ceil
LAP_DISTANCE = 400
def plan_track_run(a_distance):
count = 0
total = 0
r_output = ""
while total < a_distance:
count = count + (1/(LAP_DISTANCE)*a_distance)
total = total + count * LAP_DISTANCE
r_output += f"lap #{math.ceil(count)} time ____ s in {count:.2f} x {LAP_DISTANCE}m ={total:.2f}m\n"
输出是一个模板,用于记下特定距离的时间。当a_distance小于单圈距离(400 米)时的输出可以在这里看到:
lap #1 time ____ s in 0.50 x 400m = 200.00m
不幸的是,当a_distance大于一圈距离(例如 1500 米)时,我无法达到预期的输出。每圈应该有一个多行输出,向上计数,直到总圈数和总距离显示在最后一行:
lap #1 time ____ s in 1.00 x 400m = 400.00m
lap #2 time ____ s in 2.00 x 400m = 800.00m
lap #3 time ____ s in 3.00 x 400m = 1200.00m
lap #4 time ____ s in 3.75 x 400m = 1500.00m
我的电流和 a_distance = 1500 的错误输出是:
lap #4 time ____ s in 3.75 x 400m = 1500.00m
请帮助我修改此代码,以便我也能在大于 400 米的距离内实现所需的输出。先谢谢你。
答:
0赞
knittl
11/12/2023
#1
LAP_DISTANCE = 400
a_distance = 1500
count = count + (1/(LAP_DISTANCE)*a_distance) # 0 + 1/400*1500 = 3.75
total = total + count * LAP_DISTANCE # 0 + 3.75 * 400 = 1500
你的第二个公式完全抵消了第一个公式,剩下的就是这个公式将终止循环。total == a_distance
为什么需要从远处计算计数?就够了,不是吗?老实说,我会重命名它以提供适当的上下文。count = count + 1
lap
下一个总数将是 或 。您应该构建累积总和或乘以得到总数,但不能同时进行。为了避免超过距离,可以使用简单的条件或。total = total + LAP_DISTANCE
total = count * LAP_DISTANCE
math.min
或者,先计算圈数 (),然后执行循环圈数:laps = math.ceil(a_distance/LAP_DISTANCE)
for lap in range(laps): ...
评论
0赞
M.J.
11/12/2023
计数是计算a_distance内的圈数。如果我假设 a_distance = 500 m,那么有 (1/400) * 500 = 1,25 圈。对于这样的示例,每个完成的圈都应该有一条线,如果没有完全完成的圈数,例如在这种情况下(1 圈,0.25 圈)。在每行中,{count:.2f} 和 {total:.2f} 应相加: 圈 #1 时间 ____ 秒 1.00 x 400 米 = 400.00 米 圈 #2 时间 ____ 秒 1.25 x 400 米 = 500.00 米
0赞
M.J.
11/12/2023
另一个例子:a_distance = 1200 m - 此距离由 (1200/400) = 3 圈组成,该距离是通过计数变量中的计算计算得出的。- 在这里,输出应该是:圈 #1 时间 ____ 秒 1.00 x 400m = 400.00m 圈 #2 时间 ____ 秒 2.00 x 400m = 800.00m 圈 #3 时间 ____ 秒 3.00 x 400m = 1200.00m 我只想修改代码,以便在a_distance > LAP_DISTANCE时获得此输出。
0赞
M.J.
11/13/2023
感谢您的输入。不幸的是,这是一个明确指出我必须使用 while 循环的赋值。使用 for 循环,它对我有用。
0赞
M.J.
11/13/2023
您对如何在 while 循环中使用 count 变量进行计算有什么建议吗?因此,a_distance中每 400 米,它就会增加 1 个计数。如果有一个不完整的圈数,例如1500圈,则添加其余部分。
0赞
M.J.
11/13/2023
迭代示例:例如,如果a_distance = 1400,则有 3,5 圈 (3 * 400 + 0,5 *400)。变量名称位于方括号 () 中。条件:而 0(覆盖的总距离)< 1200 (a_distance) True - 计数 = 0 + 1(覆盖第一圈) ->计数 = 1 - 总计 = 0 + 400(覆盖的第一圈距离) -> 总计 = 400 条件:而 400(到目前为止覆盖的总距离) < 1200 (a_distance) True - 计数 = 1 + 1(覆盖第 2 圈) - 计数 = 2 - 总计 = 400 + 400(覆盖第 2 圈距离)- 总计 = 800
评论
(1/(LAP_DISTANCE)*a_distance)
a_distance/LAP_DISTANCE