55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
"""
|
|
|
|
Spadille is the nickname for the Ace of Spades in some games
|
|
(see `Webster 1913`_)
|
|
|
|
>>> beer_card = Card('7', Suite.diamonds)
|
|
>>> beer_card
|
|
Card('7', Suite.diamonds)
|
|
>>> spadille = Card('A', Suite.spades, long_rank='Ace')
|
|
>>> spadille
|
|
Card('A', Suite.spades)
|
|
>>> print(spadille)
|
|
Ace of spades
|
|
>>> bytes(spadille)
|
|
b'A\\x01'
|
|
>>> charles = Card('K', Suite.hearts)
|
|
>>> bytes(charles)
|
|
b'K\\x04'
|
|
>>> big_cassino = Card('10', Suite.diamonds)
|
|
>>> bytes(big_cassino)
|
|
b'T\\x02'
|
|
|
|
__ http://machaut.uchicago.edu/cgi-bin/WEBSTER.sh?WORD=spadille
|
|
|
|
"""
|
|
|
|
from enum import Enum
|
|
|
|
Suite = Enum('Suite', 'spades diamonds clubs hearts')
|
|
|
|
class Card:
|
|
|
|
def __init__(self, rank, suite, *, long_rank=None):
|
|
self.rank = rank
|
|
if long_rank is None:
|
|
self.long_rank = self.rank
|
|
else:
|
|
self.long_rank = long_rank
|
|
self.suite = suite
|
|
|
|
def __str__(self):
|
|
return '{long_rank} of {suite.name}'.format(**self.__dict__)
|
|
|
|
def __repr__(self):
|
|
constructor = '{cls.__name__}({args})'
|
|
args = '{0.rank!r}, Suite.{0.suite.name}'.format(self)
|
|
return constructor.format(cls=self.__class__, args=args)
|
|
|
|
def __bytes__(self):
|
|
if self.rank == '10':
|
|
rank_byte = b'T'
|
|
else:
|
|
rank_byte = bytes([ord(self.rank)])
|
|
return rank_byte + bytes([self.suite.value])
|