2016-04-14 6 views
0

ブラックジャックをプレイしているとき、ディーラーはエースが1または11であることを知っていますが、1として再生する機会が来たら、例えば:ブラックジャックプログラム、Ace値を認識しているディーラーに問題がある[python]

は2枚のエースから始め

、あなたが技術的には2、12、または22

いずれかのディーラーが取得する最初のカードはジャックであると言うことができますがあります。

したがって、あなたは12,22、または32のいずれかを持っています。したがって、コンピュータは12の態度を保ち、それを22にして敗北させます。私はエースのための私の値を定義し、私はそれが私のelifの声明ではかなり確信しているが、それ以外は何も私は作品を試していないところ

は、ここでは、コード

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 

はここにありますです。 提案がありますか?

+0

小さな提案:変更 'card.getRank()'の代わりにプロパティを使用しますそれを「ランク」と呼ぶ。カードの評価(1〜10)を処理する 'hand_value'という新しいプロパティを作成します。あなたのカードはどれくらいの価値があるか知っていて、あなたの手は彼らのランクが何であっても気にしないはずです(エースは特別なケースでなければなりません) –

+0

[this](https: //gist.github.com/NotTheEconomist/74d2369f144852141054b9cd11195789) –

答えて

2

多くのエースを手に入れることができますが、1つだけがバストしないで11で評価されます。

  • 最初の手の値が< 12であり、エースは11でエース値が、手である場合(10を追加し、そして1

  • で評価エースと手の値を評価します

  • 正しい手の値を返します。 (。あなたのデータ構造を指定しなかったとして、擬似コードのビットと)ここで

は、いくつかの可能なコードである

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

私は10年以上にわたりコードを書いており(したがって、これらの初心者のカードゲームの練習を見ています)、私は月に5〜6年間プロのディーラーとして私は決して底から上に向かってこれに近づくことを決して考えなかった。それは明白なはずですが、何らかの理由で私はいつもエースを11と数え、代わりに10を引いています。これは、いくつのエースが手にあるかを追跡するよう強制します( '_範囲内(num_aces):if hand_value> 21:hand_value - = 10')。これははるかに良いです。 –

関連する問題