2017-03-25 13 views
0

私はそのようなコードを持っています。そして私の問題は、私のコードが元の部分を変更することです。Python - 元の値を変更せずにクラスから値を返す方法

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 

だから私のコードは

>>> 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' 

を与えます。しかし、それは私に

>>> 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' 

を与える必要がありますので、基本的に私の問題は、私は分数の補数または逆数を返したときに、それは、元の分数を置き換えることです元の部分は同じままにしておきたい。

+0

'variable'に' list'を使用し、いくつかのデータを追加し、stepの長さをチェックします。 – dsgdfg

答えて

0

complementreciprocalのメソッドでは、それ自体を変更する代わりにFractionという新しいインスタンスを作成して返します。

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) 
関連する問題