Python 它一直在说ValueError:数学域错误

Python 它一直在说ValueError:数学域错误,python,Python,我在计算机科学课上做一个数学项目,我需要帮助修复我的代码。。。这是二次公式 import math play = 0 print("ax**2 + bx + c = 0") while play==0: a = float(input("Enter A: ")) b = float(input("Enter B: ")) c = float(input("Enter C: ")) d = (b**2) - (4*a*c) solution1 = (

我在计算机科学课上做一个数学项目,我需要帮助修复我的代码。。。这是二次公式

import math

play = 0

print("ax**2 + bx + c = 0")

while play==0:

    a = float(input("Enter A: "))

    b = float(input("Enter B: "))

    c = float(input("Enter C: "))

    d = (b**2) - (4*a*c)

solution1 = (-b - math.sqrt (d))/(2*a)
solution2 = (-b + math.sqrt (d))/(2*a)

print("The X value's are", solution1 ,solution2)
break

我不知道如何解决这个问题。

你不是在验证二次方程没有解的情况。请看示例输入:

gonczor@wiktor-papu:~/tmp$ python3 mymath.py 
ax**2 + bx + c = 0
Enter A: 1
Enter B: 2
Enter C: 1
The X value's are -1.0 -1.0
gonczor@wiktor-papu:~/tmp$ python3 mymath.py 
ax**2 + bx + c = 0
Enter A: 1
Enter B: 5
Enter C: 7
Traceback (most recent call last):
  File "mymath.py", line 17, in <module>
    solution1 = (-b - math.sqrt (d))/(2*a)
ValueError: math domain error
gonczor@wiktor-papu:~/tmp$python3 mymath.py
ax**2+bx+c=0
输入A:1
输入B:2
输入C:1
X值为-1.0-1.0
gonczor@wiktor-papu:~/tmp$python3 mymath.py
ax**2+bx+c=0
输入A:1
输入B:5
输入C:7
回溯(最近一次呼叫最后一次):
文件“mymath.py”,第17行,在
解1=(-b-math.sqrt(d))/(2*a)
ValueError:数学域错误

你试图从一个负数中求出一个平方根。

在二次方程没有解的情况下,你没有进行验证。请看示例输入:

gonczor@wiktor-papu:~/tmp$ python3 mymath.py 
ax**2 + bx + c = 0
Enter A: 1
Enter B: 2
Enter C: 1
The X value's are -1.0 -1.0
gonczor@wiktor-papu:~/tmp$ python3 mymath.py 
ax**2 + bx + c = 0
Enter A: 1
Enter B: 5
Enter C: 7
Traceback (most recent call last):
  File "mymath.py", line 17, in <module>
    solution1 = (-b - math.sqrt (d))/(2*a)
ValueError: math domain error
gonczor@wiktor-papu:~/tmp$python3 mymath.py
ax**2+bx+c=0
输入A:1
输入B:2
输入C:1
X值为-1.0-1.0
gonczor@wiktor-papu:~/tmp$python3 mymath.py
ax**2+bx+c=0
输入A:1
输入B:5
输入C:7
回溯(最近一次呼叫最后一次):
文件“mymath.py”,第17行,在
解1=(-b-math.sqrt(d))/(2*a)
ValueError:数学域错误

您正在尝试从负数中求出平方根。

您可能正在尝试获取负数的
sqrt
,请确保您的输入正确无误,如果
d
为正数,则没有错误。我会在其中更改什么?您可以添加一个检查
,如果您可能试图获取负数的
sqrt
,请确保您的输入正确无误,如果
d
为正,则没有错误。我将在其中更改什么?您可以添加一个检查
,如果并打印出二次方程没有解(在实数空间中),则可以执行此操作;)然后打印出二次方程没有解(在实数空间中),这样就可以了;)