2010-08-02 6 views
2

En alpha, algorithme d'élagage beta, J'ai une classe dans laquelle une fonction def getAction (self, gamestate) est définie. J'ai fait 2 plus en fonction def getActionélagage alpha bêta en python

Comme:

class BAC: 
    def you(self,gamestate): 
    def me(gamestate,depth,alpha, beta): 
    ------ 
     return v 
    def both(gamestate,depth,alpha, beta): 
    ------------------- 
     return v 
    return me(gamestate,0,alpha, beta)- 

je dois mettre alpha, bêta en moi les fonctions et les deux. Mais où puis-je définir les valeurs alpha et bêta. Si je définis alpha et bêta dans def me et def both alors l'erreur se produit car il n'y a pas de nom global alpha.

Comment créer des variables locales alpha et bêta ou comment puis-je permettre un fonctionnement correct?

+0

Est-ce que vous, sauf que quelqu'un va le code pour vous? – djondal

Répondre

1

Je suppose que vous voulez définir alpha et bêta comme l'attribut de vos classes.

Vous pouvez avoir besoin d'un constructeur de classe qui initialise vos variables.

class BAC: 
    def __init__(self): 
     self.alpha= 'Hello ' 
     self.beta= 'World!' 
    def me(self): 
     print self.alpha + self.beta 

Ou vous pouvez initialiser vos attributs variables telles que:

class BAC: 
    def me(self,alpha,beta): 
     self.alpha = alpha 
     self.beta= beta 
     print self.alpha + self.beta 

Tout ce que vous avez besoin est de se référer à l'attribut de classe si vous voulez la persistance.

Si vous choisissez la première solution:

my_bac = Bac() 
print my_bac.alpha + my_bac.beta 

La sortie sera

Hello World! 
Hello World! 
1

Souvent, l'algorithme alpha-bêta est mis en œuvre en fonction de niveau supérieur qui attribue une valeur initiale à la fois alpha et bêta puis le passe ces valeurs à la fonction de recherche récursive (ou alternativement une pile non récursive). La solution de classe donnée ci-dessus est également bonne, bien que j'ajouterais probablement une méthode pour réinitialiser alpha et bêta de sorte qu'une instance de classe n'a pas besoin d'être instanciée au début de chaque recherche.