1、namedtuple:命名元组,可以创建一个没有方法只有属性的类

from collections import namedtuple
card = namedtuple('card',['rank','suit'])  # rank 牌面大小,suit牌面的花色
# card其实就是namedtuple创建的一个类,其属性就是rank和suit
c1 = card(2,'红心 ')
# c1是实例化的对象
print(c1)
print(c1.suit)

运行结果:

card(rank=2, suit='红心 ')
红心2

2、按照循环顺序,通过对象[索引]任意取牌

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from collections import namedtuple
Card = namedtuple('Card',['rank','suit'])  # rank 牌面大小,suit牌面的花色
class FranchDeck:ranks = [str(n) for n in range(2,11)]+list('JQKA')suits = ['红心','方板','梅花','黑桃']def __init__(self):self._cards = [Card(rank,suit) for rank in FranchDeck.ranks for suit in FranchDeck.suits]# 嵌套循环,每循环一次都拿到一张牌,并且都会存到一个列表中,这个里面的牌是按照循环的顺序的def __getitem__(self, item):return self._cards[item]deck = FranchDeck()
print(deck[10])  # 出现对象加索引的的取法就是触发__getitem__方法

运行结果:

Card(rank='4', suit='梅花')Process finished with exit code 0

3、choice实现随机抽取一张纸牌的过程

from collections import namedtuple
Card = namedtuple('Card',['rank','suit'])  # rank 牌面大小,suit牌面的花色
class FranchDeck:ranks = [str(n) for n in range(2,11)]+list('JQKA')suits = ['红心','方板','梅花','黑桃']def __init__(self):self._cards = [Card(rank,suit) for rank in FranchDeck.ranks for suit in FranchDeck.suits]# 嵌套循环,每循环一次都拿到一张牌,并且都会存到一个列表中,这个里面的牌是按照循环的顺序的def __getitem__(self, item):return self._cards[item]def __len__(self):return len(self._cards)# 实现按照循环循序抽取对应的纸牌
deck = FranchDeck()
print(deck[10])  # 出现对象加索引的的取法就是触发__getitem__方法# 实现随机抽取一张牌的过程
from random import choice
print(choice(deck))
# 注意:# choice能够实现随机抽取纸牌,必须得依赖__len__方法,如果前面没有定义__len__方法就会报错,
# 即只要用到choice就会触发__len__方法

运行结果:

Card(rank='A', suit='梅花')Process finished with exit code 0

4、shuffle实现随机洗牌的过程

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from collections import namedtuple
Card = namedtuple('Card',['rank','suit'])  # rank 牌面大小,suit牌面的花色
class FranchDeck:ranks = [str(n) for n in range(2,11)]+list('JQKA')suits = ['红心','方板','梅花','黑桃']def __init__(self):self._cards = [Card(rank,suit) for rank in FranchDeck.ranks for suit in FranchDeck.suits]# 嵌套循环,每循环一次都拿到一张牌,并且都会存到一个列表中,这个里面的牌是按照循环的顺序的def __getitem__(self, item):return self._cards[item]def __len__(self):return len(self._cards)  # 传纸牌的长度,是从这么多张纸牌里面抽取def __setitem__(self, key, value): self._cards[key] = valuedeck = FranchDeck()
print(deck[10])
# 通过shuffle和__setitem__实现随机洗牌的过程,如果前面没有定义__setitem__方法同样会报错
# 因为随机洗牌的过程索引对应的牌就会发生改变,所以只能通过__setitem__去改变from random import shuffle
shuffle(deck)
print(deck[10])

运行结果:

Card(rank='4', suit='梅花')
Card(rank='K', suit='红心')

总结:

以上纸牌游戏实现随机抽牌,洗牌的过程,仅仅只是用了内置的方法,并没有用我们自己定
义的方法就实现了,需要注意的是: __getitem__与对象[索引],__len__与choice,__setitem__与shuffle

必须同时结合使用

内置函数,内置模块,内置的基础类型<---->类的内置方法,比如:== <--->__eq__,len()<--->__len__

5、总代码----纸牌游戏随机取牌以及洗牌的过程

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 按照循环顺序,通过对象[索引]任意取牌
# choice实现随机抽取一张纸牌的过程
# shuffle实现随机洗牌的过程
import json
from collections import namedtuple
Card = namedtuple('Card',['rank','suit'])  # rank 牌面大小,suit牌面的花色
class FranchDeck:ranks = [str(n) for n in range(2,11)]+list('JQKA')suits = ['红心','方板','梅花','黑桃']def __init__(self):self._cards = [Card(rank,suit) for rank in FranchDeck.ranks for suit in FranchDeck.suits]# 嵌套循环,每循环一次都拿到一张牌,并且都会存到一个列表中,这个里面的牌是按照循环的顺序的def __getitem__(self, item):  # 通过对象[索引]进行触发return self._cards[item]def __len__(self):  # 通过choice进行触发return len(self._cards)  # 传纸牌的长度,是从这么多张纸牌里面抽取def __setitem__(self, key, value):  # 通过shuffle进行触发self._cards[key] = valuedef __str__(self):return json.dumps(self._cards,ensure_ascii=False)  # 序列化deck = FranchDeck()# 通过对象[索引]和__getitem__实现按照循环循序抽取对应的纸牌
print(deck[10])  # 出现对象加索引的的取法就是触发__getitem__方法# 通过choice和__len__实现随机抽取一张牌的过程
from random import choice
print(choice(deck))
# choice能够实现随机抽取纸牌,必须得依赖内置的__len__方法,如果前面没有定义__len__方法就会报错
print(deck[10])# 通过shuffle和__setitem__实现随机洗牌的过程
from random import shuffle
shuffle(deck)
print(deck[10])
print(deck)  # 需要进行序列化才可以print(deck[:5])  # 直接利用对象进行切片

