Python求解一元二次方程根

2017-01-21 董付国 Python小屋 Python小屋

本文使用Python实现一元二次方程求根公式,主要演示运算符和几个内置函数的用法,封面图片与本文内容无关。

def root(a, b, c, highmiddle=True):
    #首先保证接收的参数a,b,c都是数字,并且a不等于0
    #由于计算机表示实数时存在精度的问题,所以不能使用==来判断实数是否为0
    #函数的最后一个参数highmiddle为True表示高中,False表示初中

    if not isinstance(a, (int, float, complex)) or abs(a)<1e-6:
        print('error')
        return
    if not isinstance(b, (int, float, complex)):
        print('error')
        return
    if not isinstance(c, (int, float, complex)):
        print('error')
        return

    #delta<0时无解
    d = b**2 - 4*a*c
    #根据一元二次方程求根公式进行计算
    #当d<0时,在实数域内无解,d**0.5会得到复数

    x1 = (-b + d**0.5) / (2*a)
    x2 = (-b - d**0.5) / (2*a)

    if isinstance(x1, complex):
        if highmiddle:
            #高中阶段需要考虑复数根,实部和虚部都保留3位小数
            x1 = round(x1.real, 3) + round(x1.imag, 3)*1j
            x2 = round(x2.real, 3) + round(x2.imag, 3)*1j
            return (x1, x2)
        else:
            #初中阶段只考虑实数根
            print('no answer')
            return
    #如果是实数根,保留3位小数
    return (round(x1,3), round(x2,3))

r = root(1, 2, 4)
if isinstance(r, tuple):
    print('x1={0[0]}\nx2={0[1]}'.format(r))