这是我的代码
import math
print("\nFor reference, here is the Quadratic Formula: x = (-b±√(b²-4ac)) / (2a)\n\n")
while True:
try:
a = int(input("\nWhat is your value for a? >>> "))
except ValueError:
print("That is not a valid number, Please ender a valid number")
if a == 0:
print("a can NOT be equal to 0, Please enter a valid number")
else: break
while True:
try:
b = int(input("\nWhat is your value for b? >>> "))
break
except ValueError:
print("That was not a valid number. Please enter a valid number")
while True:
try:
c = int(input("\nWhat is your value for c? >>> "))
break
except ValueError:
print("That was not a valid number. Please enter a valid number")
exp = 2
underRoot = math.pow(b, exp) - (4 * a * c)
root = math.sqrt(underRoot)
posNumber = -b + root
negNumber = -b - root
denom = 2 * a
x_1 = posNumber / denom
x_2 = negNumber / denom
output = f"\n\nthe values of x-intercepts are {x_1} and {x_2}"
print(output)
我正在测试我的代码,当我为每个整数输入所有正数时,第 30 行给出了一个错误,提示“ValueError:数学域错误”。有谁知道如何防止这种情况吗?
错误来自于尝试取负数的平方根。如果
underRoot
大于 4*a*c
,则不保证 b^2
为正。当你的方程没有实数解时就会出现这种情况,例如 x^2 + 1 = 0
(测试一下,那里有错误)。有两种方法可以解决这个问题。
if underRoot < 0:
print ("No real solutions")
else:
root = math.sqrt(underRoot)
[...]
root = cmath.sqrt(underRoot)
[...]