Python内置方法的应用--纸牌游戏

import json
Card=namedtuple('Card',['tank','suit'])
class Deck:
    __tanks=[str(n) for n in range(2,11)]+list('JQKA')
    __suits=['黑桃','红心','方块','梅花']
    def __init__(self):
        self.__card=[Card(tank,suit) for tank in self.__tanks
                                        for suit in self.__suits]

    def __getitem__(self, item):
        return self.__card[item]
    def __setitem__(self, key, value):
        self.__card[key]=value
    def __str__(self):
        return json.dumps(self.__card,ensure_ascii=False)
    def __len__(self):
        return len(self.__card)
#1.查看所有牌.实现print(),前提是重新的__str__方法
deck=Deck()
print(deck)
#2.通过choice,抓一张牌,前提是重新实现了__getitem__方法.因为choice只能调用序列化seq的对象。且
# 而实现seq对象的内置方法是__getitem
from random import choice
print(choice(deck[5]))
#3.通过shuffle,洗牌。洗牌一样是只有调用序列化seq对象,即要重新实现__setitem__方法,同时洗牌要建立在有长度的情况。
#故要重新实现len方法
from random import shuffle
shuffle(deck)
print(deck)

 

posted @ 2019-01-21 10:51  hisweetyGirl  阅读(677)  评论(0编辑  收藏  举报