基于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判断一个集合是否为另一个集合的子集方法
May 04 Python
Python for循环中的陷阱详解
Jul 13 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
python 获取等间隔的数组实例
Jul 04 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python生成词云的实现代码
Jan 14 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
浅谈Python 函数式编程
Jun 20 Python
python中slice参数过长的处理方法及实例
Dec 15 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
element中的$confirm的使用
2020/04/26 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
python实现用户登录系统
2016/05/21 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python实现数据写入excel表格
2018/03/25 Python
python+opencv识别图片中的圆形
2020/03/25 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
Python检查ping终端的方法
2019/01/26 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
英国现代市场:ARKET
2019/04/10 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
英语教师求职信
2014/06/16 职场文书
普通话宣传标语
2014/06/26 职场文书
付款委托书范本
2014/10/05 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书