#| default_exp card #| export from fastcore.utils import * #| hide from nbdev.showdoc import * from fastcore.test import * #| export suits = ["♣️","♦️","❤️","♠️"] ranks = [None, "A"] + [str(x) for x in range(2,11)] + ["J", "Q", "K"] suits suits[0] ranks ranks[1] #| export class Card: "A playing card" def __init__(self, suit:int, # An index into `suits` rank:int): # An index into `ranks` self.suit,self.rank = suit,rank def __str__(self): return f"{ranks[self.rank]}{suits[self.suit]}" __repr__ = __str__ c = Card(suit=1, rank=3) c #| export @patch def __eq__(self:Card, a:Card): return (self.suit,self.rank)==(a.suit,a.rank) @patch def __lt__(self:Card, a:Card): return (self.suit,self.rank)<(a.suit,a.rank) @patch def __gt__(self:Card, a:Card): return (self.suit,self.rank)>(a.suit,a.rank) test_eq(Card(suit=1, rank=3), Card(suit=1, rank=3)) #| hide 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) assert not Card(suit=1, rank=3)>Card(suit=2, rank=3)