ブラックジャックのゲームのディーラーをシミュレートしようとしていますが、本当に混乱しています。
基本的に、私は通常のカード デッキのセットアップを使用するのではなく、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() に何か問題があると思いますが、わかりません。
前もって感謝します!