1. 题目
编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌。
提示:
设计出3个类:Card类、Hand类和Poke类。
Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值“梅”为梅花,“方”为方块,“红”为红心,“黑”为黑桃。
Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手。
Poke类代表一副牌,可以把一副牌看作是有52张牌的牌手,所以继承Hand类。
1.1 输出样例
This is a module with classes for playing cards.
牌手 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类:一张牌 class Card: """A playing card.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()方法,打印一张牌的信息 if self.is_face_up: rep = self.suit + self.rank else: rep = 'XX' return rep def pic_order(self): # 牌的顺序号 if self.rank == 'A': FaceNum = 1 elif self.rank == 'J': FaceNum = 11 elif self.rank == 'Q': FaceNum = 12 elif self.rank == 'K': FaceNum = 13 else: FaceNum = int(self.rank) if self.suit == '梅花': Suit = 1 elif self.suit == '方片': Suit = 2 elif self.suit == '红桃': Suit = 3 else: Suit = 4 return (Suit - 1) * 13 + FaceNum def flip(self): # 翻牌方法 self.is_face_up = not self.is_face_up # Hand类:一手牌 class Hand: """A hand of playing cards Hand""" def __init__(self): self.cards = [] # cards列表变量存储牌手手里的牌 def __str__(self): # 重写print()方法,打印出牌手的所有牌 if self.cards: rep = '' for card in self.cards: rep += str(card) + '\t' else: rep = '无牌' return rep def clear(self): # 清空手里的牌 self.cards = [] def add(self, card): # 增加手里的牌 self.cards.append(card) def give(self, card, other_hand): # 把一张牌给其他选手 self.cards.remove(card) other_hand.add(card) # other_hand.append(card) # 上面两行可以用这一行代替 # Poke类:一副牌 # 继承Hand类 class Poke(Hand): """Poke类代表一副牌,可以看做是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌 而且要发牌,洗牌,所以增加方法如下方法:""" def populate(self): # 生成一副牌 for suit in Card.SUITS: for rank in Card.RANKS: self.add(Card(rank, suit)) def shuffle(self): # 洗牌 import random random.shuffle(self.cards) # 打乱牌的顺序 def deal(self, hands, per_hand=13): # 将牌发给玩家,每人默认13张牌 for rounds in range(per_hand): for hand in hands: if self.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('This is a module with classes for playing cards.') players = [Hand(), Hand(), Hand(), Hand()] poke1 = Poke() poke1.populate() # 生成一副牌 poke1.shuffle() # 洗牌 poke1.deal(players, 13) # 发给每人13张牌 n = 1 for hand in players: print('牌手', n, end=':') print(hand) n = n + 1
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 《山羊模拟器重制版》发售平台说明
- 刘德华2002-美丽的一天[香港首批大包装首版][WAV]
- 刘文正《金装刘文正不朽经典金曲》2CD(1995环星)][WAV+CUE]
- 周慧敏《94美的化身演唱会》宝丽金1995港版2CD[WAV+CUE]
- 娃娃.1997-精选180绝版冠军精丫滚石】【WAV+CUE】
- 娃娃.1997-精选290巅峰情歌经典【滚石】【WAV+CUE】
- 王忆灵.2024-枯萎颂【FLAC分轨】
- 林墨《绿色的风》[320K/MP3][22.6MB]
- 林墨《绿色的风》[FLAC/分轨][98.61MB]
- 群星《奥运加油热歌精选》[320K/MP3][87.73MB]
- 2024的炼金龙魂是什么效果 英雄联盟炼金龙魂效果介绍
- lol全球总决赛2024冠军是哪个队伍 2024全球总决赛冠军介绍
- 英雄联盟zofgk是什么意思 英雄联盟zofgk解释一览
- 如何评价《剑星》联动《尼尔》新服装、照相模式?
- 华沙保时捷经销商展出911Turbo:强尼银手同款