二十一点 While 循环问题
Blackjack While Loop Trouble
所以我几乎是在制作一个 21 点模拟器来找出某些手牌获胜或失败的概率。我有一个 while 循环来循环遍历一副完整的 52 张牌,直到剩下 4 张牌。在其中,我有一个 while 循环,让庄家抽牌,直到他的点数达到 17+,就像真正的二十一点一样。当我 运行 代码时,它将 运行 成功通过一副牌,但每次只打印同一只手。这是代码:
# <--- 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.
如何解决才能使每手牌成为唯一的开牌而不是多次打印第一手牌?谢谢
您实际上并没有在循环迭代之间清算庄家的牌。
所以,他可以抽一张牌,因为他到了 19 岁,永远坚持下去,跳过内部 while dealer < 17
循环,并且知道他有一手足够漂亮的牌来骗取你所有的虚拟货币很多。
结果if/else检查后设置dealer = 0
即可。
您忘记在每次迭代前重置 dealer
和 dealer_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
...
所以我几乎是在制作一个 21 点模拟器来找出某些手牌获胜或失败的概率。我有一个 while 循环来循环遍历一副完整的 52 张牌,直到剩下 4 张牌。在其中,我有一个 while 循环,让庄家抽牌,直到他的点数达到 17+,就像真正的二十一点一样。当我 运行 代码时,它将 运行 成功通过一副牌,但每次只打印同一只手。这是代码:
# <--- 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.
如何解决才能使每手牌成为唯一的开牌而不是多次打印第一手牌?谢谢
您实际上并没有在循环迭代之间清算庄家的牌。
所以,他可以抽一张牌,因为他到了 19 岁,永远坚持下去,跳过内部 while dealer < 17
循环,并且知道他有一手足够漂亮的牌来骗取你所有的虚拟货币很多。
结果if/else检查后设置dealer = 0
即可。
您忘记在每次迭代前重置 dealer
和 dealer_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
...