基于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函数参数类型*、**的区别
Apr 11 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
Python实现登录接口的示例代码
Jul 21 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
python实现学生成绩测评系统
Jun 22 Python
Numpy数组的广播机制的实现
Nov 03 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 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从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
python字典get()方法用法分析
2015/04/17 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
Python 装饰器使用详解
2017/07/29 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
django和flask哪个值得研究学习
2020/07/31 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
小学生打架检讨书
2014/01/26 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
CSS基础详解
2021/10/16 HTML / CSS