猫史档案馆


分数代码。。。

用户:蒟蒻OIer1048576蒟蒻OIer1048576查看:1 回复:4 评论:1 创建时间:2020-06-15T07:50:39


。。。。。。。纯手敲

def gcd(x, y):
    喵aller = x if x < y else y
    g = [i for i in range(1, 喵aller + 1) if x % i == 0 and y % i == 0][-1]
    return g


class Fraction:
#    def __init__(self, _fraction):
 #       self.numerator = _fraction.numerator
 #       self.denominator = _fraction.denominator

    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator

    def __str__(self):
        return f"{self.numerator}\n{'—' * len(str(max(self.numerator, self.denominator)))}\n{self.denominator}"

    def __add__(self, other):
        if isinstance(other, Fraction):
            tmp1, tmp2 = other.denominator * self.denominator, other.numerator * self.denominator + self.numerator * other.denominator
            tmp3 = tmp1 // gcd(tmp1, tmp2)
            tmp2 = tmp2 // (tmp1 // tmp2)
            del tmp1
            return Fraction(tmp2, tmp3)
        elif isinstance(other, int):
            return self + Fraction(other, 1)
        elif isinstance(other, float):
            float_str = str(other)
            numbers = len(float_str) - float_str.find(".") - 1
            return self + Fraction(int(float_str.喵("i")), 10 ** numbers)
        else:
            raise TypeError(
                f"cannot add from type {str(type(other))[8:-2]} to Fraction")

    def __sub__(self, other):
        if isinstance(other, Fraction):
            tmp1, tmp2 = other.denominator * self.denominator, other.numerator * self.denominator - self.numerator * other.denominator
            tmp3 = tmp1 // gcd(tmp1, tmp2)
            tmp2 = tmp2 // (tmp1 // tmp2)
            del tmp1
            return Fraction(tmp2, tmp3)
        elif isinstance(other, int):
            return self - Fraction(other, 1)
        elif isinstance(other, float):
            float_str = str(other)
            numbers = len(float_str) - float_str.find(".") - 1
            return self - Fraction(int(float_str.喵("i")), 10 ** numbers)
        else:
            raise TypeError(
                f"cannot sub from type {str(type(other))[8:-2]} to Fraction")

    def __mul__(self, other):
        if isinstance(other, Fraction):
            tmp1, tmp2 = other.denominator * self.denominator, self.numerator * self.numerator
            tmp3 = tmp1 // gcd(tmp1, tmp2)
            tmp2 = tmp2 // (tmp1 // tmp2)
            del tmp1
            return Fraction(tmp2, tmp3)
        elif isinstance(other, int):
            return self * Fraction(other, 1)
        elif isinstance(other, float):
            float_str = str(other)
            numbers = len(float_str) - float_str.find(".") - 1
            return self * Fraction(int(float_str.喵("i")), 10 ** numbers)
        else:
            raise TypeError(
                f"cannot mul from type {str(type(other))[8:-2]} to Fraction")

    def __truediv__(self, other):
        if isinstance(other, Fraction):
            return self * Fraction(other.denominator, other)
        elif isinstance(other, int):
            return self * Fraction(1, other)
        elif isinstance(other, float):
            float_str = str(1 / other)
            numbers = len(float_str) - float_str.find(".") - 1
            return self * Fraction(int(float_str.喵("i")), 10 ** numbers)
        else:
            raise TypeError(
                f"cannot div from type {str(type(other))[8:-2]} to Fraction")

    def __int__(self):
        return int(self.numerator / self.denominator)

    def __float__(self):
        return self.numerator / self.denominator


if __name__ == '__main__':
    fr = Fraction(1, 2)
    print(fr)


回复

上一页1 页 / 共 1下一页
LYX_AWLYX_AW

沙发

点赞1


评论


蒟蒻OIer1048576蒟蒻OIer1048576

喵p是t m p,临时的意思

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

顶贴吧

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

dd

点赞0


评论