多线输出输入 while 循环

Multiline output in while loop

提问人:M.J. 提问时间:11/12/2023 最后编辑:M.J. 更新时间:11/12/2023 访问量:50

问:

我的任务是编写一个函数来规划跟踪运行。我必须添加一个 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 米的距离内实现所需的输出。先谢谢你。

python-3.x 循环 while-loop 多行字符串

评论

0赞 Justinas 11/12/2023
它是一种什么样的语言?
0赞 knittl 11/12/2023
@Justinas看起来像python(但没有标签,所以这只是一个有根据的猜测)
0赞 knittl 11/12/2023
目前尚不清楚您当前的输出和预期/期望的输出是什么。函数的哪个输入生成错误的输出?
0赞 knittl 11/12/2023
为什么要写一些令人费解的东西,而不是一个简单的?(1/(LAP_DISTANCE)*a_distance)a_distance/LAP_DISTANCE
0赞 M.J. 11/12/2023
对不起,伙计们,我是 Python 和这个论坛的新手,我用 Python 主题标签编辑了这篇文章,并将所需和获得的输出放在那里。

答:

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 + 1lap

下一个总数将是 或 。您应该构建累积总和或乘以得到总数,但不能同时进行。为了避免超过距离,可以使用简单的条件或。total = total + LAP_DISTANCEtotal = count * LAP_DISTANCEmath.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