我对此完全陌生,所以请原谅我,如果我看起来比其他人知之甚少。
我试图创建一个程序,允许我使用二次方程结合数学模块来计算x。我正在考虑计算,所以我想我会尝试这个挑战。我和我的老师看着它,但问题是平方根。 平方根函数不会使平方根成为负数,所以我试图找到一种方法来反转数字,使其为正而不是负数,因此将平方根。
from math import *
import math
a=int(input("a = "))
b=int(input("b = "))
c=int(input("c = "))
def qe(a,b,c):
"Solves the quadratic for x"
print(a,"x^2+",b,"x+",c,"=0",sep='')
e=(b^2-sqrt(b-(4*a*c)))/(2*a)
print("x =",e)
return
这是现在代码的基础。还有一点额外的,但它只是测试找到问题。
任何评论肯定会受到赞赏。
另一方面,我考虑了另一个输入,当平方生根时,该输入将触发数字为sqrt' d小于0。这是一个可行的替代方案吗?
答案 0 :(得分:1)
在解决实际问题之前,先做一些事情:
b^2
不等同于“b平方”;你想要b**2
。 当二次公式指示您取负数的平方根时,这意味着X没有实数值。反转该值可以防止错误发生,您将得到无意义的结果。根据用户的数学专业水平,您应该显示错误消息,例如“不存在真正的解决方案”,或者只是继续打印复杂的解决方案。
from math import sqrt
a=int(input("a = "))
b=int(input("b = "))
c=int(input("c = "))
def qe(a,b,c):
"Solves the quadratic for x"
print(a,"x^2+",b,"x+",c,"=0",sep='')
try:
first_root = (-b-sqrt(b**2-(4*a*c)))/(2*a)
second_root = (-b+sqrt(b**2-(4*a*c)))/(2*a)
print("x =",first_root)
print("x =",second_root)
except ValueError:
print("No real solutions exist")
qe(a,b,c)
cmath
模块允许您处理复数。特别是,它的sqrt
将适用于负数。
from cmath import sqrt
a=int(input("a = "))
b=int(input("b = "))
c=int(input("c = "))
def qe(a,b,c):
"Solves the quadratic for x"
print(a,"x^2+",b,"x+",c,"=0",sep='')
first_root = (-b-sqrt(b**2-(4*a*c)))/(2*a)
second_root = (-b+sqrt(b**2-(4*a*c)))/(2*a)
print("x =",first_root)
print("x =",second_root)
qe(a,b,c)
结果:
a = 1
b = 2
c = 3
1x^2+2x+3=0
No real solutions exist
或者
a = 1
b = 2
c = 3
1x^2+2x+3=0
x = (-1-1.4142135623730951j)
x = (-1+1.4142135623730951j)
对于具有实数解的方程,两种方法的结果都相同。 (尽管使用cmath
的那个格式不会很好)
a = 1
b = 1
c = 0
1x^2+1x+0=0
x = -1.0
x = 0.0
答案 1 :(得分:0)
你需要使用cmath
模块来计算负数sqrt,你也不能使用^
来获取权力!您可以使用math.pow(x, y)
功能或使用b*b
:
import cmath
a=int(input("a = "))
b=int(input("b = "))
c=int(input("c = "))
def qe(a,b,c):
"Solves the quadratic for x"
print(a,"x^2+",b,"x+",c,"=0")
e=(b*b-cmath.sqrt(b-(4*a*c)))/(2*a)
print("x =",e)
return
qe(a,b,c)
结果:
a = 2
b = 3
c = 4
(2, 'x^2+', 3, 'x+', 4, '=0')
('x =', (2.25-1.346291201783626j))
答案 2 :(得分:0)
您可以通过将其包装在abs()
中来确保该值为正,以获得绝对值。但是,正如其他人所评论的那样,会给出数学上不正确的结果。您可以报告“没有真正的根”或处理复杂的数字(请查看cmath
模块)。
此外,您的二次公式中存在错误 - 但我认为这是问题中的拼写错误(-b
和b**2
位于错误的位置)。
sqrt之前的运算符应为正或负 - 有两个根要找。
我会尝试类似的事情:
try:
temp = sqrt(b**2 - 4*a*c)
except ValueError:
print("No real roots")
else:
r1 = (-b+temp)/(2*a)
r2 = (-b-temp)/(2*a)
if r1==r2:
print("x=",r1)
else:
print("x=",r1," or ",r2)