利用Python求二次方程

        現利用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

地址:http://blog.csdn.net/tandaly/article/details/8780943

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章