有人可以告诉我如何在玩家手中为卡片分配数值吗?我坚持self.checkvalue
,因为我目前设置的是我使用字符串来显示等级和套装。我似乎无法弄清楚如何在玩家的手中获得每张牌的等级并使用它来查找字典中的数值。
谢谢!
这是我到目前为止所做的:
import random
rank = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace']
suit = ['Diamonds', 'Clubs', 'Hearts', 'Spade']
card_val = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'Jack':10, 'Queen':10, 'King':10, 'Ace':1}
class Card(object):
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __str__(self):
return str(self.rank) + ' of ' + str(self.suit)
def grab_suit(self):
return self.suit
def grab_rank(self):
return self.rank
def draw(self):
print(self.suit + self.rank)
class Deck(object):
def __init__(self):
self.cards = []
for i in rank:
for j in suit:
self.cards.append(Card(i,j))
def __str__(self):
return str([str(card) for card in self.cards])
def shuffle(self):
random.shuffle(self.cards)
def deal(self):
single_card = self.cards.pop()
return single_card
deck = Deck()
class PlayerHand(object):
def __init__(self):
self.value = []
def hit(self):
self.value.append(deck.deal())
return self.value
def __str__(self):
return str([str(card) for card in self.value])
def checkvalue(self):
for card in self.value:
handvalue += card_val[(self.value)]
hand = PlayerHand()
答案 0 :(得分:0)
您可以使用isdigit()
进行检查,然后进行更简单的检查:
def getCardVal(card):
if card.isdigit():
return int(card)
elif card == "Ace":
return 1
else:
return 10
但我认为字典是最好的方式,因为它是最易读和最容易添加值的字典。
答案 1 :(得分:0)
我认为您只需对checkvalue()
进行一些小改动:
# Other code: unchanged.
def checkvalue(self):
handvalue = 0
for card in self.value:
handvalue += card_val[card.grab_rank()]
return handvalue
deck = Deck()
deck.shuffle()
hand = PlayerHand()
hand.hit()
hand.hit()
hand.hit()
print(hand)
print(hand.checkvalue())
# ['Jack of Hearts', '5 of Diamonds', '6 of Hearts']
# 21
一些小笔记:
PlayerHand.value
是一个令人困惑的变量名称。为什么不叫它PlayerHand.cards
?它是一个Card实例列表,对吗?
不需要grab_rank()
和grab_suit()
方法。只需直接访问card.rank
和card.suit
。