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最后的結果如上,但是這不是我想要的啊,我想要的是小時候文具盒上那樣的:
TIPS: 這個故事告訴我們,你以為你會了,其實你還什么都不會。
轉載于:https://www.cnblogs.com/catleer/p/6838870.html
總結
以上是生活随笔為你收集整理的1-1 一摞有风格的纸牌之一摞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab圈和叉,画圈圈和画叉叉的区别
- 下一篇: 汇编语言中逻辑运算符