Python用类实现扑克牌发牌的示例代码
1.题目
编写程序,4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌。
提示:
设计出3个类:Card类、Hand类和Poke类。
Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值“梅”为梅花,“方”为方块,“红”为红心,“黑”为黑桃。
Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手。
Poke类代表一副牌,可以把一副牌看作是有52张牌的牌手,所以继承Hand类。
1.1输出样例
Thisisamodulewithclassesforplayingcards.
牌手1:红桃6 黑桃6 梅花A 方片6 黑桃2 梅花10 红桃3 方片4 方片10 黑桃J 红桃Q 红桃10 红桃8
牌手2:梅花J 梅花9 红桃7 红桃2 方片K 黑桃K 梅花3 方片7 黑桃Q 黑桃10 梅花Q 梅花8 黑桃7
牌手3:梅花2 方片A 黑桃3 方片9 黑桃4 红桃K 红桃J 梅花7 红桃4 方片2 梅花4 梅花6 红桃5
牌手4:黑桃5 红桃9 方片8 梅花5 方片J 黑桃A 梅花K 方片5 黑桃9 方片3 黑桃8 方片Q 红桃A
2.题解
2.1代码
#Card类:一张牌 classCard: """Aplayingcard.card""" RANKS=['A','2','3','4','5','6','7','8','9','10','J','Q','K'] SUITS=['梅花','方片','红桃','黑桃'] def__init__(self,rank,suit,face_up=True): self.rank=rank#牌面数字1~13 self.suit=suit#花色 self.is_face_up=face_up#是否显示牌的正面,True为正面,False为反面 def__str__(self):#重写print()方法,打印一张牌的信息 ifself.is_face_up: rep=self.suit+self.rank else: rep='XX' returnrep defpic_order(self):#牌的顺序号 ifself.rank=='A': FaceNum=1 elifself.rank=='J': FaceNum=11 elifself.rank=='Q': FaceNum=12 elifself.rank=='K': FaceNum=13 else: FaceNum=int(self.rank) ifself.suit=='梅花': Suit=1 elifself.suit=='方片': Suit=2 elifself.suit=='红桃': Suit=3 else: Suit=4 return(Suit-1)*13+FaceNum defflip(self):#翻牌方法 self.is_face_up=notself.is_face_up #Hand类:一手牌 classHand: """AhandofplayingcardsHand""" def__init__(self): self.cards=[]#cards列表变量存储牌手手里的牌 def__str__(self):#重写print()方法,打印出牌手的所有牌 ifself.cards: rep='' forcardinself.cards: rep+=str(card)+'\t' else: rep='无牌' returnrep defclear(self):#清空手里的牌 self.cards=[] defadd(self,card):#增加手里的牌 self.cards.append(card) defgive(self,card,other_hand):#把一张牌给其他选手 self.cards.remove(card) other_hand.add(card) #other_hand.append(card)#上面两行可以用这一行代替 #Poke类:一副牌 #继承Hand类 classPoke(Hand): """Poke类代表一副牌,可以看做是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌 而且要发牌,洗牌,所以增加方法如下方法:""" defpopulate(self):#生成一副牌 forsuitinCard.SUITS: forrankinCard.RANKS: self.add(Card(rank,suit)) defshuffle(self):#洗牌 importrandom random.shuffle(self.cards)#打乱牌的顺序 defdeal(self,hands,per_hand=13):#将牌发给玩家,每人默认13张牌 forroundsinrange(per_hand): forhandinhands: ifself.cards: top_card=self.cards[0] self.cards.remove(top_card) hand.add(top_card) #self.give(top_card,hand)#上两句可以用此句替换 else: print('不能继续发牌了,牌已经发完了!') if__name__=="__main__": print('Thisisamodulewithclassesforplayingcards.') players=[Hand(),Hand(),Hand(),Hand()] poke1=Poke() poke1.populate()#生成一副牌 poke1.shuffle()#洗牌 poke1.deal(players,13)#发给每人13张牌 n=1 forhandinplayers: print('牌手',n,end=':') print(hand) n=n+1
到此这篇关于Python用类实现扑克牌发牌的示例代码的文章就介绍到这了,更多相关Python扑克牌发牌内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!