【发布时间】:2016-01-01 07:54:49
【问题描述】:
我想打印牌组中的所有卡片(随机)。该程序运行并打印多达 48 张卡片(每次执行程序时打印的数量不同)。我怀疑我的问题在于 get_card() 函数。这是我的第一个程序,所以请多多关照(=
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
【问题讨论】:
-
函数通常是一段代码,它应该做特定的事情。
get_card做了什么(用你自己的话来说)?你注意到它是递归的吗? -
详细说明您要达到的目标以及问题的确切原因(预期行为与观察到的)
-
它模拟从牌组中随机抽取一张牌。我确实将该功能分解为 3 个功能,但我认为将它们组合成一个功能会更好。
-
我正在尝试打印所有 52 张卡片。
-
好吧,当我运行它时,它在这条线上失败
self.cardKey=random.sample(self.suitDict,1)。因为 self.suitDict 已经是空的了。