码迷,mamicode.com
首页 > 编程语言 > 详细

用python实现一个小游戏——抽牌

时间:2019-02-28 18:13:21      阅读:456      评论:0      收藏:0      [点我收藏+]

标签:value   ret   div   统计   字符串   ensure   style   序列化   自动   

想要实现一个抽牌的功能,有很多种实现方法,这时候我们创造一个对象,通过内置方法来完成这个功能:

# Author:Zhang Zhao
# -*-coding:utf-8-*-
from collections import namedtuple
Card = namedtuple(card,[rank,suit]) #创建一个元组,具有名字
import json
class FranchDeck(object):
    rank = [str(i) for i in range(2,11)] + list(JQKA) #代表牌的大小,字符串类型
    suit = [红心,方板,黑桃,梅花] #代表牌的花色
    def __init__(self):
        self._cards = [Card(rank,suit) for rank in FranchDeck.rank
                                           for suit in FranchDeck.suit] #创建一副牌,没有大小王
    def __getitem__(self, item): #抽牌运用random中的chioce方法,需要的元素有字典还有长度
        return self._cards[item]
    def __len__(self):
        return len(self._cards)
    def __setitem__(self, key, value):#洗牌需要用到
        self._cards[key] = value
    def __str__(self):
        return json.dumps(self._cards,ensure_ascii=False)#打印牌为列表,但__str__方法打印的是字符串格式,需要进行序列化
a = FranchDeck()

from random import choice
print(choice(a))
print(choice(a))
print(a[4])
print(a)
from random import shuffle
shuffle(a)
print(a[4])

同时拓展一下,如果要实现一个人员信息统计,但是每年人员的姓名性别等信息不会变,变的只是年龄等信息,那么我们再录入信息的时候,为了防止系统里的对象重复或占用内存空间,我们就需要对信息进行自动录入刷新,这时候,我们就想到了set去重功能,但是,具体怎么实现呢?

# Author:Zhang Zhao
# -*-coding:utf-8-*-
class A(object):
    def __init__(self,name,sex,age):
        self.name = name
        self.age = age
        self.sex = sex
    def __hash__(self):
        return hash(self.name + self.sex)
    def __eq__(self, other):
        if self.name == other.name and self.sex == other.sex:
            return True
        return False
a1 = A(Chen,,18)
a2 = A(Chen,,28)
print(set([a1,a2]))

可以看出,使用set的时候,它需要比较的参数是哈希值同时也需要__eq__的返回值。

用python实现一个小游戏——抽牌

标签:value   ret   div   统计   字符串   ensure   style   序列化   自动   

原文地址:https://www.cnblogs.com/zz1314/p/10451872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!