基于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中getaddrinfo()基本用法实例分析
Jun 28 Python
python 调用c语言函数的方法
Sep 29 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
python中rc1什么意思
Jun 19 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
js option删除代码集合
2008/11/12 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python内置函数的用法实例教程
2014/09/08 Python
python使用psutil模块获取系统状态
2016/08/27 Python
Python执行时间的计算方法小结
2017/03/17 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
Python退火算法在高次方程的应用
2018/07/26 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
详解Python_shutil模块
2019/03/15 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
PyQt5实现画布小程序
2020/05/30 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
优秀管理者获奖感言
2014/02/17 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
通用自荐信范文
2014/03/14 职场文书
歼十出击观后感
2015/06/11 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python