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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
Python人脸识别初探
Dec 21 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
python3下pygame如何实现显示中文
Jan 11 Python
python中id函数运行方式
Jul 03 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 Python
Python 文本滚动播放器的实现代码
Apr 25 Python
Python 实现定积分与二重定积分的操作
May 26 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的ASP防火墙
2006/10/09 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
js实现点击添加一个input节点
2014/12/05 Javascript
jQuery链使用指南
2015/01/20 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
vue的keep-alive用法技巧
2019/08/15 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Django框架模板介绍
2019/01/15 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
Python操作Excel的学习笔记
2021/02/18 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
C语言50道问题
2014/10/23 面试题
vue路由实现登录拦截
2021/03/24 Vue.js
2014年高中教师工作总结
2014/12/19 职场文书
学校证明范文
2015/06/24 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
结婚主持人致辞
2015/07/28 职场文书
python ansible自动化运维工具执行流程
2021/06/24 Python