2016-06-19 5 views
0

Fractionクラスにpgdc関数を追加して、最大公約数を計算するか、またはpgdcを計算しようとしました...この関数は再帰的でなければなりません。私もsimplifierため、次のエラーを得た、Python 2.7のクラス内で関数を定義する

を加えて

Traceback (most recent call last): 
    File "C:/Users/jf/Desktop/Python-jEdit_v2/23_fraction.py", line 60, in <module> 
    p = a.plus(b) 
    File "C:/Users/jf/Desktop/Python-jEdit_v2/23_fraction.py", line 35, in plus 
    return resultat.simplifier() 
    File "C:/Users/jf/Desktop/Python-jEdit_v2/23_fraction.py", line 27, in simplifier 
    p = pgcd(self.num, self.den) 
NameError: global name 'pgcd' is not defined 

AttributeError: Fraction instance has no attribute 'simplifier'

私はadd self.pgcd=pgcdしようとしたとして、パズル私を残してどの、としかし、私は次のエラーを取得しておきますself.simplifier=simplifier

様々な場所で、それはまだうまく動作しませんでした...

# -*- coding: utf-8 -*- 
class Fraction(): 
    # constructeur et attributs 

    def __init__(self, num = 0, den = 1): 
     self.num = num 

     if (den == 0): 
      erreur("Dénominateur nul") #fonction d'erreur 
     self.den = den 

    def __str__(self): 
     return str(self.num) + "/" + str(self.den) 

    def erreur(message): 
     print "Erreur: " + message 
     from sys import exit 
     exit() 
    def pgcd(a, b): 
     if a == b: 
      return a 
     if a > b: 
      return pgcd(a-b, b) 
     else: 
      return pgcd(a, b-a) 
    def simplifier(self): 
     p = pgcd(self.num, self.den) 
     self.num = self.num/p 
     self.den = self.den/p 
     return self 

    def plus(self, f): 
     resultat = Fraction(self.num * f.den + self.den * f.num, \ 
          self.den * f.den) 
     return resultat.simplifier() 
    def moins(self, f): 
     resultat = Fraction(self.num * f.den - self.den * f.num, \ 
      self.den * f.den) 
     if (resultat.num < 0): 
     # changer de signe avant de simplifier 
      resultat.num = - resultat.num 
      resultat = resultat.simplifier() 
      resultat.num = - resultat.num 
      return resultat 
     else: 
      return resultat.simplifier() 

    def fois(self, f): 
     resultat = Fraction(self.num * f.num, self.den * f.den) 
     return resultat.simplifier() 
    def div(self, f): 
     resultat = Fraction(self.num * f.den, self.den * f.num) 
     return resultat.simplifier() 



#### CONSOLE #### 
a = Fraction(5, 11) 
b = Fraction(3, 7) 
p = a.plus(b) 
+0

んこのヘルプ:def pgcd(self、a、b):また:return self.pgcd(... –

+0

ホイールを再作成しないでください: 'from fractions import gcd'。 –

答えて

0

あなたは、あなたの関数のパラメータとしてselfを宣言し、あなたが再帰的にpgcdを呼び出したいときにそれを使用する必要があります。

def pgcd(self,a, b): 
    if a == b: 
     return a 
    if a > b: 
     return self.pgcd(a-b, b) 
    else: 
     return self.pgcd(a, b-a) 

また、このライン上self.pgcdを呼び出します。

p = self.pgcd(self.num, self.den) #from pgcd(self.num, self.den) 
関連する問題