[英]Nested If Loop in For loop does not work (Python)
我有以下循环似乎无法正常工作,我不知道为什么。 首先是我的变量:
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(“ ...”)时,正在打印。
有人可以帮我弄这个吗? 谢谢!
最有可能的是, totaltime
的值使得永远不会执行for
循环。 您可以通过将print
语句添加为for
循环中的第一条语句来for
。
[更新]
根据您更新的代码,上面的答案是正确的。 这是正在发生的事情:
totaltime
估算为1746。 range
上限是totaltime / 1000
。 在Python中将两个整数相除时,结果是integer ,它是通过截断结果浮点数而创建的。 所以1746 / 1000
在Python中是1
。 for
循环。 您可以通过使表达式中的数字之一成为浮点数来避免整数截断问题(即,写1000.0
而不是1000
,但这没有帮助,因为range
需要整数参数。
您的第一个问题是,如果totaltime
为1746,则(totaltime +1) //1000)
为1。因此,您要遍历range(1, 1)
,这意味着您根本就没有遍历。
您的第二个问题是秤的距离很远,可能是因为您在某处弄了一个*
和/
混在一起。 每个人的动作都如此缓慢,以至于乔遇到吉尔之前要采取许多荒谬的步骤。
但是,即使您忽略自己的totaltime
并添加了大量步骤,但它们都没有遇到过这只狗。 他们并没有连续移动,而是离散地移动。 因此,乔最终在两步之间越过了狗的位置。
尝试添加print
呼叫以查看每个步骤的所有三个位置,您将看到所有这些问题。
即使你调整了号码,这样的人应该满足的狗正好在其中一个步骤,它仍可能会失败。 您正在使用浮动。 大多数实数不能完全表示为浮点数,因此在浮点数数学中,应该在理想数学中均得出900.0的两种不同计算的结果可能会刚好超过900,而恰好小于900。 您可以使用math.isclose
代替==
来解决此问题。 但是无论如何,您都需要解决上一个问题,而这样做将解决这个问题。
那么,在解决前两个问题的计算之后,如何解决后两个问题呢? 您需要以适当的方式使用<=
和>=
而不是==
。 这可能意味着跟踪循环中最后一次的结果。 如果Joe <现在狗,但是Joe>前一步,则他们彼此交叉。 这就是您需要测试的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.