基于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 初始化多维数组代码
Sep 06 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
python之Socket网络编程详解
Sep 29 Python
python中使用zip函数出现错误的原因
Sep 28 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
django rest framework 过滤时间操作
Jul 12 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python绘制汉诺塔
Mar 01 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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新手上路(十)
2006/10/09 PHP
php基础学习之变量的使用
2011/06/09 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
JavaScript跨域方法汇总
2014/10/16 Javascript
js中document.write的那点事
2014/12/12 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
python读取二进制mnist实例详解
2017/05/31 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
深入理解Python中的super()方法
2017/11/20 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
详解python做UI界面的方法
2019/02/27 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
python文件编写好后如何实践
2020/07/07 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
2014年公司工作总结
2014/11/22 职场文书
工作感想范文
2015/08/07 职场文书