繁体   English   中英

在Python 2.7中的类中定义函数

[英]Defining a function within a class in Python 2.7

我试图在Fraction类中添加pgdc函数,以便计算最大的公共pgdc或数字pgdc 。该函数应该是递归的。 但是,我不断收到以下错误:

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

此外,

我还得到了simplifier的以下错误: AttributeError: Fraction instance has no attribute 'simplifier'

当我尝试add self.pgcd=pgcdself.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)

您需要将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 self. 在这条线上:

p = self.pgcd(self.num, self.den)  #from pgcd(self.num, self.den)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM