我对python和编码一般都很陌生,它可能是一些非常明显的错误,但我无法弄清楚为什么这个while循环不会中断。
当y等于0时,我试图找到t的值。当手动更改t时,当t小于2.5时,y小于0.
不幸的是,我现在还没有其他任何我可以要求的人。谢谢!
(mapv mu/colour-distance-L2 colour-selections (drop 1 colour-selections))
答案 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.25
和2.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中。例如,当您将变量设置为等于未实例化的类时会发生这种情况,但此时理解这一点并非必要。