美文网首页
扑克发牌

扑克发牌

作者: wshsdm | 来源:发表于2019-05-04 21:04 被阅读0次

两个下划线结尾(例如__getitem__)。比如obj[key]的背后就是__getitem__方法,为了求得my_collection[key]的值,解释器实际上会调用my_collection.__getitem__(key),双下划线这种特殊方法也叫双下方法(dunder method)
import collections

from random import choice

Card=collections.namedtuple('Card',['rank','suit'])

class FrenchDeck:

    ranks=[str(n) for n in range(2,11)] +list('JQKA') #扑克的大小范围

    print(ranks)

    suits='spades diamods clubs hearts'.split()  # 黑桃,钻石,方块,红心

    print(suits)

    def __init__(self):

        self._cards=[Card(rank,suit) for suit in self.suits

                                    for rank in self.ranks]

    def __len__(self):

        return len(self._cards)

    def __getitem__(self, position):

        return self._cards[position]

    beer_card=Card('7','diamonds')  #实例一个扑克点

    print(beer_card)

deck= FrenchDeck()  #创一个扑克对象deck

print(len(deck))    #打印总共有多少张扑克

print(deck[0])    #打印第一张牌 黑桃2

print(deck[-1])    #打印最后一张牌 红心A

print(choice(deck))  #随机抽取一张牌

print(deck[:3])    #查看最上面三张  黑桃 2 ,3, 4

print(deck[12::13]) #抽取索引为12的那张牌,然后每隔13张在抽取一张 正好是4个A

# 实现了 __getitem__方法,这一摞牌变成了可迭代对象

for card in deck:

    print(card)

#反向迭代

for card in reversed(deck):

    print(card)

#判断某张牌实例是否存在这副牌中

print(Card('Q','hearts') in deck)  #True

print(Card('7','beasts') in deck)  #False

#  比较扑克牌的大小2 最小、A 最大;同时还要加

#  上对花色的判定,黑桃最大、红桃次之、方块再次、梅花最小。

# 下面就是按照这个规则来给扑克牌排序的函数,梅花 2 的大小是 0,黑桃 A 是 51:

suit_values=dict(spades=3,hearts=2,diamods=1,clubs=0)

def spades_high(card):

    # 获取扑克的点数

    rank_value = FrenchDeck.ranks.index(card.rank)

    # 根据传入的牌的实例返回扑克0-51 之间的一个索引  例 黑桃A:12*4+3=51

    return rank_value * len(suit_values) + suit_values[card.suit]

# 通过上面定义的函数对这幅牌进行 升序排序

for card in sorted(deck, key=spades_high):

        print(card)

相关文章

  • 扑克发牌

    两个下划线结尾(例如__getitem__)。比如obj[key]的背后就是__getitem__方法,为了求得m...

  • 网络扑克作弊

    网络扑克组局中的作弊 说明:本文只讨论网络组局中参与者的作弊,不讨论发牌程序以发牌算法. 现在的网络牌局大多数由组...

  • Java斗地主游戏开发

    游戏中用到的技术:递归,排序游戏中用到的对象: 扑克牌 游戏玩家 游戏中的操作: 洗牌 发牌 抢地主 出牌 游戏规...

  • JAVA模拟打牌,实现三个人洗牌,随机发牌,最终显示每个人的牌。

    JAVA也会打牌? 上个周的Java作业就是使用eclipse模拟三个人打牌,实现扑克牌的随机发牌、查询不同人的姓...

  • 玩扑克牌(2019―2―8)

    今天上午,我在外婆家玩扑克牌,我告诉大家我是怎么玩的吧! 首先,要把牌洗好;然后,再发牌;最后,评...

  • 打扑克

    今天,我和爸爸打扑克,我们玩的游戏是打进贡。爸爸洗牌,我发牌,然后我们把牌分类放一块,红桃四先出,每次我...

  • 斗地主之基本功能实现

    功能实现 默认先进入的人拥有优先发牌权 点对点发牌接收牌 discard&receive card 发牌后将发牌权...

  • 打扑克

    今天,我和爸爸打扑克,我们玩的游戏是打进贡。爸爸洗牌,我发牌,然后我们把牌分类放一块,红桃四先出,每次我的...

  • 基于c++的扑克牌游戏

    1.课程设计的解答说明 创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。 ...

  • [源码和文档分享]基于c++的扑克牌游戏

    1.课程设计的解答说明 创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。 ...

网友评论

      本文标题:扑克发牌

      本文链接:https://www.haomeiwen.com/subject/yhifoqtx.html