Python用类实现扑克牌发牌的示例代码


Posted in Python onJune 01, 2020

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

到此这篇关于Python用类实现扑克牌发牌的示例代码的文章就介绍到这了,更多相关Python 扑克牌发牌内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
在Linux下调试Python代码的各种方法
Apr 17 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
python中requests库session对象的妙用详解
Oct 30 Python
python 实现A*算法的示例代码
Aug 13 Python
python中cPickle类使用方法详解
Aug 27 Python
用Python实现读写锁的示例代码
Nov 05 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
Python restful框架接口开发实现
Apr 13 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 #Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 #Python
k-means 聚类算法与Python实现代码
Jun 01 #Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 #Python
python如何写出表白程序
Jun 01 #Python
python中os包的用法
Jun 01 #Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 #Python
You might like
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
yii添删改查实例
2015/11/16 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
理解Javascript_08_函数对象
2010/10/15 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
python利用正则表达式提取字符串
2016/12/08 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
物业经理求职自我评价
2013/09/22 职场文书
单位未婚证明范本
2014/01/18 职场文书
网络管理专业求职信
2014/03/15 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
企业消防安全责任书
2014/07/23 职场文书
会议欢迎词
2015/01/23 职场文书
医生个人年终总结
2015/02/28 职场文书
廉政承诺书2015
2015/04/28 职场文书
故意伤害辩护词
2015/05/21 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python