2015-09-05 100 views
-2

我完全不熟悉python和编码,它可能是一些可笑的明显错误,但我无法弄清楚为什么while循环不会中断。简单的while循环不会中断

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

不幸的是,我现在没有其他人可以问我。谢谢!

t = 0 
y0 = 1.8 
v0 = 15.0 
theta0 = 0.785398163 
vy0 = v0*sin(theta0) 
ay0 = -9.81 

y = y0 + vy0*t + 0.5*ay0*t**2 

while y > 0: 
    print(t) 
    t += 0.25 
    if y < 0: 
     break 
    print(t) 
+0

这个循环看起来完全错误。你不在循环中的任何地方修改y。一般来说,你并不需要y <0检查。 – Shikloshi

回答

0

while y > 0

在该行循环开始时y > 0,但你并没有在while循环改变y的值,则该语句将如何if y < 0执行。

而你的y = 1.8经过计算y = y0 + vy0*t + 0.5*ay0*t**2所以它是一个无限循环,因为y > 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

你可以调整你的循环如下:

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,您会看到一个稍微更准确的估计值。

+0

感谢这实际上正是我所需要的!只有1个问题,当y = 0时,我将如何找到确切的t值? – Tom

+0

这种解决问题的方式通常只是一种估计。我已经更新了解释,向您展示如何改进结果。继续下去,直到找到解决方案。显然它可以用Python使用数学来解决。希望这可以帮助。 –

0

正如你可以从其他答案看到的,你需要将你的方程移动到while循环中。

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

考虑以下代码:

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

它会打印出1

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

然后x被设置为1

整数值改变,因为X是在该特定时间设置为表达式的特定值,而不是一个参考坐标y不会做任何事情。

您可能已经注意到了我在赋值运算符定义中的“通常”,这是因为引用确实存在于编程中,特别是在python中。例如,当你设置一个变量等于一个没有实际意义的类时,会发生这种情况,但在这一点上,理解并不是必需的。