基于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遍历numpy数组的实例
Apr 04 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 Python
Python时间操作之pytz模块使用详解
Jun 14 Python
python数字图像处理之图像的批量处理
Jun 28 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
Session的工作方式
2006/10/09 PHP
关于文本留言本的分页代码
2006/10/09 PHP
Snoopy类使用小例子
2008/04/15 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
雅虎笔试题(字符串操作)
2015/03/24 面试题
班队活动设计方案
2014/01/30 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书