我有以下循环似乎不起作用,我无法弄清楚为什么。首先是我的变量:
Joe_speed = 1.25 ##speed in m/s --> 4.5km/h = ((4.5*1000)/60)/60) = 1.25m/s
Jill_speed = 1.9
dog_speed = 5
total_distance = 5500 ## distance in meter between Joe and Jille when starting
JJtotal_speed = Joe_speed + Jill_speed
total_time = total_distance / JJtotal_speed ##time in seconds until meeting
totaltime = int(total_time)
Jill_distance = total_time * Jill_speed
Joe_distance = total_time * Joe_speed
dog_start = total_distance
for i in range (1, (totaltime +1)*1000) : # multiplied by 1000 for milliseconds
Jill_position = 0 + ((Jill_speed/1000) * i)
Joe_position = total_distance - ((Joe_speed/1000) * i)
dog_position = dog_start - ((dog_speed/1000) * i)
if dog_position == Jill_position or dog_position == Joe_position:
print("Hi")
else:
print("Ciao")
我在for循环中的if循环似乎不起作用。不知何故,“Hi”和“Ciao”都没有被打印出来,即if循环没有发生?当我在for循环的末尾添加print(“...”)时(在底部的最左侧,正在打印。
有人可以帮我吗? 谢谢!
答案 0 :(得分:3)
最有可能的是,totaltime
的值使得for
循环永远不会被执行。您可以通过添加print
语句作为for
循环中的第一个语句进行检查。
<强> [更新] 强>
根据您更新的代码,上面的答案是正确的。这是正在发生的事情:
totaltime
评估为1746年。range
上限为totaltime / 1000
。在Python中分割两个整数时,结果是整数,由截断生成的浮点数创建。所以1746 / 1000
在Python中是1
。for
循环。您可以通过使表达式中的一个数字成为浮点数来避免整数截断问题(即,编写1000.0
而不是1000
,但这没有用,因为{{ 1}}需要整数参数。
答案 1 :(得分:1)
你的第一个问题是,如果totaltime
是1746,那么(totaltime +1) //1000)
就是1.所以你循环range(1, 1)
,这意味着你根本就没有循环。< / p>
你的第二个问题是尺度完全没有,可能是因为你有一个*
和/
混在一起。每个人都在移动得如此缓慢,以至于在乔遇见吉尔之前需要花费大量的步骤。
但即使你忽略了你的totaltime
并添加了大量的步骤,他们也都不会遇到你的狗。他们没有连续移动,他们正在离散地移动。所以乔最终会在两步之间穿过狗的位置。
尝试添加print
来调查每个步骤中的所有三个位置,您将看到所有这些问题。
即使您调整了数字,以便其中一个人应该完全按照其中一个步骤与狗会面,但它可能仍然失败。你正在使用花车。大多数实数不能完全表示为浮点数,因此两个不同的计算结果在理想数学中应该都达到900.0可能会超过900,而浮点数学则不到900。您可以使用math.isclose
代替==
来解决此问题。但无论如何你需要解决以前的问题,这样做可以解决这个问题。
那么,在解决前两个问题的计算后,你怎么解决最后两个问题呢?您需要以适当的方式使用<=
和>=
,而不是==
。这可能意味着要记录上次循环结果。如果Joe&lt;狗现在,但乔&gt;狗步前,他们互相交叉。这就是你需要测试的东西。