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

  • 相关阅读:
    CPP流类库与输入输出
    STL学习之mismatch();
    谷歌浏览器现在点击任何文本都会出现光标
    jQuery删除元素remove和和empty的区别
    jQuery中的鼠标离开事件mouseout和mouseleave区别
    java类中的布尔(boolean&Boolean)类型字段要注意get方法和字段的命名
    Navicat_Premium_v15 激活
    navicat注册过期修改方法
    ClassNotFoundException找不到类异常的原因package 路径eclipse自动给我在路径前面加了一个java变成了java.com.XXX
    我保存一份博客园样式代码
  • 原文地址:https://www.cnblogs.com/zz1314/p/10451872.html
Copyright © 2011-2022 走看看