簡體   English   中英

玩家手中無法獲得更多卡牌(Python二十一點)

[英]Can't Get More Cards in Player Hand (Python Blackjack)

我正在學習Python 2,並且嘗試使用OOP創建二十一點游戲。 有人可以讓我知道為什么在運行下面的代碼后為什么不能兩次執行hand.hit()嗎? 它只能工作一次。 為什么?

另外,有人可以讓我知道如何計算玩家手牌的實際價值嗎?

謝謝!

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 __str__(self):
        return str([str(card) for card in self.value])


    def hit(self):
        self.hit = self.value.append(deck.deal())
        return self.value

hand = PlayerHand()

好吧,第一個問題的答案很簡單:您正在用“ None”覆蓋您的方法(因為self.value.append不返回任何內容)。

因此,您需要更改以下行:

self.hit = self.value.append(deck.deal())  

self.value.append(deck.deal())

已經在stackoverflow上詢問計算手的實際值,因此,我將僅回答問題的第一部分。

暫無
暫無

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

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