Python 如何判断判别式是否属于复杂平面(四边形)

Python 如何判断判别式是否属于复杂平面(四边形),python,Python,因此,我试图编写一个二次解算器,它将找到系数是实/复还是根是实/复的结果。到目前为止,我已经讨论了所有问题,除了系数是复数的时候。通过说discriminant=b**2-4*a*c我可以解释discriminant是>,0: root1=(-b+数学sqrt(判别式))/(2*a) root2=(-b-math.sqrt(判别式))/(2*a) print('有两个根:') 打印(root1) 打印(root2) elif判别式==0: root1=float(-b+math.sqrt(判别式

因此,我试图编写一个二次解算器,它将找到系数是实/复还是根是实/复的结果。到目前为止,我已经讨论了所有问题,除了系数是复数的时候。通过说
discriminant=b**2-4*a*c
我可以解释discriminant是>,
import math
import cmath

def quadSolver(a,b,c, tol = 1e-18):
    print('Equation: {0}x**2 + {1}x + {2}'.format(a,b,c))
    if a==b==0:
        if c!=0:
            print('Has no roots')
        else:
            print('Has an infinite number of roots')
        return

    if a==0:
        print('Has one root')
        print(-c/b)
        return

    discriminant = b**2 - 4 * a * c
    if isinstance(discriminant, complex):
        root1 = (-b + cmath.sqrt(discriminant))/(2*a)
        root2 = (-b - cmath.sqrt(discriminant))/(2*a)
        print('Has two roots:')
        print(root1)
        print(root2)
    if discriminant > 0:
        root1 = (-b + math.sqrt(discriminant))/ (2 * a)
        root2 = (-b - math.sqrt(discriminant))/ (2 * a)
        print('Has two roots:')
        print(root1)
        print(root2)
    elif discriminant == 0:
        root1 = float(-b + math.sqrt(discriminant))/ (2 * a)
        print('Has a double root:')
        print(root1)
    elif discriminant < 0:
        root1 = (-b + cmath.sqrt(discriminant))/ (2 * a)
        root2 = (-b - cmath.sqrt(discriminant))/ (2 * a)
        print('Has two complex roots:')
        print(root1)
        print(root2)
导入数学
导入cmath
def四解算器(a、b、c、tol=1e-18):
打印('公式:{0}x**2+{1}x+{2}'。格式(a、b、c))
如果a==b==0:
如果c=0:
打印('没有根')
其他:
print('有无限多个根')
回来
如果a==0:
print('有一个根')
打印(-c/b)
回来
判别式=b**2-4*a*c
如果存在(判别式、复合式):
root1=(-b+cmath.sqrt(判别式))/(2*a)
root2=(-b-cmath.sqrt(判别式))/(2*a)
print('有两个根:')
打印(root1)
打印(root2)
如果判别式>0:
root1=(-b+数学sqrt(判别式))/(2*a)
root2=(-b-math.sqrt(判别式))/(2*a)
print('有两个根:')
打印(root1)
打印(root2)
elif判别式==0:
root1=float(-b+math.sqrt(判别式))/(2*a)
print('具有双根:')
打印(root1)
elif判别式<0:
root1=(-b+cmath.sqrt(判别式))/(2*a)
root2=(-b-cmath.sqrt(判别式))/(2*a)
print('有两个复数根:')
打印(root1)
打印(root2)

如果我理解正确,下面的If语句可以处理复杂的判别式:

if isinstance(discriminant, complex):
   root1 = (-b + cmath.sqrt(discriminant))/(2*a)
   .
   .
   .
我假设问题是检查复杂的判别式,对吗

编辑:


根据注释,听起来您必须将其作为第一个“if”语句,并使if discriminant>0和elif。

只是好奇,对于descripant==0的情况,为什么要计算math.sqrt(discriminant)?这不是一个很好的问题,我想这只是我没有意识到的事情之一。但我不明白为什么我真的需要它是的,这正是我想要的。我只是试了一下,虽然它本身工作得很好,但当我把它放在整个事情中时,它似乎有问题。对于判别式>0。它说:TypeError:没有为复数定义排序关系。然而,当我测试它时,它仍然给了我解决方案。查看我的编辑