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操作xml文件示例
Apr 07 Python
使用pdb模块调试Python程序实例
Jun 02 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
使用tensorflow实现线性svm
Sep 07 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
python实现二分类的卡方分箱示例
Nov 22 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python autoescape标签用法解析
Jan 17 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
总结Python使用过程中的bug
Jun 18 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变量内存分配问题记录整理
2013/11/27 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
Python3.x中自定义比较函数
2015/04/24 Python
Python实现简单的代理服务器
2015/07/25 Python
python实现数据图表
2017/07/29 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
营销总监岗位职责范本
2014/02/26 职场文书
项目采购员岗位职责
2014/04/15 职场文书
秋天的雨教学反思
2014/04/27 职场文书
企业文化宣传标语
2014/06/09 职场文书
护士业务学习心得体会
2016/01/25 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang