python3模拟扑克牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3模拟扑克牌相关的知识,希望对你有一定的参考价值。

python3.6环境

 

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)
print(===============================下面是反响迭代===============================)
#反向迭代
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] # 通过上面定义的函数对这幅牌进行 升序排序 print(===============================自定义排序===============================) for card in sorted(deck, key=spades_high): print(card)

 

以上是关于python3模拟扑克牌的主要内容,如果未能解决你的问题,请参考以下文章

LQ0266 巧排扑克牌模拟

代码实现:模拟斗地主洗牌和发牌,牌没有排序

一个扑克牌游戏的模拟

模拟双面扑克牌的最佳方法?

学习笔记:python3,代码片段(2017)

scrapy主动退出爬虫的代码片段(python3)