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
for
循环通过将表达式中的一个数字设置为浮点数,可以避免整数截断问题(也就是说,编写
1000.0
而不是1000
,但这没有帮助,因为range
需要整数参数。最有可能的是,totaltime
的值使得for
循环永远不会执行。您可以通过添加print
语句作为for
循环
[更新]
根据您更新的代码,上面的答案是正确的。下面是发生的情况:
totaltime
计算为1746范围
上限是totaltime/1000
。在Python中,当除以两个整数时,结果是整数,通过截断得到的浮点数创建。因此1746/1000
在Python中是1
for
循环您可以通过将表达式中的一个数字设置为浮点数来避免整数截断问题(即写入
1000.0
而不是1000
,但这没有帮助,因为range
需要整数参数。您的第一个问题是,如果totaltime
是1746,那么(totaltime+1)//1000)
是1。所以你在范围(1,1)
上循环,这意味着你根本没有循环
你的第二个问题是天平都离得太远了,可能是因为你把一个*
和/
混在了一起。每个人都走得太慢了,以至于在乔遇到吉尔之前要走很多步
但是,即使你忽略你的totaltime
并添加大量的步骤,它们都不会遇到狗。它们不是连续移动,而是离散移动。因此乔最终在两个步骤之间穿过狗的位置
尝试添加一个print
调用以查看每个步骤中的所有三个位置,您将看到所有这些问题
即使你调整了数字,让其中一个人正好在某个步骤遇到狗,它也可能会失败。你使用的是浮点数。大多数实数不能精确地表示为浮点数,因此两个不同的计算结果(在理想数学中都应该是900.0)可能会略高于900,略低于900900与float math。您可以使用math.isclose
而不是=
来解决此问题。但您仍然需要解决前面的问题,这样做将解决此问题
那么,在你解决了前两个问题的计算之后,你如何解决最后两个问题呢?你需要以适当的方式使用
=
,而不是=
。这可能意味着跟踪上一次循环的结果。如果Joetotaltime
是1746,那么(totaltime+1)//1000)
是1。因此您在范围(1,1)
上循环,这意味着您根本没有循环
你的第二个问题是天平都离得太远了,可能是因为你把一个*
和/
混在了一起。每个人都走得太慢了,以至于在乔遇到吉尔之前要走很多步
但是,即使你忽略你的totaltime
并添加大量的步骤,它们都不会遇到狗。它们不是连续移动,而是离散移动。因此乔最终在两个步骤之间穿过狗的位置
尝试添加一个print
调用以查看每个步骤中的所有三个位置,您将看到所有这些问题
即使你调整了数字,让其中一个人正好在某个步骤遇到狗,它也可能会失败。你使用的是浮点数。大多数实数不能精确地表示为浮点数,因此两个不同的计算结果(在理想数学中都应该是900.0)可能会略高于900,略低于900900与float math。您可以使用math.isclose
而不是=
来解决此问题。但您仍然需要解决前面的问题,这样做将解决此问题
那么,在你解决了前两个问题的计算之后,你如何解决最后两个问题呢?你需要以适当的方式使用
=
,而不是=
。这可能意味着跟踪上一次循环的结果。如果Joe