2013-02-12 55 views
2

用戶應該爲A,B和C輸入一個值,並得到二次方程的根。在數學上,我的代碼給出了錯誤的答案:來自二次方程程序的錯誤輸出

print "Quadratic Formula Calculator!!!" 

a = input("Please, enter value for A: ") 
b = input("Please, enter value for B: ") 
c = input("Please, enter value for C: ") 

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

if quad >= 0: 
    quad ** 0.5 
    print "quad" 

else: 
    print "can not compute" 

solution1 = (-b + quad)/(2 * a) 
solution2 = (b + quad)/(2 * a) 

print " Solution 1!!!:", solution1 
print " Soultion 2!!!:", solution2 
+1

-1。你的二次方程式是錯誤的。 – BenDundee 2013-02-12 21:59:55

+2

你想要計算什麼?你期望輸入哪個輸出?請妥善解釋您的問題。 – 2013-02-12 22:00:22

+0

我想你想解決'a * x^2 + b * x + c = 0',但是如果你發佈了你想解決的問題,這將會很有幫助。另外我猜這是python-2.7的代碼,而不是python 3.x,所以如果你編輯問題並刪除不匹配的標籤,這將是禮貌的。 (啊,我看到martijn peters已經解決了這個問題)。 – 2013-02-12 22:03:33

回答

4

你需要這樣的:

quad = quad ** 0.5 

而不是僅僅quad ** 0.5

和解決方案是:

(-b + quad)/(2 * a) 
(-b - quad)/(2 * a) 

如果你不能判別的負值計算(你可以,答案將是一個複雜的共軛值),只需移動計算和解決方案打印quad >= 0內。

+0

我試過,Python一直給我這個錯誤「Traceback(最近調用最後一次): 文件」C:\ Users \ Owner \ Downloads \ quadratic.py「,第10行,在 quad = quad ** 0.5 ValueError:負數不能提高到小數「我不知道如何解決這個問題 – naomithuff 2013-02-12 22:04:32

+0

如果前面有一個條件,它會是負數? – m0nhawk 2013-02-12 22:07:15

+1

哪些輸入值導致Traceback? – 2013-02-12 22:08:27

1
solution1 = (-b + quad)/(2 * a) 
solution2 = (b + quad)/(2 * a) 

這應該是

solution1 = (-b + quad)/(2 * a) 
solution2 = (-b - quad)/(2 * a) 

的公式爲-b加上或減去根,而不是加上或減去B加的根。

2

建立在m0nhawk的答案上,Hooked的評論(和Wikipedia)這裏是一種使用爲複數設計的cmath library的方法。

from math import pow 
from cmath import sqrt 

print "Quadradtic Formula Calculator!!!" 
print "Ax²+Bx+C=0" 
print "This will attempt to solve for x" 

a = input("Please, enter value for A: ") 
b = input("Please, enter value for B: ") 
c = input("Please, enter value for C: ") 

discriminant = sqrt(pow(b,2) - (4 * a * c)) 

if discriminant.imag != 0: 
    print "discriminant is imaginary" 
else: 
    print " Solution 1!!!:", (-b + discriminant.real)/(2 * a) 
    print " Solution 2!!!:", (-b - discriminant.real)/(2 * a) 

cmath.sqrt會返回一個複數與.imag.real領域。