2017-04-13 61 views
-1

有人能告訴我爲什麼會出現此錯誤?ValueError:二級公式中的數學域錯誤

Traceback (most recent call last): 
    File "file.py", line 14, in <module> 
    p2 = math.sqrt(b*b -4*a*c) 
ValueError: math domain error 

我是個新手編碼,所以需要一些幫助:)

我的代碼如下所示:

# -*- coding: utf-8 -*- 
a = input("¿Qué valor es a?") 
while(str(a).isdigit() != True): 
    a = input("Porfavor, introduce un número para a, no un texto") 
b = input("¿Qué valor es b?") 
while(str(b).isdigit() != True): 
    b = input("Porfavor, introduce un número para b, no un texto") 
c = input("¿Qué valor es c?") 
while(str(c).isdigit() != True): 
    c = input("Porfavor, introduce un número para c, no un texto") 

import math 
p1 = b * -1 
p2 = math.sqrt(b*b -4*a*c) 
p3 = 2*a 
s1 = (p1+p2)/p3 
s2 = (p1-p2)/p3 
print("Soluciones :", s1, " y ", s2) 
+2

'math.sqrt'不處理負值... –

+0

您確定執行時輸入的參數a,b和c是否爲有效解決方案? 如果'4 * a * c> b * b'沒有二次方程的解。你應該添加一個檢查IF(4 * a * c> b * b):print(「沒有解決方案」)否則:...' – trashy

+0

@trashy如果您的域名是複數,肯定有解決方案。 –

回答

0

你必須讓這個math.sqrt不承擔負面價值。所以如果b * b-4 * a * c是一個負數,那麼你會得到數學領域的錯誤。解決此問題的一種方法是事先檢查sqrt操作中正在執行的值是否爲if語句的負值。

0

我假設你是不是想找找虛根 如果你是,你應該看看cmath

你應該是塊變成

try: 
    p1 = b * -1 
    math.sqrt(b**2 - 4*a*c) 
    p3 = 2*a 
    s1 = (p1+p2)/p3 
    s2 = (p1-p2)/p3 
    print("Soluciones :", s1, " y ", s2) 
except ValueError: 
    print("No real solution") 

這就是所謂的異常處理和它是這種情況的完美工具。唯一的一次它會去except語句,如果math.sqrt()被賦予一個負數。在這種情況下,根是虛構的,所以打印(「沒有真正的解決方案」)或任何你想要的錯誤信息!