繁体   English   中英

For循环中的嵌套If循环不起作用(Python)

[英]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

[更新]

根据您更新的代码,上面的答案是正确的。 这是正在发生的事情:

  1. totaltime估算为1746。
  2. 您的range上限是totaltime / 1000 在Python中将两个整数相除时,结果是integer ,它是通过截断结果浮点数而创建的。 所以1746 / 1000在Python中是1
  3. 因此,您的范围是1到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM