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


二元一次函數的實現

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM