基于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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
基于python判断目录或者文件代码实例
Nov 29 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python字典的值可以修改吗
Jun 29 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python 爬虫性能相关总结
Aug 03 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
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
window.open的功能全解析
2006/10/10 Javascript
JS日历 推荐
2006/12/03 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Python异常处理例题整理
2019/07/07 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
物流专业大学的自我评价
2014/01/11 职场文书
生产厂长岗位职责
2014/02/21 职场文书
家长建议怎么写
2014/05/15 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
意向协议书
2015/01/27 职场文书