I have a code that looks like. And my problem is that my code changes the original fraction.
class Fraction:
""" This class represents one single fraction that consists of
numerator and denominator """
def __init__(self, numerator, denominator):
"""
Constructor. Checks that the numerator and denominator are of
correct type and initializes them.
:param numerator: fraction's numerator
:param denominator: fraction's denominator
"""
if not isinstance(numerator, int) or not isinstance(denominator, int):
raise TypeError
elif denominator == 0:
raise ValueError
self.__numerator = numerator
self.__denominator = denominator
def return_string(self):
""" Returns a string-presentation of the fraction in the format
numerator/denominator """
if self.__numerator * self.__denominator < 0:
sign = "-"
else:
sign = ""
return "{:s}{:d}/{:d}".format(sign, abs(self.__numerator),
abs(self.__denominator))
def complement(self):
""" Complement the fraction """
self.__numerator=-1*self.__numerator
return self
def reciprocal(self):
""" Reciprocal the fraction """
new_numerator=self.__denominator
new_denominator=self.__numerator
self.__numerator=new_numerator
self.__denominator=new_denominator
return self
So my codes gives
>>> frac = Fraction(-2, 4)
>>> frac.return_string()
'-2/4'
>>> complement = frac.complement()
>>> complement.return_string()
'2/4'
>>> reciprocal = frac.reciprocal()
>>> reciprocal.return_string()
'4/2'
But it should give me
>>> frac = Fraction(-2, 4)
>>> frac.return_string()
'-2/4'
>>> complement = frac.complement()
>>> complement.return_string()
'2/4'
>>> reciprocal = frac.reciprocal()
>>> reciprocal.return_string()
'-4/2'
So basically my problem is that when i return complement or reciprocal of the fraction it replaces the original fraction but i want the original fraction to remain the same.
In your complement
and reciprocal
methods, instead of mutating itself create a new instance of Fraction
and return it.
def complement(self):
""" Complement the fraction """
return Fraction(-1*self.__numerator, self. __denominator)
def reciprocal(self):
""" Reciprocal the fraction """
new_numerator=self.__denominator
new_denominator=self.__numerator
return Fraction(new_numerator, new_denominator)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.