基于Python制作一副扑克牌过程详解


Posted in Python onOctober 19, 2020

整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王、小王之后的 52 张扑克牌,并实现随机抽牌、排序、洗牌等功能;

创建一个纸牌类

一副扑克除去大王小王之外,剩下的 52 张纸牌以花色为基准(梅花、方块、黑桃、红心)可分为 4 组,每组有 13 张牌组成;因此可创建两个列表一个来存储花色,一个存储 13 个字符;通过两个列表之间的随机组合来生成 52 张纸牌,

代码如下:

基于Python制作一副扑克牌过程详解

代码中通过collections.namedtuple模块创建一个类来表示一幅纸牌,['rank','suit']分别表示纸牌中的字符(2-10,J-A)和花色;

FranchDeck 类来建 52 张纸牌,其中有两个特殊方法,len() 返回纸牌数量,__getitem__() 获取 position(索引) 下的指定纸牌

基于Python制作一副扑克牌过程详解

随机抽取一张牌

这里借助 random 模块实现随机抽牌的功能

基于Python制作一副扑克牌过程详解

列表迭代、切片

因为 __getitem__ 方法 把 [] 操作交给 self._cards 列表 ,除了上面提到的 index 定位之外,FranckDeck() 类还可实现切片、迭代操作;

基于Python制作一副扑克牌过程详解

排序操作

常规来说,依据点数来判断扑克牌的大小的话,2最小,A最大。实现点数排序是比较简单的,在创建点数列表时是以上面提到顺序进行创建,排序时只需按照 点数所在 index 作为基准进行排序即可,

除了 点数之外还有一个 花色也需要考虑,对于花色的话,需要建立一个映射基准(也可以称之为权重),不同花色赋予不同值;Python 的字典类型可以很方面地满足我们的需要

基于Python制作一副扑克牌过程详解

代码解读:

1,代码中利用字典加入了一个映射机制,黑桃为3,红心为2,方块次之,随后梅花;2,创建 spades_high 函数来计算 每张牌的权重总值;3,利用 sorted() 函数 key= spades_high 来作为排序基准,来实现扑克牌排序

洗牌操作

洗牌简单来说就是对一副扑克牌重新进行无规则地排序;正常情况random.shuffle 可以很方面地实现这个功能,但前提需要保证对象 满足可变协议,这里 FranchDeck() 是不满足的,直接使用的话会报错:

基于Python制作一副扑克牌过程详解

对于上面问题,只需要要把 此类由不变变成可变的即可,创建一个函数赋值为 __setitem__ 属性

基于Python制作一副扑克牌过程详解

这里抽取到打乱前后纸牌的前 5 个元素,已经实现洗牌的功能了!

根据以上的代码部分,可以进一步开发, 提前设计好 54 张扑克牌的可视化图片,

基于Python制作一副扑克牌过程详解

创建一个 key:value 映射关系,对扑克牌字符与可视化图片之间创建一个映射关系,如下图所示,把此关系集存储到指定数据库或文件中,后面使用后可直接调用

基于Python制作一副扑克牌过程详解

按照上面的进阶玩法就可以创建一个基于Python开发扑克牌小程序!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的id()函数指的什么
Oct 17 Python
Python实现的桶排序算法示例
Nov 29 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
python批量识别图片指定区域文字内容
Apr 30 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
python实现画出e指数函数的图像
Nov 21 Python
python 实现一个反向单位矩阵示例
Nov 29 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
Python实现壁纸下载与轮换
Oct 19 #Python
Python调用REST API接口的几种方式汇总
Oct 19 #Python
Python爬虫抓取论坛关键字过程解析
Oct 19 #Python
python MD5加密的示例
Oct 19 #Python
python Yaml、Json、Dict之间的转化
Oct 19 #Python
Python pip 常用命令汇总
Oct 19 #Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 #Python
You might like
PHP中MD5函数使用实例代码
2008/06/07 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
把pandas转换int型为str型的方法
2019/01/29 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
Python assert语句的简单使用示例
2019/07/28 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
"引用"与多态的关系
2013/02/01 面试题
幼儿园中秋节活动方案2013
2014/01/29 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
经典英文广告词
2014/03/18 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android