写在前面

昨天学习了怎么用namedtuple()方法生成一张纸牌的类。今天继续学习怎么生成一摞纸牌。

一摞有风格的纸牌之一摞

流畅的Python中给出的第一个例子是一摞有序的纸牌:

import collections# 一摞有序的纸牌Card = collections.namedtuple('Card', ['rank', 'suit']) class FrenchDeck: ranks = [str(n) for n in range(2,11)] + list('JQKA') suits = 'spades diamonds clubs hearts'.split() def __init__(self): self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, position): return self._cards[position]

上一节学习了Card类,这一节看一下FrenchDeck中的内容。

ranks是一个列表,在这个列表中,共有13个字符,为2到11和‘JQKA’,这就是列表表达式。

suits是一个代表扑克牌4中花色的列表,这个列表是通过切割字符串得到的。

初始化方法中,对一摞纸牌进行了初始化,并赋值给self._cards,这里为什么要加下划线呢?意义在哪里?

import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])ranks = [str(n) for n in range(2,11)] + list('JQKA') suits = 'spades diamonds clubs hearts'.split() cards = [Card(rank, suit) for suit in suits for rank in ranks] for r, s in cards: print({r: s}) >>> {'2': 'spades'} {'3': 'spades'} {'4': 'spades'} ... {'Q': 'hearts'} {'K': 'hearts'} {'A': 'hearts'}

说明:单下划线开头的变量,标明是一个受保护(protected)的变量,原则上不允许直接访问,但外部类还是可以访问到这个变量。这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。

FrenchDeck类中的__len__()方法是一个特殊方法,获取这摞扑克牌的长度,及统计共有多少张扑克牌。

FrenchDeck类中的__getitem__()方法也是一个特殊方法,用以获取这摞扑克牌中的一张扑克牌。

思考

  • 怎么获取这摞扑克牌中的第一张,第10张,最后一张?
  • 怎么随机获取一张扑克牌?--需要导入:random.choice
  • 怎么对扑克牌进行切片操作?
  • 怎么对扑克牌进行迭代操作,打印出所有的扑克牌?

写在后面

学习了这节内容,第一反应是,哇哦~我可以用Python写出99乘法表了,心动不如行动:

# 99乘法表
from collections import namedtuple
Rank = namedtuple('Rank', ['row', 'column'])table = [Rank(row, column) for row in range(1,10) for column in range(1, 10)] print(table) for row, column in table: # print("%d*%d=%2d" % (row, column, row * column), end=' ') print(row * column, end=' ') # OMG 怎么打印出99乘法表的格式呢? if column == 9: print("") >>> 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

最后的结果如上,但是这不是我想要的啊,我想要的是小时候文具盒上那样的:

TIPS: 这个故事告诉我们,你以为你会了,其实你还什么都不会。

转载于:https://www.cnblogs.com/catleer/p/6838870.html

1-1 一摞有风格的纸牌之一摞相关推荐

  1. python中扑克牌类设计_一摞Python风格的纸牌

    一摞Python风格的纸牌 接下来我会用一个非常简单的例子来展示如何实现 getitme 和 len 这两个特殊方法,通过这个例子我们也能见识到特殊方法的强 大. 示例 1-1 里的代码建立了一个纸牌 ...

  2. 1-1 一摞有风格的纸牌之一张纸牌

    写在前面 流畅的Python第一章的主题是讲数据模型.Python中的数据模型是指什么呢?Honestly,我也不知道. 虽然潜意识中认为所谓数据模型是指对数据的处理及构建,那具体的处理和构建方式又是 ...

  3. 一摞python风格的纸牌(fluent python阅读)

    这一节会展示如何实现__getitem__和__len__这两个特殊的方法 首先看一个利用python构建的纸牌类,这个例子短小却包含了python一些非常重要的特征: import collecti ...

  4. python抽样不同花色纸牌_Python 数据模型 一摞Python风格的纸牌

    定义一个纸牌类 import collections Card = collections.namedtuple('Card', ['rank', 'suit']) class FrenchDeck: ...

  5. 一摞Python风格的麻将

    一摞Python风格的麻将-1 对于一个从JAVA过渡过来的Python 使用者,我很有一段时间对len(collection)而不是collection.len()这种写法感到不适.随着理解的深入, ...

  6. python 数据模型

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 129 篇文章,本文大约  4500 字,阅读大约需要 15 分钟 最 ...

  7. 流畅的python第一章_《流畅的Python》第一章学习笔记

    一摞python风格的纸牌from collections import namedtuple Card = namedtuple('Card', ['rank', 'suit']) # 构建只有少数 ...

  8. 流畅的python 数据模型

    一摞python风格的纸牌 import collections from random import choice card = collections.namedtuple("card& ...

  9. 流畅的Python读书笔记

    流畅的Python 说明 我发现流畅的python更适合我现在看,因为它写的很详细.而effective python知识点不是很连贯,我先看完这本书,再去过一遍effective python吧! ...

最新文章

  1. 机器学习Basics-第九期-CNN卷积神经网络详解
  2. 关于安卓录屏的权限问题
  3. (2)JavaScript数据类型
  4. 柳青:2017,滴滴实现规模增长和修炼内功的一年
  5. java保存数字_Java:JFormattedTextField保存数字
  6. export LD_LIBRARY_PATH 的使用
  7. ab并发负载压力测试
  8. BeyondCompare This license key has been revoked:
  9. 190330每日一句
  10. 简单网络传递加密数据
  11. ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
  12. 2020定额水平测算——“15定额工程”一键转换“20定额工程”
  13. wifi良好,手机可以连接网络,电脑连接不上网络,解决方法
  14. 工作中那些让人印象深刻的BUG(2)
  15. scrapy 去重 dont_filter=False
  16. CSS基础(二)--盒模型与浮动
  17. 微信小程序九宫格抽奖
  18. 华为云Stack深度驱动金融行业智能化升级
  19. Stata:双重差分的固定效应模型-(DID)
  20. 独家 | 5G已起跑,目前有哪些应用抢先落地?

热门文章

  1. jsp文字上下居中显示_怎么把jsp的文字居中
  2. 急诊与灾难医学-重点以及习题
  3. GlobeLand30影像下载、去除黑边、镶嵌、裁剪、重分类
  4. 【第64期】豆瓣9.8分,周志明的《凤凰架构》
  5. 求最小公倍数(C++牛客网)
  6. html 设置卯位置,周易基础知识:十二地支之卯木
  7. 长沙理工大学计算机赞教授,大学IT达人在全国大赛获金奖 刷新了湖南省最好成绩...
  8. Sass函数-Miscellaneous函数(三元条件函数)
  9. Win10桌面图标显示不正常,变为白色
  10. 服务器中imm的作用,联想X系列服务器IMM2(集成管理模块)基本操作