zoukankan      html  css  js  c++  java
  • 用python实现一个小游戏——抽牌

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

    # 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__的返回值。

  • 相关阅读:
    Apache Ant 1.9.1 版发布
    Apache Subversion 1.8.0rc2 发布
    GNU Gatekeeper 3.3 发布,网关守护管理
    Jekyll 1.0 发布,Ruby 的静态网站生成器
    R语言 3.0.1 源码已经提交到 Github
    SymmetricDS 3.4.0 发布,数据同步和复制
    beego 0.6.0 版本发布,Go 应用框架
    Doxygen 1.8.4 发布,文档生成工具
    SunshineCRM 20130518发布,附带更新说明
    Semplice Linux 4 发布,轻量级发行版
  • 原文地址:https://www.cnblogs.com/zz1314/p/10451872.html
Copyright © 2011-2022 走看看