二元一次函數的實現
import cmath
import math
import sys
這里導入cmath包是在后面用來處理復數的情況
導入math使用來處理 平方 根號等的運算
而導入sys的意義是為了比較0 ,在python中float的精度值不夠,所以在計算復數時需要用到sys.float_info.epsilon
def get_float(msg,allow_zero):
x =None
while x is None:
try:
x= float(input(msg))
if not allow_zero and abs(x) < sys.float_info.epsilon:
#在python中float是雙精度,精度不夠,在比較時容易出錯,所以需要用函數sys.float_info.epsilon
#sys.float_info.epsilon代表無限接近 0,是機器可以區分出的兩個浮點數的最小區別
print('不允許為0')
x = None
except ValueError as err:
print(err)
return x
這個函數是用來讀取用戶輸入的數字,並對其進行判定是否滿足二元一次方程式的標准
對輸入值進行判定是否為數字類型:
是 -> 則進行下一步,將變量賦值
不是 -> 返回錯誤信息,並要求重新輸入數值
print('ax\N{SUPERSCRIPT TWO}+bx+c=0')
#\N{SUPERSCRIPT TWO} 代表顯示上標一個2
ax²+bx+c=0
a = get_float('enter a: ',False)
b = get_float('enter b: ',True)
c = get_float('enter c: ',True)
x1 = None
x2 = None
discriminant = (b**2)-(4*a*c)
if discriminant == 0:
x1 = -(b/(2*a))
else:
if discriminant >0:
root = math.sqrt(discriminant)
else:
root = cmath.sqrt(discriminant)
x1 = (-b+root)/(2*a)
x2 = (-b-root)/(2*a)
equation = ("{0}x\N{SUPERSCRIPT TWO}+{1}x+{2}=0"
" \N{RIGHTWARDS ARROW} x={3}").format(a,b,c,x1)
# \N{RIGHTWARDS ARROW} 代表顯示一個箭頭標識(→)
if x2 is not None:
equation +=' or x={0}'.format(x2)
print(equation)
enter a: 1
enter b: 2
enter c: 1
1.0x²+2.0x+1.0=0 → x=-1.0
取到a b c 的值后 對(b²-4ac)進行計算,
當計算出來的值為0時,表示只有一個解為
當計算出來的值大於0時,表示有兩個解
當計算出來的值小於0時,表示有兩個復數解