2016-04-14 24 views
0

嘿傢伙玩二十一點時,經銷商會知道ace可以是1或11,但是當機會來玩它爲1時,它會破產。例如:二十一點計劃,與經銷商認可的Ace值有問題[蟒蛇]

用2個ACE球剛開始時,你在技術上有一張2,12,或22

比方說第一張牌莊家的牌是傑克。

因此,你有:一個12,一個22,或一個32. 因此,保持12的態度,並增加了傑克使它成爲22並失去。

這裏的代碼

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 

這裏就是我定義的王牌我的價值,我敢肯定這是我的elif語句,但沒有別的我嘗試出來的作品。 有什麼建議嗎?

+0

小建議:改變'card.getRank()'使用的屬性,而不是,並稱之爲「排名」。創建一個名爲'hand_value'的新屬性來處理卡片的估價(1-10)。你的牌應該知道他們的價值,你的牌不應該在意他們的等級是多少(除非牌必須是特殊裝的) –

+0

考慮一個'card.py',看起來像[this](https: //gist.github.com/NotTheEconomist/74d2369f144852141054b9cd11195789) –

回答

2

你可以在手中擁有許多ace,但只有一個可以在沒有破壞的情況下被評估爲11。

  • 首先評估手的以1

  • 值然後對A的值,如果手值爲< 12並且在手王牌,值王牌11(添加10到手價值)

  • 返回正確的手牌值。

下面是一些可能的代碼(有位僞的,你沒有指定你的數據結構。)

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

我已經寫了十多年的代碼(因此看到了這些初學者的紙牌遊戲練習),並且我已經作爲專業經銷商做了5年或6年的月光,我從來沒有考慮從底層接近這一點。這應該是顯而易見的,但由於某種原因,我總是把Aces數爲11,並減去10,這迫使我跟蹤手中有多少* a('for for range in(num_aces)):if hand_value> 21:hand_value - = 10')。這好多了。 –