为什么我的 python 求解二次公式的代码会这样?

Why is my python code to solve a quadratic formula doing this?

所以我在编码方面是一个新手 python,所以我决定尝试制作一个二次方程求解器。输入所有用户输入的变量后,出现此错误:

Traceback (most recent call last):
  File "C:/Users/insertnamehere/Desktop/quadratic formula solver.py", line 6, in <module>
    root=math.sqrt((b**2)-4*a*c)
ValueError: math domain error

我的代码是:

import math

a=float(input("A?: "))
b=float(input("B?: "))
c=float(input("C?: "))
root=math.sqrt((b**2)-4*a*c)
x=(-b+root)/2*a
x2=(-b-root)/2*a
print(x)
print(x2)

如有任何帮助,我们将不胜感激。

编辑: 忘记添加我输入的实际值。

A?: 6
B?: 1
C?: 2

这是一个基本的 9 年级数学问题:

二次方程并不总是有实值解,因为您不能对负数求平方根。您输入的二次方程的值无法用实数求解。

编辑:您发布了您的价值观:

那么, (1² - 2*6*2) 的平方根是多少?您无法在该问题的实数中找到解决方案,python 也不能,这就是它给您数学域错误的原因。

这样看:6x² + x + 2 = 0 确实无解。提示:查看 graph

Python 可以处理复数,但是 math 模块不会计算负数的平方根,为此你需要使用 cmath.

演示:

#!/usr/bin/env python

import cmath

a = 1.0
b = 1.0
c = 1.0

root = cmath.sqrt(b * b - 4.0 * a * c)
x1 = (-b + root) / (2.0 * a)
x2 = (-b - root) / (2.0 * a)
print x1
print x2

输出

(-0.5+0.866025403784j)
(-0.5-0.866025403784j)

虽然i是数学家常用的负一平方根的符号,但是Python用的是j;该约定在电子工程师中很常见,因为他们使用 i 来表示电流。

所以上面的输出等于(-1 ± sqrt(-3))/2