乐趣区

关于python:关于扑克牌的一些讨论Fluent-Python-2读书笔记

一、阐明

参考资料为维基百科的 Playing Card 词条,非严肃性论证,只是对代码为什么这么写做探讨。

二、扑克牌的起源

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]

类名为“FrenchDeck”——看书的时候还好奇为什么应用“French”呢,难道扑克牌是法国人创造的?依据维基百科的解释: The most common type of playing card is that found in the French-suited,standard 52-card deck. 即最常见的纸牌类型是法国式的规范 52 张纸牌(注:代码里没包含“鬼牌”)。

三、花色程序

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)


def spades_high(card):
    rank_value = FrenchDeck.ranks.index(card.rank)
    return rank_value * len(suit_values) + suit_values[card.suit]

花色程序为:spades(黑桃) > hearts(红桃) > diamonds(方块) > clubs(梅花)(注:能够按首字母程序进行记忆:s > h > d > c)。(注:花色的名称和程序在不同的中央稍有不同,在我本人的他乡是:spades(大花) > hearts(马屁) > clubs(梅花) > diamonds(尖肝))

四、beer card

>>> beer_card = Card('7', 'diamonds')
>>> beer_card
Card(rank='7', suit='diamonds')

看到 “beer_card” 的时候,也是好奇为啥用 “beer” 呢?参考维基百科 Beer card 词条,beer card 是对方块 7 的非正式称说,至于游戏怎么玩,我不是很懂,这里不赘述。

退出移动版