基于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 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
python列表生成式与列表生成器的使用
Feb 23 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python使用Matplotlib绘制分段函数
Sep 25 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
JS 统计时间
2021/03/09 Javascript
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
用python对excel查重
2020/12/07 Python
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
珍惜资源的建议书
2014/08/26 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
骨干教师个人总结
2015/02/11 职场文书
离婚答辩状范文
2015/05/22 职场文书
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技