2017-09-03 76 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