我正在尝试模拟二十一点游戏的庄家,我真的很困惑。
基本上,我使用一副仅由 J、Q、K、A 和 2-10 组成的纸牌来简化这些内容,而不是使用普通的纸牌设置。
我意识到这一切都很混乱,我已经在课堂上工作了 3 个小时。
class Deck:
'''Simulates a deck of cards.'''
def __init__(self):
'''Deck() -> Deck
Creates a deck of cards'''
self.Deck = ['J', 'J', 'J', 'J', 'Q', 'Q', 'Q', 'Q', 'K', 'K', 'K', 'K', 'A', 'A', 'A', 'A', '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']
def __str__(self):
'''str(Deck) -> str
Returns string showing number of cards left'''
output = str(len(self.Deck)) + ' cards'
return(output)
def shuffle(self):
'''shuffle(self) -> Deck
Shuffles deck.'''
import random
random.shuffle(self.Deck)
def draw(self):
if len(self.Deck) > 0:
return(self.Deck.pop(0))
else:
return(-1)
def add(self, card):
self.Deck.append(str(card))
class BlackJackPlayer(Deck):
'''Represents someone playing blackjack.'''
def __init__(self, Deck):
self.BlackJackPlayer = Deck
self.hand = ''
self.value = 0
def __str__(self):
return self.hand
def clean_up(self):
self.BlackJackPlayer = Deck
self.hand = ''
self.value = 0
def get_value(self):
for x in self.hand:
if x != ',':
if x not in range(1, 11):
if x != 'A':
self.value += 10
else:
if (self.value + 11) > 17:
self.value += 1
else:
self.value += 11
else:
self.value += x
return(self.value)
def hit(self):
Deck.shuffle(self.BlackJackPlayer)
card = Deck.draw(self.BlackJackPlayer)
return(card)
def play_dealer(self):
while BlackJackPlayer.get_value(self) < 17:
self.hand += BlackJackPlayer.hit(self)
print(self.hand)
if BlackJackPlayer.get_value(self) < 17:
self.hand += ','
if BlackJackPlayer.get_value(self) > 21:
return('BUST')
else:
return
出于某种原因,每当我调用 jack.play_dealer() 时,它都会过早停止,因为它认为这手牌已经超过 21。
例如:
>>> deck = Deck()
>>> jack = BlackJackPlayer(deck)
>>> jack.play_dealer()
7
'BUST'
>>> jack.get_value()
40
我猜我的 get_value() 有问题,但我想不通。
提前致谢!