Discuss / Python / 练习

练习

Topic source
# -*- coding: utf-8 -*-

import math
from functools import wraps


def quadratic_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if len(result) == 0:
            return "没有实数根"
        elif len(result) == 1:
            return "只有一个实数根,为%s" % result[0]
        return "有两个实数根,分别为{0},{1}".format(*result)

    return wrapper


class Math(object):
    @classmethod
    def quadratic(cls, a, b, c):
        dt = b ** 2 - 4 * a * c
        if dt < 0:
            return tuple()
        p = -(b / (2 * a))
        q = math.sqrt(dt) / (2 * a)
        if dt == 0:
            return (p + q,)
        return (p + q, p - q)


class NewMath(Math):
    @classmethod
    @quadratic_decorator
    def quadratic(cls, a, b, c):
        return super(NewMath, cls).quadratic(a=a, b=b, c=c)


if __name__ == '__main__':
    print(NewMath.quadratic(2, 3, 1))  # 有两个实数根,分别为-0.5,-1.0
    print(NewMath.quadratic(1, 3, -4))  # 有两个实数根,分别为1.0,-4.0
    print(NewMath.quadratic(2, 4, 2))  # 只有一个实数根,为-1.0
    print(NewMath.quadratic(2, 1, 2))  # 没有实数根

  • 1

Reply