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