2016-04-14 28 views
0

Hey Jungs beim Blackjack, der Dealer wird wissen, dass Ass 1 oder 11 sein kann, aber wenn die Gelegenheit kommt es als 1 zu spielen, bust es. Zum Beispiel:Blackjack-Programm, Probleme mit Händler zu erkennen Ace-Wert [Python]

mit 2 Asse beginnen, haben Sie technisch entweder 2, eine 12 oder eine 22

können sagen, die erste Karte des Dealers ist ein Jack bekommt.

Daher haben Sie entweder: a 12, a 22, oder 32. der Computer daher, hält die 12 Haltung, und fügt die Buchse, so dass es eine 22 und verliert.

Hier ist der Code

def evaluateHand(self, dHand): 
     DValue = 0 

     for card in dHand: 
      rank = card.getRank() 
      if rank > 10: 
       rank = 10 
      elif rank == 1 and DValue + 11 <= 21: 
       rank = 11 
      DValue = DValue + rank 


     return DValue 

hier, wo ich für ace meinen Wert zu definieren, und ich bin mir ziemlich sicher, dass es an meinem elif-Anweisung ist, aber sonst nichts ich versuche ausarbeitet. irgendwelche Vorschläge?

+0

kleinen Vorschlag: Änderung 'card.getRank (') stattdessen eine Eigenschaft verwenden und nenne es Rang. Erstellen Sie eine neue Eigenschaft mit dem Namen 'hand_value', die die Bewertung der Karte (1-10) übernimmt. Deine Karten sollten wissen, wie viel sie wert sind, und deine Hand sollte sich nicht darum kümmern, was ihre Ränge sind (außer dass Asse Sonderkasas sein müssen) –

+0

Betrachten wir ein 'card.py', das ungefähr so ​​aussieht [this] (https: //gist.github.com/NotTheEconomist/74d2369f144852141054b9cd11195789) –

Antwort

2

Sie können viele Asse in einer Hand haben, aber nur eine kann mit 11 bewertet werden, ohne zu zerbrechen.

  • zuerst den Wert der Hand mit Assen bewerten bei 1

  • dann bewertet, wenn der Hand-Wert < 12 ist, und es ist ein A in der Hand, den Wert, der bei 11 Ace (10 hinzufügen zum Handwert)

  • Geben Sie den korrekten Handwert zurück.

Hier einige mögliche Code (mit ein bisschen Pseudo-Code, da Sie nicht Ihre Datenstruktur angegeben haben.)

def get_hand_value(self, hand):  
    hand_value = 0 
    for card in hand: 
     hand_value += card.get_value()  # this evaluates the hand with all aces at 1 
    if hand_value < 12 and ace in hand:  # this line is pseudocode, IDK your data structure 
              # it evaluates one ace (if any) at 11 (if possible w/o busting) 
     hand_value += 10 
    return hand_value 
+1

Ich schreibe seit über einem Jahrzehnt Code (und damit diese Anfänger Kartenspielübungen zu sehen), UND ich habe als professioneller Händler seit 5 oder 6 Jahren und Ich habe NIEMALS erwogen, dies von unten nach oben zu gehen. Es sollte offensichtlich sein, aber aus irgendeinem Grund habe ich Asse immer als 11 gezählt und stattdessen zehn abgezogen, was mich zwingt, zu verfolgen, wie viele * Asse es in der Hand gibt ('für _ im Bereich (num_aces): if hand_value> 21: hand_value - = 10'). Das ist viel besser. –