我正在尝试创建一个程序,该程序可以计算出从特定高度下降时需要多长时间撞击地面并使用已知的二次公式。该程序似乎正在做我想做的事情,直到它到达第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的值。
答案 0 :(得分:1)
具体来说,您在v ** 2之后应用减号两次:
首先你在这里申请(错误地,好像是一个负号):
upperSum1 = -4*(-4.9)
然后在这里再次应用它(正确地,作为减号)。
upperSum3 = (v)**2 - (upperSum2)
upperSum1
应该是:
upperSum1 = 4*(-4.9)
答案 1 :(得分:0)
“数学域错误”告诉您已向sqrt
函数传递了一个超出其“域”的值。 sqrt
函数的域是正数。在某些时候,upperSum3变为负数,这使得sqrt
相当不高兴,所以它会引发错误。
如果upperSum3小于0,可以通过添加if语句来更改代码所执行的操作,例如:
if upperSum3 < 0:
#do something other than take the sqrt
else:
upperSum4 = (v) - sqrt(upperSum3)
答案 2 :(得分:0)
通过数学运算来深入研究问题...
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(),这就是造成错误的原因。
对于upperSum3,V必须大于465才能为正,并且通过运行各种数字,它实际上永远不会变为正数,因此您正在使用的等式或设置本身肯定存在问题。
我不知道自己的公式(我找不到),我无法分辨出哪部分代码实际上是错误的。
答案 3 :(得分:0)
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的新手,我的结果转换为整数有问题。所以....如果我对“浮动”的使用看起来过多,那是因为它是:-)好半个小时我试图在一条线上执行所有的计算,但放弃并将其分解。如果有人有一个更好的解决方案,可以在一行上执行计算,那我就全都听了。