Python 为什么下面的代码给出的答案与分析答案相差甚远?

Python 为什么下面的代码给出的答案与分析答案相差甚远?,python,python-3.x,Python,Python 3.x,我正在学习Python,遇到了以下问题: 一个球从悬崖上垂直落下,高度为h。一段时间后球的位置为t 可以表示为: y(t)=v0*t− (在^2)/2+h时 式中,a是加速度(单位:m/s^2),v0是球的初始速度(单位:m/s)。 我们想知道t1带球通过一定高度h1的时间。换句话说, 我们希望求出t1的值,使得y(t1)=h1。球的位置是根据δt测量的 秒。 编写一个程序,找出球到达高度h1之前需要多长时间t1 使用while循环。这里,我们让h=10m,y1=5m,delta_t=0.01

我正在学习Python,遇到了以下问题:

一个球从悬崖上垂直落下,高度为h。一段时间后球的位置为t 可以表示为:

y(t)=v0*t− (在^2)/2+h时

式中,a是加速度(单位:m/s^2),v0是球的初始速度(单位:m/s)。 我们想知道t1带球通过一定高度h1的时间。换句话说, 我们希望求出t1的值,使得y(t1)=h1。球的位置是根据δt测量的 秒。 编写一个程序,找出球到达高度h1之前需要多长时间t1 使用while循环。这里,我们让h=10m,y1=5m,delta_t=0.01 s,v0=0m/s,a=9.81 m/s^2。”

我用Python编写了以下代码。问题是,当我在纸上解决问题时,我得到的答案与我预期的不同(对于y1=5m,t=1.01s,对于y1=3.6m,t=1.14s)。我不确定问题到底出在哪里。这是我的密码:

import math
import numpy as np

h = 10
y1 = float(input("Enter the height you want:"))
delta = 0.01
t = v_i = 0
a = 9.81

y = v_i * t - (a * pow(t, 2)/2) + h


while True:
    if y <= y1:
        print("The object will be at height",format(y, "0.3") ,y1, "around the time", format(t, ".3"), "s")
        break
    else:
        t += delta
        h = y
        v_i = v_i - a*t
        y = v_i * t - (a * pow(t, 2)/2) + h
导入数学
将numpy作为np导入
h=10
y1=浮动(输入(“输入所需高度:”)
δ=0.01
t=v_i=0
a=9.81
y=v_i*t-(a*pow(t,2)/2)+h
尽管如此:

如果y您似乎想要导出一个时间
t
,其距离与用户要求的距离相同

为此,您尝试创建一个循环,以猜测时间
t

犯了错误

这比你想象的要简单:

h=10
y1=浮动(输入(“输入所需高度:”)
δ=0.01
t=0
a=9.81
y=h#y从悬崖顶部开始
当y>y1时:
t+=delta#这里仍然可以猜测时间t
y=h-(a*pow(t,2)/2)#只需重新计算新时间t的y
打印(f“对象将在时间{t}前后处于高度{y1}”)

请注意,您的
v_i
可以始终假定为
0

给定的公式使用
v0
,无论您计算的是什么时间。但是您的代码使用的是
v_i
,它在每个时间步都会更新。@jasonharper v0(或v_i)必须在每次时间步前进时更新,因为它受到加速度的影响。而且,即使我消除了这个术语(v_I*t),它仍然不会给出预期的答案。所以基本上,我不必每次迭代都更新位置(h)?它工作得很好,但我不明白为什么我不应该每次迭代都更新位置(h)。公式给出了任何给定时间的确切高度
t
。它本身根本不是迭代的。您插入一个给定的
t
,然后收到结果
h
。但是,您所追求的是一个时间
t
,给定用户请求的
h
,这与此相反,因此您需要一个循环来尝试
t
的各种值(从
0.0
开始,然后递增
0.01
)查看哪个将为您提供所请求的
h