現利用Python求二次方程 ax^2 + bx + c = 0 得出x的值,把這個方程式變一下形就是(尼瑪,打字打不出來只有用圖片代替咯):, 其中根號下的b^2-4ac就是一個判別式,如果判別式的值爲0則x只有一個值,如果判別式的值不爲0,則x的值就有兩個,大於0時是兩個實數根,小於0時是兩個複數根。現要設計一個程式來輸入a、b、c三個參數,且a不能爲0(因爲它作爲除數),算出x的值爲多少。
爲了實現這一目的,我們首先要規劃好程式的概要結構體,設計一個方法負責從鍵盤輸入一個浮點數。還要設計一個程式的核心部分就是計算x的值,好了,說了這麼多,該拿出代碼來了,代碼上每行代碼都有相應註釋。
源代碼:
#Author Tandaly #Date 2013-04-08 #File Quadratic.py #引入相關包 import sys import math import cmath #從鍵盤獲取一個浮點數 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: #不能爲零操作 print("**不能爲0**") x = None except ValueError: print("**請輸入浮點數或者整數**") x = None return x #計算二次方程 def cal_quadratic(a, b, c): x1 = None #根1 x2 = None #根2 d = b ** 2 - 4 * a * c #判別式 = b^2 - 4ac if d == 0: #判別式爲0,只有一個根 x1 = -b/(2 * a) else: #判別式不爲0,有兩個根 if d > 0: #判別式大於0,利用math開方 root = math.sqrt(d) else: #判別式小於0,利用cmath開方 root = cmath.sqrt(d) x1 = (-b + root)/(2 * a) #得出根1 x2 = (-b - root)/(2 * a) #得出根2 #利用str.format()格式化打印 info = "{0}x^2 + {1}x + {2} = 0 -->".format(a, b, c) info += " x1 = {0}".format(x1) if x2 is not None: info += " or x2 = {0}".format(x2) print(info) if __name__ == "__main__": #expression = "ax\N{SUPERSCRIPT TWO} + bx + c = 0" #此行在dos下無法輸出 估計是編碼問題 expression = "ax^2 + bx + c = 0" #二次方程表達式 print(expression) a = get_float("請輸入a:", False) #輸入a且不能爲0 b = get_float("請輸入b:", True) #輸入b且可以爲0 c = get_float("請輸入c:", True) #輸入c且可以爲0 cal_quadratic(a, b, c) #調用計算二次方程方法
運行結果:
>>>
ax^2 + bx + c = 0
請輸入a:2.5
請輸入b:0
請輸入c:-7.25
2.5x^2 + 0.0x + -7.25 = 0 --> x1 = 1.7029386365926402 or x2 = -1.7029386365926402
作者:Tandaly