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

For循环中的嵌套If循环不起作用(Python),python,for-loop,if-statement,Python,For Loop,If Statement,我有下面的循环,它似乎不起作用,我不知道为什么。以下是我的变量: 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

我有下面的循环,它似乎不起作用,我不知道为什么。以下是我的变量:

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
循环中的第一条语句进行检查

[更新]

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

  • totaltime
    计算为1746
  • 您的
    范围
    上限是
    totaltime/1000
    。在Python中,当除以两个整数时,结果是整数,通过截断得到的浮点数创建。因此
    1746/1000
    在Python中是
    1
  • 因此,您的范围是1到1,并且从不执行
    for
    循环

  • 通过将表达式中的一个数字设置为浮点数,可以避免整数截断问题(也就是说,编写
    1000.0
    而不是
    1000
    ,但这没有帮助,因为
    range
    需要整数参数。

    最有可能的是,
    totaltime
    的值使得
    for
    循环永远不会执行。您可以通过添加
    print
    语句作为
    for
    循环

    [更新]

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

  • totaltime
    计算为1746
  • 您的
    范围
    上限是
    totaltime/1000
    。在Python中,当除以两个整数时,结果是整数,通过截断得到的浮点数创建。因此
    1746/1000
    在Python中是
    1
  • 因此,您的范围是1到1,并且从不执行
    for
    循环

  • 您可以通过将表达式中的一个数字设置为浮点数来避免整数截断问题(即写入
    1000.0
    而不是
    1000
    ,但这没有帮助,因为
    range
    需要整数参数。

    您的第一个问题是,如果
    totaltime
    是1746,那么
    (totaltime+1)//1000)
    是1。所以你在
    范围(1,1)
    上循环,这意味着你根本没有循环

    你的第二个问题是天平都离得太远了,可能是因为你把一个
    *
    /
    混在了一起。每个人都走得太慢了,以至于在乔遇到吉尔之前要走很多步

    但是,即使你忽略你的
    totaltime
    并添加大量的步骤,它们都不会遇到狗。它们不是连续移动,而是离散移动。因此乔最终在两个步骤之间穿过狗的位置

    尝试添加一个
    print
    调用以查看每个步骤中的所有三个位置,您将看到所有这些问题

    即使你调整了数字,让其中一个人正好在某个步骤遇到狗,它也可能会失败。你使用的是浮点数。大多数实数不能精确地表示为浮点数,因此两个不同的计算结果(在理想数学中都应该是900.0)可能会略高于900,略低于900900与float math。您可以使用
    math.isclose
    而不是
    =
    来解决此问题。但您仍然需要解决前面的问题,这样做将解决此问题


    那么,在你解决了前两个问题的计算之后,你如何解决最后两个问题呢?你需要以适当的方式使用
    =
    ,而不是
    =
    。这可能意味着跟踪上一次循环的结果。如果Joedog一步之前,他们已经互相交叉了。这就是为什么您需要测试。

    您的第一个问题是,如果
    totaltime
    是1746,那么
    (totaltime+1)//1000)
    是1。因此您在
    范围(1,1)
    上循环,这意味着您根本没有循环

    你的第二个问题是天平都离得太远了,可能是因为你把一个
    *
    /
    混在了一起。每个人都走得太慢了,以至于在乔遇到吉尔之前要走很多步

    但是,即使你忽略你的
    totaltime
    并添加大量的步骤,它们都不会遇到狗。它们不是连续移动,而是离散移动。因此乔最终在两个步骤之间穿过狗的位置

    尝试添加一个
    print
    调用以查看每个步骤中的所有三个位置,您将看到所有这些问题

    即使你调整了数字,让其中一个人正好在某个步骤遇到狗,它也可能会失败。你使用的是浮点数。大多数实数不能精确地表示为浮点数,因此两个不同的计算结果(在理想数学中都应该是900.0)可能会略高于900,略低于900900与float math。您可以使用
    math.isclose
    而不是
    =
    来解决此问题。但您仍然需要解决前面的问题,这样做将解决此问题


    那么,在你解决了前两个问题的计算之后,你如何解决最后两个问题呢?你需要以适当的方式使用
    =
    ,而不是
    =
    。这可能意味着跟踪上一次循环的结果。如果Joedog一步之前,他们已经互相交叉了。这就是为什么您需要测试。

    t的值是多少