基于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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python如何实现文本转语音
Aug 08 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python实现FTP文件传输的实例
Jul 07 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
pytorch实现线性拟合方式
Jan 15 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
python中实现栈的三种方法
Dec 19 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
Zend studio文件注释模板设置方法
2013/09/29 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
python监控进程脚本
2018/04/12 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
市场营销大学生职业规划书
2014/02/25 职场文书
军事博物馆观后感
2015/06/05 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
MySQL索引是啥?不懂就问
2021/07/21 MySQL
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android