在BlackJack游戏中,我试图抓住手中的卡牌值之和并将其打印出来。我想知道代码中的错误并保持与我相同的逻辑。
我要从Deck类的init_deal()方法返回一个元组,并在下一个类(即Hand)中调用它。在Hand类的add()函数中,我试图对Cards的值求和以计算手中的总值。
import random
suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs')
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine',
'Ten', 'Jack', 'Queen', 'King', 'Ace')
values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7,
'Eight':8, 'Nine':9, 'Ten':10, 'Jack':10, 'Queen':10, 'King':10, 'Ace':11}
class Card:
def __init__(self,suit,rank):
self.suit= suit
self.rank= rank
def __str__(self):
return (f'{self.rank} of {self.suit}')
class Deck:
def __init__(self):
self.deck=[]
self.computer=[]
self.player=[]
for suit in suits:
for rank in ranks:
self.deck.append(Card(suit,rank))
def init_deal(self):
count=1
while count<5:
if count%2==0:
comp=self.deck.pop()
self.computer.append(comp)
count+=1
elif count%2!=0:
playr=self.deck.pop()
self.player.append(playr)
count+=1
else:
break
return (self.computer,self.player)
class Hand(Deck):
def __init__(self):
self.hand=Deck().init_deal()
self.hand_com=self.hand[0]
self.hand_playr=self.hand[1]
self.value_comp = 0
self.value_player = 0
self.val_comp=''
self.val_player=''
self.aces = 0
def add(self):
self.val_comp=' '.join(val.split()[0] for val in self.hand_com)
self.val_player=' '.join(val.split()[0] for val in self.hand_playr)
self.val_comp_lst=self.val_comp.split()
self.val_player_lst=self.val_player.split()
print(self.val_comp_lst)
print(self.val_player_lst)
for val in self.val_comp_lst:
self.value_comp += values[val]
for val in self.val_player_lst:
self.value_player += values[val]
return (self.val_comp,self.val_player)
print(self.value_comp)
print(self.value_player)
def __str__():
pass #Some logic here
x=Deck()
x.init_deal()
y=Hand(x)
y.add()
让我们假设
Deck().init_deal()
返回
(['Two of Hearts','Eight of Diamonds'],['Five of Spades','Six of Diamonds'])
根据我的代码的预期结果:
self.hand_com=['Two of Hearts','Eight of Diamonds']
self.hand_playr=['Five of Spades','Six of Diamonds']
val_comp_lst=['Two','Eight']
val_player_lst=['Five','Six']
所以最终的预期结果(实际上我无法打印):
self.value_comp = 10
self.value_player = 11
但是现在,如果我运行代码,则会收到错误消息,提示为“ AttributeError:'Card'对象没有属性'split'”
请帮助我了解我在此代码中所做的错误
答案 0 :(得分:0)
您可能有一个字典,可用于将单词映射到数字值,然后使用列表补偿和求和来求和这些值:
val_comp_lst=['Two','Eight']
nums = {'One': 1, 'Two': 2 ...}
sum([nums[x] for x in val_comp_lst])
答案 1 :(得分:0)
向value
添加Card
属性可能是最简单的。
class Card:
_values = {1: 11, 11: 10, 12: 10, 13: 10}
def __init__(self, suit, rank):
self.suit= suit
self.rank= rank
def __str__(self):
return (f'{self.rank} of {self.suit}')
@property
def value(self):
# returns the value from _values, or the rank of the card
return self._values.get(self.rank, self.rank)
然后将手牌中的value
加在一起。但是请注意,ace被计为11 或 1,因此之后您可能不得不弄乱这些数字!
顺便说一句:我对您的课堂结构感到困惑。您写了class Hand(Deck)
,但这意味着Hand
是一个Deck
,这似乎不太可能。您确定这就是您想要的吗?