首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python BlackJack游戏-

Python BlackJack游戏-
EN

Stack Overflow用户
提问于 2015-12-24 04:48:23
回答 2查看 205关注 0票数 1

我想(随机)打印这副牌中的所有卡片。程序运行并打印最多48张卡(每次执行程序时打印不同数量的卡)。我怀疑我的问题出在get_card()函数中。这是我的第一个程序,所以请友好的(=

代码语言:javascript
复制
import random

class Deck(object):

    def __init__(self,deck={},suit=[],suitDict={},cardValue=0,cardKey={}):
        self.deck=deck
        self.suit=suit
        self.suitDict=suitDict
        self.cardValue=cardValue
        self.cardKey=cardKey

    def create_deck(self):

        spades={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        hearts={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        diamonds={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        clubs={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        self.deck={'Spades':spades,'Clubs':clubs,'Hearts':hearts,'Diamonds':diamonds}
        print 'Deck Created'

    def get_card(self):
        while 1:
            #gets random suit
            self.suit=random.sample(self.deck,1)
            self.suitDict=self.deck[self.suit[0]]
            if self.suit[0] in self.deck:
                #get random key[CARD]
                self.cardKey=random.sample(self.suitDict,1)
                if self.cardKey[0] in self.suitDict:
                    #get card value
                    self.cardValue=self.deck[self.suit[0]].pop(self.cardKey[0])
                    break
                else:
                    self.get_card()
            else:
                self.get_card()
    def return_hand(self):
        self.get_card()
        return [self.suit,self.cardKey,self.cardValue]




d=Deck()
d.create_deck()
x = 52

while x!=0:
    print d.return_hand()
    x-=1
EN

回答 2

Stack Overflow用户

发布于 2015-12-24 05:14:52

这个答案正好解决了你面临的具体问题,那就是不能从你的扑克牌中拿到所有的牌。为了让你的程序正常工作,我只做了最少的改动。你应该试着让设计和代码更整洁。

代码如下:

代码语言:javascript
复制
import random

class Deck(object):

    def __init__(self,deck={},suit=[],suitDict={},cardValue=0,cardKey={}):
        self.deck=deck
        self.suit=suit
        self.suitDict=suitDict
        self.cardValue=cardValue
        self.cardKey=cardKey

    def create_deck(self):

        spades={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        hearts={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        diamonds={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        clubs={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
        self.deck={'Spades':spades,'Clubs':clubs,'Hearts':hearts,'Diamonds':diamonds}
        print 'Deck Created'

    def empty(self):
        return all(len(suit) == 0 for suit in self.deck.values())

    def get_card(self):
        while 1:
            if self.empty():
                break
            #gets random suit
            self.suit=random.sample(self.deck,1)
            self.suitDict=self.deck[self.suit[0]]
            if self.suitDict and self.suit[0] in self.deck:
                #get random key[CARD]
                self.cardKey=random.sample(self.suitDict,1)
                if self.cardKey[0] in self.suitDict:
                    #get card value
                    self.cardValue=self.deck[self.suit[0]].pop(self.cardKey[0])
                    break
                else:
                    self.get_card()
            else:
                self.get_card()

    def return_hand(self):
        self.get_card()
        return [self.suit,self.cardKey,self.cardValue]

d=Deck()
d.create_deck()
x = 52

while x!=0:
    print d.return_hand()
    x-=1

我建议您在这段代码和您的代码之间运行一次比较,看看到底发生了什么变化。

基本上:

  • I添加了一个" empty ()“布尔函数,用于检查纸牌中是否没有剩余的纸牌
  • 我每次选择一张新纸牌时,都会检查所选的self.suitDict不是空的,然后再尝试从中随机选择一张纸牌。
票数 0
EN

Stack Overflow用户

发布于 2016-01-01 07:54:50

我想通了,[=

代码语言:javascript
复制
import random

class Deck(object):

def __init__(self,deck={}):
    self.deck=deck

def create_deck(self):

    spades={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
    hearts={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
    diamonds={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
    clubs={'Ace':[1,10,11],2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,'Jack':10,'Queen':10,'King':10}
    self.deck{'Spades':spades,'Clubs':clubs,'Hearts':hearts,'Diamonds':diamonds}

def get_card(self):

    while True:
        #picks random suit from deck // picks random key from deck dict.
        #returns card attr. in a tuple
        suit=random.choice(self.deck.keys())
        if len(self.deck[suit]) > 0:
            #picks random card from suit 
            card=random.sample(self.deck[suit],1)
            cardValue=self.deck[suit].pop(card[0])
            return (suit,card,cardValue)
        else:
            #deletes empty suit from deck.      
            del self.deck[suit]

然后这将随机打印出所有的卡片:

代码语言:javascript
复制
deck=Deck()
deck.create_deck()
for i in range(52):
    print i,deck.get_card()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34443485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档