2017-05-07 7 views
1

Ich bin ein Spiel von Solitär GestaltungEine Funktion, die nur dann, wenn zwei Bedingungen erfüllt wieder erfüllt sind

Grundsätzlich möchte ich in der Lage sein, die Person gewinnen zu lassen, wenn:

  1. Es gibt keine Karte auf dem ersten Stapel

  2. Alle Karten sind auf einer der anderen Pfählen

I n Um dies zu tun, möchte ich meine Funktion nur wahr zurück, wenn beide Bedingungen erfüllt sind, ich habe dies bisher:

def Win(self): 

    test1 = 0 
    test2 = 0 

    if self.t[0].size() == 0: 
     test1 = True 

    for pile in self.t: 
     if pile.size() == self.__CardNo: 
      test2 = True 

    if test1 == True and test2 == True: 
     return True 

    else: 
     return False 

Antwort

0

Sie betrachten könnte wie Win() nach unten zu etwas vereinfacht:

def Win(self): 

    if sum(pile.size() for pile in self.t) == self.__CardNo: 
     return self.t[0].size() == 0 

    return False 
0

Die Code wird mit der Erkenntnis verbessert, dass man das Ergebnis von Vergleichen in Variablen mit beschreibenden Namen einordnen kann. Zum Beispiel:

def has_won(self): 
    first_pile_empty = 0 == len(self.piles[0]) 
    other_piles_full = self.CARD_COUNT == sum(len(pile) for pile in self.piles[1:]) 
    return first_pile_empty and other_piles_full 

Sie werden bemerken, ich mir die Freiheit genommen habe einige andere Stil Anpassungen, um Ihren Code zu machen:

  • Win() zu has_won() umbenannte.
  • Umbenennung self.t zu self.piles.
  • Geänderte Methode zum Zählen von Karten auf einem Stapel von size() zu __len__().
  • Umbenennung __CardNo zu CARD_COUNT (vorausgesetzt, es handelt sich um eine Klassenvariable). Ich würde denken, dass nur die oberste Karte jeden Ergebnis Stapel Überprüfung wäre genug, aber das ist einfach genug Logik

Sie finden es eine bessere Art und Weise ist, wenn der Spieler nach dem Refactoring andere Teile des Codes, gewonnen hat, um zu bestimmen später anpassen.

Verwandte Themen