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爬虫之神器正则表达式
Nov 06 Python
Python中的生成器和yield详细介绍
Jan 09 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
python 读写中文json的实例详解
Oct 29 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
python tkinter实现定时关机
Apr 21 Python
python使用glob检索文件的操作
May 20 Python
微信小程序调用python模型
Apr 21 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
什么是短波收听SWL
2021/03/01 无线电
PHP脚本数据库功能详解(中)
2006/10/09 PHP
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
Jquery 扩展方法
2010/05/06 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
Python 读写文件的操作代码
2018/09/20 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
基于python实现文件加密功能
2020/01/06 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
仓库管理制度
2014/01/21 职场文书
单位活动策划方案
2014/08/17 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers