簡體   English   中英

在Python的21點游戲中為手分配數值

[英]Assigning Numerical Values to Hand in Blackjack Game in Python

有人可以告訴我如何為玩家手中的紙牌分配數值嗎? 我被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()

您可以使用isdigit()進行檢查,然后進行更簡單的檢查:

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

但是我認為字典是最好的方法,因為它是最易讀,最容易添加值的。

我認為您只需要對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM