基于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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
python自定义解析简单xml格式文件的方法
May 11 Python
python实现音乐下载器
Apr 15 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
Django配置文件代码说明
Dec 04 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
jupyter实现重新加载模块
Apr 16 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
python如何处理程序无法打开
Jun 16 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 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编译安装时常见错误解决办法
2015/05/28 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
浅谈python数据类型及类型转换
2017/12/18 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python and or用法详解
2019/06/26 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
服务质量承诺书
2014/03/27 职场文书
百日安全活动总结
2014/05/04 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
节约用电通知
2015/04/25 职场文书
负责培养人意见
2015/06/05 职场文书
在校证明模板
2015/06/17 职场文书
《称赞》教学反思
2016/02/17 职场文书