class Fraction: """ 代表分数的类,包含分子和分母 提供加减乘除运算 """ def __init__(self, top, bottom): self.num = top self.den = bottom def __str__(self): return str(self.num) + "/" + str(self.den) def __add__(self, otherfraction): newnum = self.num * otherfraction.den + self.den * otherfraction.num newden = self.den * otherfraction.den return Fraction(newnum, newden) def __sub__(self, otherfraction): newnum = self.num * otherfraction.den - self.den * otherfraction.num newden = self.den * otherfraction.den return Fraction(newnum, newden) def __mul__(self, otherfraction): newnum = self.num * otherfraction.num newden = self.den * otherfraction.den return Fraction(newnum, newden) def __truediv__(self, otherfraction): newnum = self.num * otherfraction.den newden = self.den * otherfraction.num return Fraction(newnum, newden) def __eq__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum == secondnum def __gt__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum > secondnum def __lt__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum < secondnum def __ge__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum >= secondnum def __le__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum <= secondnum def __ne__(self, otherfraction): firstnum = self.num * otherfraction.den secondnum = otherfraction.num * self.den return firstnum != secondnum def get_num(self): return self.num def get_den(self): return self.den def __radd__(self, otherfraction): return self # 约分函数:将分数约分为最简分数 def reduce_fraction(fraction): """ 将分数约分为最简分数 :param fraction: 分数,Fraction 类型 :return: 约分后的分数,Fraction 类型 """ # 求最大公约数 def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) g = gcd(fraction.get_num(), fraction.get_den()) return Fraction(fraction.get_num() // g, fraction.get_den() // g) # 通分函数:将多个分数通分 def common_denominator(fractions): """ 将多个分数通分 :param fractions: 分数列表,Fraction 类型 :return: 通分后的分数列表,Fraction 类型 """ # 求最大公约数 def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) # 求最小公倍数 def lcm(a, b): return a * b // gcd(a, b) # 通分 denominator = 1 for fraction in fractions: denominator = lcm(denominator, fraction.get_den()) for i in range(len(fractions)): fractions[i] = Fraction(fractions[i].get_num() * denominator // fractions[i].get_den(), denominator) return fractions