2017-11-10 5 views
0

私はブラックジャック・シミュレーターを作って、特定のハンドが勝利する確率を見極めることができます。私は4枚のカードが残っているまで、52枚のカードの1つのフルデッキを循環させるwhileループを持っています。その中で私はディーラーが彼のカウントが本当のブラックジャックのように17+であるまで描画するwhileループを持っています。コードを実行すると、1つのデッキに正常に実行されますが、毎回同じハンドしか印刷されません。ここでは、コードです:ブラックジャックループ・トゥルー

# <--- PROGRAM SETUP ---> 
import random 

# Drawing Card Function 
def draw_card(): 
    # Card Values in 1 Deck 
    vals = [2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7, 
      8,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10, 
      10,10,10,10,10,10,10,10,10,11,11,11,11] 
    # </---> 

    dealer = 0 
    player = 0 
    bust = 21 


    deck_count = 0 
    hand_count = 0 

    dealer_cards = [] 

    # <--- // ---> 

    cards = 52 
    # Loop Hands Through Deck 
    while(cards > 4): 

     # Draw Card Loop 
     while(dealer <= 16): 
      card = random.choice(vals) 
      vals.remove(card) 
      dealer_cards.append(card) 

      dealer = dealer + card 

     hand_count = hand_count + 1 
     cards = cards - len(dealer_cards) 


     # <--- Results ---> 
     if 17 <= dealer <= 21: 
      print "Hand: {}, Dealer Stands @ {}".format(hand_count, dealer) 
      for i in dealer_cards: 
       print "Card: {}".format(i) 

     else: 
      print "Hand: {}, Dealer Busts @ {}".format(hand_count, dealer) 
      for i in dealer_cards: 
       print "Card: {}".format(i) 

    else: 
     deck_count = deck_count + 1 
     print "Deck {} is finished!".format(deck_count) 

# <--- // ---> 

draw_card() 

これを実行しているときに私が得る:

Hand: 1, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 2, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 3, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 4, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 5, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 6, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 7, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 8, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 9, Dealer Stands @ 19 
Card: 10 
Card: 9 
Hand: 10, Dealer Stands @ 19 
...All the way till the deck has less than 4 cards left. 

は、私はそれぞれの手ではなく、最初に手を複数回印刷するユニークなドローことにするために何を修正できますか?ありがとう

+0

場合> 16' 'ディーラーと'カード> 4'、ループが延々と続きます。あなたの不変量を考え直してください。 – 9000

答えて

1

各繰り返しの前にdealerdealer_cardsをリセットするのを忘れてしまったので、初めてwhile(dealer <= 16):ブロックが実行されることはありません。同じスコアをそのまま使用しますが、引き続き減額しますcards

がメイン whileループにあなたの初期化を移動

while(cards > 4): 
    dealer_cards = [] 
    dealer = 0 

    # Draw Card Loop 
    while(dealer <= 16): 
     card = random.choice(vals) 
     vals.remove(card) 
     dealer_cards.append(card) 

     dealer = dealer + card 

... 
+0

ありがとう、これは素晴らしい! – jblew

+0

これが修正されたら、正しくエースを処理する必要があります。非常に少数のカジノは柔らかい17の上に立つが、もちろんこのコードのように2つのエースをバストとしてカウントすることはない。 –

1

あなたは実際にループの繰り返しの間にディーラーの手をクリアしていません。

それで彼はカードを引くことができ、彼が19に達してから、内側にはwhile dealer < 17のループをスキップして永遠にぶら下がって、あなたはバーチャルマネーを手に入れています。

結果の後にdealer = 0を設定するだけで、/ elseがチェックされます。

関連する問題