基于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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python多线程http下载实现示例
Dec 30 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
浅谈五大Python Web框架
Mar 20 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
python实现按长宽比缩放图片
Jun 07 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
对python中return与yield的区别详解
Mar 12 Python
Python实现猜年龄游戏代码实例
Mar 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
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
Angular实现响应式表单
2017/08/04 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
pygame播放音乐的方法
2015/05/19 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python3几个常见问题的处理方法
2019/02/26 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
如何在Python对Excel进行读取
2020/06/04 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
python 简单的调用有道翻译
2020/11/25 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
工会工作先进事迹
2014/08/18 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
运动会加油稿30字
2015/07/21 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS