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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM