1-1 一摞有风格的纸牌之一摞

写在前面

昨天学习了怎么用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

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

image

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值