我搜索过类似的关于转换课程的问题,但没有一个真正帮助过我。
我有一个Fraction类,如果可能的话想要将它简化为int。
class Fraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
self.simplify()
if self.denominator == 1:
# convert self to int of value numerator
我在Fraction类中有一个函数,它会在创建时简化分数(2/6变为1/3等)
def simplify(self):
div = gcd(self.numerator, self.denominator)
self.numerator //= div
self.denominator //= div
我目前解决此问题的方法如下:
def convert(fraction):
if fraction.denominator == 1:
return fraction.numerator # int
else:
return fraction # Fraction
f = Fraction(3, 1)
f = convert(f)
我在各种代数表达式中使用这些分数,所以我希望它们尽可能简单。例如。 1/2 + 1/2 = 1(而不是1/1)
有没有办法可以将Fraction对象转换为int而不必每次都通过这个外部函数传递它?
由于
答案 0 :(得分:1)
你可以做几件事:
考虑到这一点,我只是在课堂内移动了转换,并添加了 str 方法。
from fractions import gcd
class Fraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
self.simplify()
def __str__(self):
if self.denominator == 1:
return str(self.numerator)
return '{}/{}'.format(self.numerator,self.denominator)
def simplify(self):
div = gcd(self.numerator, self.denominator)
self.numerator //= div
self.denominator //= div
def convert(fraction):
if fraction.denominator == 1:
return fraction.numerator # int
return fraction # Fraction
if __name__ == '__main__':
f = Fraction(6, 2)
c = Fraction.convert(f)
print(f)
print(c)
f2 = Fraction(3, 4)
print(f2)
看看它是否可以帮到你。