Python 3.x 如何在python中正确求解二次型中的虚数?

Python 3.x 如何在python中正确求解二次型中的虚数?,python-3.x,Python 3.x,我试图创建一个二次解算器,它将告诉我x的值。它完美地工作,直到其中一个答案是一个虚数。如何使程序不会每次都崩溃,并根据I给出正确答案 import math print() a = input("Coefficient of a: ") a = float(a) b = input("Coefficient of b: ") b = float(b) c = input("Coefficient of c: ") c = float(c

我试图创建一个二次解算器,它将告诉我x的值。它完美地工作,直到其中一个答案是一个虚数。如何使程序不会每次都崩溃,并根据I给出正确答案

import math
print()
a = input("Coefficient of a: ")
a = float(a)
b = input("Coefficient of b: ")
b = float(b)
c = input("Coefficient of c: ")
c = float(c)

x_1 = (-b + math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
x_2 = (-b - math.sqrt(b ** 2 - (4 * a * c))) / 2 * a
print()
print(f" X = {x_1} or {x_2}")
print()
您可以使用,而不是:

打印(例如):


检查
b**2-(4*a*c)
的值。如果它是负的,你有想象的解决方案

因此,您的代码变成:

导入数学
打印()
a=输入(“a的系数:”)
a=浮动(a)
b=输入(“b系数:”)
b=浮动(b)
c=输入(“c系数:”)
c=浮动(c)
δ=b**2-(4*a*c)
如果增量>=0:
x_1=(-b+数学sqrt(b**2-(4*a*c)))/2*a
x_2=(-b-math.sqrt(b**2-(4*a*c)))/2*a
打印()
打印(f“X={X_1}或{X_2}”)
打印()
其他:
打印(“两种解决方案都是虚构的:”)
实数=-b
imag=abs(数学平方比(-delta)/(2*a))
打印(f“X={real}+i*{imag}或{real}-i*{imag}”)

您可以使用Symphy这个例子(二次和三次方程式和…)

输出:

[-1, 1, -I, I]

pip安装symphy:

只需使用
cmath
(复杂数学)而不是
math
。它会将所有数字视为复数,但您可以轻松检查
x.imag==0
以查看数字是否为真。哇。我不知道是否存在
complex
。是否有任何方法可以简化python中的部首,从而使解决方案成为一个类似2+3i的复数,而不必在else语句中使用格式化字符串?是的,有。您只需要计算
-b
sqrt(delta)/(2*a)
的实际值。我编辑我的答案是为了向你展示。
Coefficient of a: 3+2j
Coefficient of b: 1
Coefficient of c: -2-1j

 X = (3.1748906833227015+8.198076043446118j) or (-6.174890683322701-10.198076043446118j)
import sympy as sp
x = sp.Symbol("x")
print(sp.solve(x ** 4 - 1, x))
[-1, 1, -I, I]