deck

트럼프 카드 덱 구성하기

Published : 2022-09-12 23:42:40 (KST)

from nbdev_cards.card import *
from fastcore.utils import *
import random

source

Deck

 Deck ()

Initialize self. See help(type(self)) for accurate signature.

덱 한 벌을 초기화하면, 모든 카드가 들어가 있다.

Deck()
deck = Deck()
deck
♣️A; ♣️2; ♣️3; ♣️4; ♣️5; ♣️6; ♣️7; ♣️8; ♣️9; ♣️10; ♣️J; ♣️Q; ♣️K; ♦️A; ♦️2; ♦️3; ♦️4; ♦️5; ♦️6; ♦️7; ♦️8; ♦️9; ♦️10; ♦️J; ♦️Q; ♦️K; ♥️A; ♥️2; ♥️3; ♥️4; ♥️5; ♥️6; ♥️7; ♥️8; ♥️9; ♥️10; ♥️J; ♥️Q; ♥️K; ♠️A; ♠️2; ♠️3; ♠️4; ♠️5; ♠️6; ♠️7; ♠️8; ♠️9; ♠️10; ♠️J; ♠️Q; ♠️K
♣️A; ♣️2; ♣️3; ♣️4; ♣️5; ♣️6; ♣️7; ♣️8; ♣️9; ♣️10; ♣️J; ♣️Q; ♣️K; ♦️A; ♦️2; ♦️3; ♦️4; ♦️5; ♦️6; ♦️7; ♦️8; ♦️9; ♦️10; ♦️J; ♦️Q; ♦️K; ♥️A; ♥️2; ♥️3; ♥️4; ♥️5; ♥️6; ♥️7; ♥️8; ♥️9; ♥️10; ♥️J; ♥️Q; ♥️K; ♠️A; ♠️2; ♠️3; ♠️4; ♠️5; ♠️6; ♠️7; ♠️8; ♠️9; ♠️10; ♠️J; ♠️Q; ♠️K

총 52개의 카드가 들어가 있어야 한다.

test_eq(len(deck), 52)

Card를 포함하고 있는 소스코드에 #| export \ from fastcore.utils import * 가 있어야 한다.

Card??
Init signature: Card(suit, rank)
Source:        
class Card:
    "트럼프 카드"
    def __init__(self,
                 suit, # `suits`에 들어가는 인덱스
                 rank): # `ranks`에 들어가는 인덱스
        self.suit, self.rank = suit, rank
        #print(1/0)
    def __str__(self): return f"{suits[self.suit]}{ranks[self.rank]}"
    __repr__ = __str__
    # def __eq__(self, a:'Card'): return (self.suit,self.rank) == (a.suit,a.rank)
File:           ~/Jupyter_Python/nbdev_cards/nbdev_cards/card.py
Type:           type
Subclasses:     

다시 상기해보면, 아래는 Card를 정의하기 위한 문양들이다:

suits
['♣️', '♦️', '♥️', '♠️']

클럽 에이스가 덱에 포함되어 있는지 확인할 수 있다:

Card(1,1) in deck # __contains__ 함수가 정의되어 있어야한다.
True

source

Deck.pop

 Deck.pop (idx:int=-1)

덱에서 인덱스에 해당되는 카드를 없애고 그 카드를 반환한다.

Type Default Details
idx int -1 지우려는 카드의 인덱스. 기본값은 덱의 마지막 카드 인덱스
deck.pop()
♠️K
deck = Deck()
test_eq(deck.pop(), Card(3,13)) # K♠️

이제 덱에는 51장의 카드가 남아있다.

test_eq(len(deck), 51)

source

Deck.remove

 Deck.remove (card:nbdev_cards.card.Card)

덱에서 card를 없애고, 그 카드가 덱에 없었다면 예외를 발생시킨다.

Type Details
card Card 없애려는 카드
card23 = Card(2,3)
deck.remove(card23)
assert card23 not in deck
Card(2,7)
assert Card(2,7) not in deck
♥️7
AssertionError: 

source

draw_n

 draw_n (n:int, replace:bool=True)

n개의 카드를 추출. replaceTrue일 경우 복원 추출.

Type Default Details
n int 뽑으려는 카드의 개수
replace bool True 복원 추출 여부

source

Deck.shuffle

 Deck.shuffle ()

덱을 섞는다.

draw_n(13, replace=False)
[♠️9, ♣️4, ♦️5, ♣️J, ♠️K, ♣️A, ♠️10, ♣️6, ♣️K, ♣️5, ♠️3, ♦️3, ♦️Q]