使用python實現解析二元一次方程

二元一次函數的實現

import cmath
import math
import sys

這裏導入cmath包是在後面用來處理複數的狀況
導入math使用來處理 平方 根號等的運算
而導入sys的意義是爲了比較0 ,在python中float的精度值不夠,因此在計算複數時須要用到sys.float_info.epsilonpython

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

這個函數是用來讀取用戶輸入的數字,並對其進行斷定是否知足二元一次方程式的標準
對輸入值進行斷定是否爲數字類型:
是 -> 則進行下一步,將變量賦值
不是 -> 返回錯誤信息,並要求從新輸入數值nginx

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時,表示有兩個複數解app

相關文章
相關標籤/搜索