为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿波罗的战车 2021-10-12 10:24:08
正如标题所暗示的那样。查看代码块:m = 100a = -9.8y0 = 30000t0 = 0v0 = 0dt = 0.01yAF = 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 = 0while 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 的第一个值添加到数组中。有什么办法可以解决这个错误吗?
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您颠倒了检查和附加的顺序。您应该首先检查,然后才附加:


yAF, yAF, speedAF = [], [], []

yAF_next, tAF_next, speedFA_next = y0, t0, v0


while 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变量。是的,使用列表,稍后将它们转换为数组。


查看完整回答
反对 回复 2021-10-12
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

只需将 while 条件更改为而> 0不是为>= 0自己节省一个循环。

此外,仅查看此代码,这将导致无限循环,因为您正在增加 i 但在 i 小于 0 时退出。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信