大佬教程收集整理的这篇文章主要介绍了Python:如何用 while 循环替换 for 循环? (无负值),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在定义炮弹函数的这条轨迹时,我希望循环在 y 的负值处停止。即炮弹一旦落地就不应继续移动。
我尝试使用 while >= 0,但 y 点是一个列表,我不知道该怎么做。 有什么帮助吗?
def trajectory(v_0=1,mass=1,theta=np.pi/2,t_0=0,t_f=2,n=100):
"""
:param v_0: initial veLocity,in meters per second
:param mass: Mass of the object in kg,set to 1kg as default
:param theta: Angle of the trajectory's shot,set to pi/2 as default
:param t_0: initial time,in seconds,default as 0
:param t_f: final time,default as 2
:param n: Number of points
:return: array with x and y coordinates of the trajectory
"""
h = (t_f - t_0)/n
t_points = np.arange(t_0,t_f,h)
x_points = []
y_points = []
r = np.array([0,v_0 * np.cos(theta),v_0 * np.sin(theta)],float)
for t in t_points:
x_points.append(r[0])
y_points.append(r[2])
k1 = h * F(r,t,mass)
k2 = h * F(r + 0.5 * k1,t + 0.5 * h,mass)
k3 = h * F(r + 0.5 * k2,mass)
k4 = h * F(r + k3,t + h,mass)
r += (k1 + 2 * k2 + 2 * k3 + k4) / 6
return np.array(x_points,float),np.array(y_points,float)
在绘制轨迹图时,我得到一个包含 y 负值的图,我希望首先防止计算该值,以免影响代码的性能。
您不需要转换为 while
循环。我能想到的最简单的方法是在 for
循环中放置一个退出条件:
for t in t_points:
if r[2] < 0:
break
...
当 y
位置小于零时,这将退出循环。您可以考虑使条件 r[2] < 0 and r[3] < 0
,以便如果您有一个从地下开始的条件,它会在下降并与地面碰撞之前向上移动。
如果你真的很喜欢 while
循环,你可以创建一个迭代器变量,然后用它来迭代 t_points
:
iterator_variable = 0
while r[2] < 0 and iterator_variable < len(t_points):
t = t_points[iterator_variable]
...
return np.array(x_points,float),np.array(y_points,float)
虽然我不知道您的函数 F()
是做什么的,但我认为不定义 n
、h
或 t_points
可能更容易。您将从起点开始,然后计算每个下一个点,直到您落地为止。此策略非常适合 while
循环。
while r[2] > 0:
//calculate next position and velocity
//add that position to the list of x_points and y_points
代替 n
作为函数的输入,它决定了您计算的点数,您可以将其设为点密度度量,或最大点数。
以上是大佬教程为你收集整理的Python:如何用 while 循环替换 for 循环? (无负值)全部内容,希望文章能够帮你解决Python:如何用 while 循环替换 for 循环? (无负值)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。