一旦达到某个值,试图让循环停止,但它总是进行 1 步太多

正如标题所暗示的那样。查看代码块:


m = 100

a = -9.8

y0 = 30000

t0 = 0

v0 = 0

dt = 0.01


yAF = np.array([])

yAF = np.append(yAF, y0)


tAF = np.array([])

tAF = np.append(tAF, t0)


speedAF = np.array([])

speedAF = np.append(speedAF, v0)


def dy_dt(t):

    return a * t 


i = 0


while yAF[i] >= 0:

    i = i + 1

    tAF = np.append(tAF, tAF[i-1] + dt)

    speedAF = np.append(speedAF, dy_dt(tAF[i-1]))

    yAF = np.append(yAF, yAF[i-1] + dt * dy_dt(tAF[i-1]))

如您所见,我试图实现的条件是,当值 yAF[i] 低于零时,我不想将其添加到数组中,我希望循环结束。


代码当前仍然在停止之前将小于 0 的第一个值添加到数组中。有什么办法可以解决这个错误吗?


阿波罗的战车
浏览 225回答 2
2回答

温温酱

您颠倒了检查和附加的顺序。您应该首先检查,然后才附加:yAF, yAF, speedAF = [], [], []yAF_next, tAF_next, speedFA_next = y0, t0, v0while yAF_next >= 0:    yAF.append(yAF_next)    tAF.append(t0_next)    speedAF.append(speedFA_next)    tAF_next = tAF[-1] + dt    speedAF_next = dy_dt(tAF[-1])    yAF_next = yAF[-1] + dt * dy_dt(tAF[-1])有趣的是,您甚至不需要i变量。是的,使用列表,稍后将它们转换为数组。

明月笑刀无情

只需将 while 条件更改为而> 0不是为>= 0自己节省一个循环。此外,仅查看此代码,这将导致无限循环,因为您正在增加 i 但在 i 小于 0 时退出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python