【问题标题】:Time - Gravity Fall program时间 - 重力坠落计划
【发布时间】:2013-08-09 15:51:38
【问题描述】:

我正在尝试创建一个程序,该程序将计算从特定高度跌落到地面需要多长时间,并且它使用已知的二次公式。该程序似乎正在做我想做的事情,直到它到达第 7 行,在那里我认为存在一个涉及 sqrt 的数学问题。有人可以帮忙吗?

到目前为止,我想出了......

v = float(input())
lowerSum = 2*(-4.9)
upperSum1 = -4*(-4.9)
upperSum2 = (upperSum1)*(11000)
upperSum3 = (v)**2 - (upperSum2)
from math import sqrt
upperSum4 = (v) - sqrt(upperSum3)
t = (upperSum4) / (lowerSum)
print (t)

当我运行程序时,它指出存在数学域错误;我是编程新手,我不知道这意味着什么。

我正在尝试打印出 t 的值。

【问题讨论】:

标签: python python-3.x sum gravity quadratic


【解决方案1】:

你误读了formula (bottom of page)

具体来说,您在 v**2 之后应用了两次减号:

首先你在这里应用它(不正确,好像它是一个负号):

upperSum1 = -4*(-4.9)

然后你在这里再次应用它(正确地,作为减号)。

upperSum3 = (v)**2 - (upperSum2)

upperSum1 应该是:

upperSum1 = 4*(-4.9)

【讨论】:

    【解决方案2】:

    “数学域错误”告诉​​您,您已向 sqrt 函数传递了一个超出其“域”的值。 sqrt 函数的域是正数。在某些时候,upperSum3 变为负数,这使sqrt 相当不高兴,因此它会向您抛出错误。

    您可以通过添加 if 语句来更改代码在 upperSum3 小于 0 时执行的操作来解决此问题,例如:

    if upperSum3 < 0:
        #do something other than take the sqrt
    else:
        upperSum4 = (v) - sqrt(upperSum3)
    

    【讨论】:

    • sqrt 接受正实数,而不仅仅是整数。
    【解决方案3】:

    只是通过做数学来更深入地研究这个问题......

    v = float(input())
    lowerSum = -9.8
    upperSum1 = 19.6
    upperSum2 = 215600
    upperSum3 = (v)**2 - (215600)
    from math import sqrt
    upperSum4 = (v) - sqrt(upperSum3)
    t = (upperSum4) / (lowerSum)
    print (t)
    

    所以你必须让第 5 行中的 v 的平方大于 215600,这样等式才不会向 sqrt() 返回负数,这就是导致错误的原因。

    V 必须大于 465,upperSum3 才能为正数,并且通过运行各种数字,它实际上永远不会变为正数,因此您使用的方程式或设置本身肯定有问题。

    如果我自己不知道公式(我找不到),我无法判断代码的哪一部分实际上是错误的。

    【讨论】:

    【解决方案4】:
    import math
    v=float(input())
    t=float()
    Result1=float(v-(math.sqrt(float(v**2)-float(4*(-4.9))*(11000))))
    Result2=float(2*(-4.9))
    t=float(Result1/Result2)
    print(t)
    

    这行得通。但是,我是 python 新手,在将结果转换为整数时遇到了麻烦。所以....如果我对“float”的使用似乎过多,那是因为它是:-) 足足有半个小时,我试图在一条线上执行所有计算,但放弃了并将其分解。如果有人有更好的解决方案,可以在一行上执行计算,我会全力以赴。

    【讨论】:

    • 一行(得到v后):(v-math.sqrt(v**2+4*4.9*11000))/(2*-4.9)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多