【问题标题】:while loop never ends and I can't figure out how to stop itwhile 循环永远不会结束,我不知道如何停止它
【发布时间】:2020-11-22 03:06:33
【问题描述】:

基本上,我有一个分配,一切都很顺利,但是当我将某个值输入到循环中时,它永远不会停止,这与我输入的其他值不同,这很奇怪,我不知道如何处理它。 代码如下:

dim = int(input())
pos = int(input())
v = int(input())
vi = v
a = int(input())
posa = dim +1

print(pos)
while v != 0 or v*vi>0:
    if -dim < pos < dim or pos == dim or pos == -dim:
        pos += v
    elif pos > dim:
        pos = dim
        v -= a
        v = -v
    elif pos < -dim:
        pos = -dim
        v += a
        v = -v
    if -dim <= pos <= dim and not posa==pos:
        print(pos)
        posa = pos

在某些情况下,它是一个程序,旨在给出碰碰车的位置,dim 和 -dim 是汽车可以撞到然后反弹的墙壁,pos 是起始位置,v 是初始速度和 a 是一旦撞到墙上,该值的绝对值会降低多少。一旦没有更多的速度,它应该最终停止。 问题是如果输入是10,-3,6,2;它工作得很好,但如果它的输入是 10,-3,8,3;循环永远不会结束,我不知道为什么。

编辑:我不能使用 for、def、import、break、continue 和 lists 和类似的东西,基本上只是最基本的东西,比如 if 和 while。

【问题讨论】:

  • 您是否尝试过使用调试器?您是否尝试在循环开始时检查每个变量的值是多少?您是否尝试过手动跟踪逻辑?
  • 代码中的什么确保 v 永远等于 0?例如,如果 v==1 和 a==2,您可能会在 -1 和 1 之间来回调整 v,但永远不会达到零。

标签: python python-3.x


【解决方案1】:
    if -dim < pos < dim or pos == dim or pos == -dim:
        pos += v
    if -dim <= pos <= dim and not posa==pos:
        print(pos)
        posa = pos

那些块对v没有任何操作,它的值永远不会改变,永远循环。

【讨论】:

  • 重点是要更改pos,以便最终if -dim &lt; pos &lt; dim or pos == dim or pos == -dim 失败,允许elif pos &gt; dim:elif pos &lt; -dim:,因此v 可以更改。
猜你喜欢
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多