流畅的python-扑克牌

本文将探讨如何使用Python高效地实现扑克牌游戏。我们将研究如何创建扑克牌库,洗牌,发牌以及一些基本的游戏逻辑。通过实例代码,你将了解Python在处理这类问题时的灵活性和优雅性。
摘要由CSDN通过智能技术生成
# -*-coding:utf-8-*-
import collections
from random import choice, choices

Card = collections.namedtuple('Card', ['rank', 'suit'])  # 创建只包含基础属性的类
bear = Card("7", "555")
print(choice([2, 4, 5, 6, 7]))  # 从迭代器中随机取值
print(choices([2, 4, 5, 6, 7], k=3)) # 从迭代器中随机取值3次


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):   # 迭代器方法len()
        return len(self._cards)

    def __getitem__(self, position):  # 迭代器方法deck[]
        return self._cards[position]


if __name__ == "__main__":
    deck = FrenchDeck()
    suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)


    def spades_high(card):  # 根据类Card的对象rank进行排序方法
        rank_value = FrenchDeck.ranks.index(card.rank)
        return rank_value * len(suit_values) + suit_values[card.suit]


    for card in sorted(deck, key=spades_high):
        print(card)
    print("abcdea".count("a"))  # 出现的次数
    print("aaabbb".replace("a", "d"))  # 替换方法

"""
表1-1:跟运算符无关的特殊方法
类别
方法名
字符串 / 字节序列表示形式
__repr__、__str__、__format__、__bytes__
数值转换
__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__
集合模拟
__len__、__getitem__、__setitem__、__delitem__、__contains__
迭代枚举
__iter__、__reversed__、__next__
可调用模拟
__call__
上下文管理
__enter__、__exit__
实例创建和销毁
__new__、__init__、__del__
属性管理
__getattr__、__getattribute__、__setattr__、__delattr__、__dir__
属性描述符
__get__、__set__、__delete__
跟类相关的服务
__prepare__、__instancecheck__、__subclasscheck__
表1-2:跟运算符相关的特殊方法
类别
方法名和对应的运算符
一元运算符
__neg__ -、__pos__ +、__abs__ abs()
众多比较运算符
__lt__ <、__le__ <=、__eq__ ==、__ne__ !=、__gt__ >、__ge__ >=
算术运算符
__add__ +、__sub__ -、__mul__ *、__truediv__ /、__floordiv__ //、__mod__ %、__divmod__ divmod()、__pow__ ** 或pow()、__round__ round()
反向算术运算符
__radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、__rdivmod__、__rpow__
增量赋值算术运算符
__iadd__、__isub__、__imul__、__itruediv__、__ifloordiv__、__imod__、__ipow__
位运算符
__invert__ ~、__lshift__ <<、__rshift__ >>、__and__ &、__or__ |、__xor__ ^
反向位运算符
__rlshift__、__rrshift__、__rand__、__rxor__、__ror__
增量赋值位运算符
__ilshift__、__irshift__、__iand__、__ixor__、__ior__
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值