card – 기본 트럼트 카드

트럼프 카드를 생성하고 사용하는 간단한 API

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

from fastcore.utils import *
def foo(): pass

source

foo

 foo ()

숫자로 트럼프 카드의 문양과 등급을 나타내자. 문양은 다음과 같다:

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

가령, 인덱스 0의 문양은 다음과 같다:

suits[0]
'♣️'

등급은 다음과 같다:

ranks
[None, 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
class Card_error:
    "트럼프 카드"
    def __init__(self,
                 suit, # An index into `suits`
                 rank): # An index into `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)
c = Card_error(suit=2, rank=3)
ZeroDivisionError: division by zero

에러가 발생하면 다음과 같이 디버깅 할 수 있다.

print('%debug')
%debug
> /tmp/ipykernel_226092/1521338603.py(7)__init__()
      5                  rank): # An index into `ranks`
      6         self.suit, self.rank = suit, rank
----> 7         print(1/0)
      8     def __str__(self): return f"{ranks[self.rank]}{suits[self.suit]}"
      9     __repr__ = __str__
ipdb>  p suit
2
ipdb>  w
  /tmp/ipykernel_226092/1067632244.py(1)<module>()
----> 1 c = Card_error(suit=2, rank=3)

> /tmp/ipykernel_226092/1521338603.py(7)__init__()
      5                  rank): # An index into `ranks`
      6         self.suit, self.rank = suit, rank
----> 7         print(1/0)
      8     def __str__(self): return f"{ranks[self.rank]}{suits[self.suit]}"
      9     __repr__ = __str__
ipdb>  l
      2     "A playing Card, created by passing in `rank` from `ranks` and `suit` from `suits`"
      3     def __init__(self,
      4                  suit, # An index into `suits`
      5                  rank): # An index into `ranks`
      6         self.suit, self.rank = suit, rank
----> 7         print(1/0)
      8     def __str__(self): return f"{ranks[self.rank]}{suits[self.suit]}"
      9     __repr__ = __str__
     10     # def __eq__(self, a:'Card'): return (self.suit,self.rank) == (a.suit,a.rank)
ipdb>  q
c = Card(suit=2, rank=3)
c
♥️3
print(c)
♥️3

source

Card

 Card (suit, rank)

트럼프 카드

Details
suit suits에 들어가는 인덱스
rank ranks에 들어가는 인덱스
from execnb.nbio import dict2nb

source

dict2nb

 dict2nb (js=None, **kwargs)

Convert dict js to an AttrDict,

test_eq
<function fastcore.test.test_eq(a, b)>
test_eq?
Signature: test_eq(a, b)
Docstring: `test` that `a==b`
File:      /nix/store/zd5ha541rf1gvsbsjl0xjv9bnirwsdqi-python3-3.9.13-env/lib/python3.9/site-packages/fastcore/test.py
Type:      function
test_eq??
Signature: test_eq(a, b)
Source:   
def test_eq(a,b):
    "`test` that `a==b`"
    test(a,b,equals, '==')
File:      /nix/store/zd5ha541rf1gvsbsjl0xjv9bnirwsdqi-python3-3.9.13-env/lib/python3.9/site-packages/fastcore/test.py
Type:      function
  1. write test_eq(
  2. press shift + Tab key

Produces same result with test_eq?

비교 연산자

같음, 적음, 큼 연산자는 등급과 문양에 대해 작동한다.


source

Card.__eq__

 Card.__eq__ (a:__main__.Card)

Return self==value.

test_eq(Card(suit=1, rank=3),Card(suit=1, rank=3))
test_ne(Card(suit=2, rank=3),Card(suit=1, rank=3))
test_ne(Card(suit=1, rank=2),Card(suit=1, rank=3))
assert Card(suit=1, rank=3)<Card(suit=2, rank=3)
# 꼭 필요하지는 않은 듯. __lt__ 과 __gt__ 둘 중에 하나만 필요한 듯.
#@patch
#def __gt__(self:Card, a:Card): return (self.suit,self.rank) > (a.suit,a.rank)
assert Card(suit=3, rank=3)>Card(suit=2, rank=3)