2015-02-08 87 views
-5
import math 

print ("f(x) = ax2 + bx + c") 

# #Get a, b and c from user 

aval = float(input("Please Enter (a) value: ")) 
bval = float(input("Please Enter (b) value: ")) 
cval = float(input("Please Enter (c) calue: ")) 

# #Find roots 
# THIS IS WERE IT GOES WRONG 

root1 = (-(bval) + math.sqrt(bval**2 - 4*aval*cval)) 
root2 = (-(bval) - math.sqrt(bval**2 - 4*aval*cval)) 

#Check discriminant 

discrim = float((bval**2)-(4*aval*cval)) 

if float(discrim > 0): 
    print ("Roots at: ",roo1,root2) 

elif float(discrim == 0): 
    print ("Only one real root: ", root1, root2) 

else: 
    print ("No real Roots.") 
+3

不是隨意添加一些東西,而是添加一個實際問題。 *至少*告訴我們你給你的程序給了什麼輸入,以及你從它得到了什麼樣的** full **錯誤信息。作爲額外的獎勵,*期望的輸出*會很好。 – 2015-02-08 00:50:03

+0

您正試圖獲得負數的平方根,因此_math域error_。 – rodrigo 2015-02-08 00:53:39

+0

他可能試圖計算負數的平方根,這會提示「數值錯誤:數學域錯誤」。 – bconstanzo 2015-02-08 00:54:35

回答

0

正如其他人所說,你應該打電話sqrt()只有適當的價值。

所以做的更好

... 

#Check discriminant 

discrim = float((bval**2)-(4*aval*cval)) 

if float(discrim >= 0): 
    # now it is ok to calculate the roots... 
    root1 = - bval + math.sqrt(discrim) 
    root2 = - bval - math.sqrt(discrim) 

    if float(discrim > 0): 
     print ("Roots at:", root1, root2) 
    else: 
     print ("Only one real root:", root1, root2) 
else: 
    print ("No real roots.") 

這種方式,我們確信,我們可以調用sqrt

+0

感謝這有所幫助 – 2015-02-08 17:37:59

0

您在計算sqrt(bval**2 - 4*aval*cval),其中parens中的所有參數都是用戶提供的。如果您輸入的內容會導致參數爲負數,則會發生錯誤。