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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
利用python画一颗心的方法示例
Jan 31 Python
使用requests库制作Python爬虫
Mar 25 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
使用python实现ftp的文件读写方法
Jul 02 Python
python读取Excel表格文件的方法
Sep 02 Python
pycharm永久激活超详细教程
Oct 29 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 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动态生成虚拟现实VRML网页
2006/10/09 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
python如何写个俄罗斯方块
2020/11/06 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
行政主管岗位职责
2013/11/18 职场文书
银行职业规划书范文
2013/12/28 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
承诺函范文
2015/01/21 职场文书
离婚财产分割协议书
2015/08/11 职场文书
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android