运行结果:

Card(rank='4', suit='梅花')
Card(rank='A', suit='红心')
Card(rank='4', suit='梅花')
Card(rank='A', suit='梅花')
[["6", "梅花"], ["9", "梅花"], ["3", "梅花"], ["9", "方板"], ["4", "方板"], ["Q", "红心"], ["7", "红心"], ["J", "黑桃"], ["8", "梅花"], ["J", "红心"], ["A", "梅花"], ["6", "黑桃"], ["Q", "方板"], ["4", "梅花"], ["10", "红心"], ["A", "红心"], ["4", "红心"], ["7", "方板"], ["5", "黑桃"], ["K", "黑桃"], ["2", "方板"], ["Q", "梅花"], ["2", "黑桃"], ["8", "黑桃"], ["J", "梅花"], ["A", "黑桃"], ["2", "红心"], ["6", "红心"], ["5", "红心"], ["J", "方板"], ["10", "方板"], ["K", "方板"], ["K", "红心"], ["3", "红心"], ["8", "红心"], ["8", "方板"], ["5", "方板"], ["K", "梅花"], ["9", "红心"], ["5", "梅花"], ["7", "黑桃"], ["3", "方板"], ["Q", "黑桃"], ["2", "梅花"], ["7", "梅花"], ["4", "黑桃"], ["9", "黑桃"], ["10", "梅花"], ["6", "方板"], ["3", "黑桃"], ["10", "黑桃"], ["A", "方板"]]
[Card(rank='6', suit='梅花'), Card(rank='9', suit='梅花'), Card(rank='3', suit='梅花'), Card(rank='9', suit='方板'), Card(rank='4', suit='方板')]

用python实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)相关推荐

  1. Python|随机函数——纸牌游戏的发牌机制

    本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 在手机日益重要的当今社会,有很多人都在使用手机上的小程序在玩着各类纸牌游戏.那么今天,我讲述 ...

  2. python内置方法+数学模块+随机模块+序列化模块

    内置方法 abs 绝对值函数 round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数,则进一!) 特点:奇进偶不进 res = round(4.51) #正常的四舍五入 5 res = ro ...

  3. python斗地主游戏源码_python实现斗地主分牌洗牌

    本文实例为大家分享了python实现斗地主分牌洗牌的具体代码,供大家参考,具体内容如下 1.建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的. 2.编写一段代码完成洗牌功能,即将刚才的序 ...

  4. 剑指Offer题目:从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。

    剑指Offer面试题 44:扑克牌的顺子 从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的. 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王 ...

  5. 扑克牌中的顺子。从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。

    面试题36:扑克牌中的顺子 1.题目描述 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字 ...

  6. python全栈开发基础【第十七篇】面向对象反射和内置方法

    一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...

  7. python的内置字典数据类型_python 数据类型元组与字典内置方法

    1.元组 (1)元组是不可变的列表,能存多个值:如果多个值只有取得需求,没有改的需求,用元组最合理 (2)定义:在()内用逗号隔开,可以存任意类型的值 注意:当元组只有一个元素时,要在后面加逗号 # ...

  8. python tkinter出牌洗牌

    python tkinter 出牌洗牌 利用Tkinter模块设计出扑克牌发牌窗体程序,要求4名牌手打牌,计算机随机将52张牌(不含大小王)发给4名牌手,在屏幕上显示每位牌手的牌.程序运行结果如图所示 ...

  9. 0727Python总结-内置方法,数学模块,random随机模块,序列化模块pickle

    一.内置方法 abs 绝对值函数 round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数,则进一!) 特点:奇进偶不进 sum 计算一个序列得和 max 获取一个序列里边的最大值 min 获 ...

最新文章

  1. .NET 框架中的 WMI 命名空间
  2. 商业级全局负载均衡器 zeus.ZXTM 实施方案
  3. keepalived lvs
  4. OpenCV3实现人脸识别(二)——收集要识别的人脸数据集
  5. android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...
  6. 【BIOS大全】释义+设置+精解+释疑————玩转电脑必备工具帖(8)
  7. 从零开始编写自己的C#框架(27)——什么是开发框架
  8. 如何在VS2013中进行Boost单元测试
  9. ubuntu 14.04 16.04 安装caffe+cuda8.0+pycafee总结
  10. 滑动返回-SwipeBackLayout
  11. 《你还在我身旁》 香港中文大学《独立时代》杂志社微情书征文大赛一等奖作品。作者为香港中文大学学生戴畅。
  12. mysql索引实现原理_Mysql索引原理
  13. C语言第三节关键字、标识符、注释
  14. Shell脚本学习-阶段十六-备份和恢复系统权限
  15. bzoj2002:[Hnoi2010]Bounce 弹飞绵羊
  16. VS中依赖库相对路径的配置及项目间依赖项
  17. 声学计算机软件,常用声学仿真软件汇总
  18. jdbc查mysql_mysql的查询及连接JDBC数据库
  19. Windows如何后台运行bat文件
  20. html问号字符串,问号html

热门文章

  1. 设计一个Dog类,包含名字,年龄,颜色三个属性
  2. android 屏幕统计,OffScreen - 屏幕时间统计
  3. 小米ES Pro和X Pro对比有什么区别?哪个更值得入手
  4. 弘辽科技:淘宝直通车推广无展现?该从何入手?
  5. WPS格式文件转换图片格式如何实现
  6. 构建创新数字基础设施,中泰证券携手华为迈进数字化转型“快车道”
  7. iphoneX布局适配及iOS 11.0系统适配
  8. Visualising Residuals
  9. idea 断点debug没有勾勾,导致调试无效
  10. 从虚拟化前端Bug学习分析Kernel Dump