2017-09-03 70 views
0

有人可以告诉我如何为玩家手中的牌分配数值吗?我卡在self.checkvalue,因为我目前设置的是我使用字符串来显示排名和西装。我似乎无法弄清楚如何获得玩家手中每张牌的等级并使用它来查找字典中的数值。指定数值在Python中举行二十一点游戏

谢谢!

这是我到目前为止有:

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

可以使用isdigit()检查,然后一个简单的检查:

def getCardVal(card): 
    if card.isdigit(): 
    return int(card) 
    elif card == "Ace": 
    return 1 
    else: 
    return 10 

但我认为一本字典是最好的方式它是增加值的最可读和最容易的。

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.rankcard.suit即可。

+0

谢谢,但我仍然无法实现您在Python 2中建议的更改。更具体地说,打印功能。你知道我可以在Python 2中做到这一点吗? – paulnsn

+0

@paulnsn从'print'调用中删除括号,或者在文件的顶部添加'from __future__ import print_function'。 – FMc