简单而循环不会破坏

时间:2015-09-05 12:18:38

标签: python while-loop

我对python和编码一般都很陌生,它可能是一些非常明显的错误,但我无法弄清楚为什么这个while循环不会中断。

当y等于0时,我试图找到t的值。当手动更改t时,当t小于2.5时,y小于0.

不幸的是,我现在还没有其他任何我可以要求的人。谢谢!

(mapv mu/colour-distance-L2 colour-selections (drop 1 colour-selections))

4 个答案:

答案 0 :(得分:1)

您需要在循环中包含等式,以便每次增加t时y的值都会改变。像这样:

while y > 0:
    y = y0 + vy0*t + 0.5*ay0*t**2
    print(t)
    t += 0.25
    if y < 0:
        break print(t)

答案 1 :(得分:1)

您可以按如下方式重构循环:

t = 0
y0 = 1.8
v0 = 15.0
theta0 = 0.785398163
vy0 = v0*sin(theta0)
ay0 = -9.81
y = 1       # dummy start value

while y >= 0:
    y = y0 + vy0*t + 0.5*ay0*t**2
    print("t={}, y={}".format(t,y))
    t += 0.25

这将在循环时显示所有值,因此您可以看到它正常工作:

t=0, y=1.8
t=0.25, y=4.145087928395659
t=0.5, y=5.8770508567913184
t=0.75, y=6.9958887851869775
t=1.0, y=7.501601713582638
t=1.25, y=7.394189641978297
t=1.5, y=6.673652570373955
t=1.75, y=5.339990498769618
t=2.0, y=3.3932034271652753
t=2.25, y=0.8332913555609345
t=2.5, y=-2.3397457160434065

通过添加一个虚拟起始值,它可以确保输入循环,并且无需在循环中添加break语句。

从这些结果中,您可以看到2.252.5之间存在某种解决方案。然后,您可以将起始值更改为t = 2.25并将增量更改为t += 0.01,您会看到更准确的估算值。

答案 2 :(得分:0)

while y > 0

此行循环将在y > 0时开始,但是在y循环期间您没有更改while的值,那么if y < 0此语句将如何执行。

计算y = 1.8之后的y = y0 + vy0*t + 0.5*ay0*t**2所以它是一个无限循环,因为y > 0始终是真的。

答案 3 :(得分:0)

从其他答案中可以看出,您需要将等式移到while循环内。

在编程赋值运算符时(此事:=)不会在变量之间创建关系。它(通常)只是简单地取右边的东西并将其放在左边的内容中。

考虑以下代码:

y = 0
x = y+1
y = 33
print x

它将打印出来1.

y+1评估为0+1,然后1

然后将x设置为整数值1。

更改y不会执行任何操作,因为x在特定时间设置为该表达式的特定值,而不是参考。

你可能已经注意到&#34;通常&#34;在我对赋值运算符的定义中,因为引用确实存在于编程中,特别是在python中。例如,当您将变量设置为等于未实例化的类时会发生这种情况,但此时理解这一点并非必要。