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中规范定义命名空间的一些建议
Jun 04 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Python生成器以及应用实例解析
Feb 08 Python
解决Python安装后pip不能用的问题
Jun 12 Python
Django实现分页功能
Jul 02 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python 表格打印代码实例解析
Oct 12 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 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分页函数
2006/10/09 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
再谈JavaScript线程
2015/07/10 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
JavaScript链式调用实例浅析
2018/12/19 Javascript
Python+pandas计算数据相关系数的实例
2018/07/03 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
python手写均值滤波
2020/02/19 Python
python实现梯度法 python最速下降法
2020/03/24 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Keras 使用 Lambda层详解
2020/06/10 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
毕业生医学检验求职信
2013/10/16 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
语文教研活动总结
2014/07/02 职场文书
五好家庭申报材料
2014/12/20 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL