Created
October 4, 2015 21:04
-
-
Save macndesign/f71cd40c1e97d8e3215d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding: utf-8 | |
""" | |
>>> from baralho import Baralho | |
>>> b = Baralho() | |
>>> len(b) | |
52 | |
>>> sorted([Carta('2', 'espadas'), Carta('K', 'copas'), Carta('A', 'copas')]) | |
[<A de copas>, <2 de espadas>, <K de copas>] | |
>>> b.pega_carta('4', 'paus') | |
<4 de paus> | |
>>> b.pega_carta('B', 'copas') | |
'Carta nao encontrada' | |
>>> b[0] | |
<A de copas> | |
>>> b[:3] | |
[<A de copas>, <2 de copas>, <3 de copas>] | |
>>> for carta in b[-3:]: print carta | |
... | |
<J de paus> | |
<Q de paus> | |
<K de paus> | |
>>> b = Baralho() | |
>>> b[-1] | |
<K de paus> | |
>>> b[-3:] | |
[<J de paus>, <Q de paus>, <K de paus>] | |
>>> b[:3] | |
[<A de copas>, <2 de copas>, <3 de copas>] | |
""" | |
from random import shuffle | |
from functools import total_ordering | |
@total_ordering | |
class Carta(object): | |
naipes = 'copas ouros espadas paus'.split() | |
valores = 'A 2 3 4 5 6 7 8 9 10 J Q K'.split() | |
def __init__(self, valor, naipe): | |
self.valor = valor | |
self.naipe = naipe | |
def __repr__(self): | |
return u'<%s de %s>' % (self.valor, self.naipe) | |
def __eq__(self, other): | |
return (self.valor, self.naipe) == (other.valor, other.naipe) | |
def __gt__(self, other): | |
return self.peso() > other.peso() | |
@classmethod | |
def todas(cls): | |
return [Carta(v, n) for n in cls.naipes for v in cls.valores] | |
def peso(self): | |
return Carta.naipes.index(self.naipe) + len(Carta.naipes) * Carta.valores.index(self.valor) | |
class Baralho(object): | |
def __init__(self): | |
self.cartas = Carta.todas() | |
def __len__(self): | |
return len(self.cartas) | |
def __getitem__(self, pos): | |
return self.cartas[pos] | |
def __setitem__(self, pos, item): | |
self.cartas[pos] = item | |
def pega_carta(self, valor, naipe): | |
pegou = None | |
for carta in self.cartas: | |
if carta.naipe == naipe and carta.valor == valor: | |
pegou = carta | |
return pegou if pegou else 'Carta nao encontrada' | |
if __name__ == '__main__': | |
from doctest import testmod | |
testmod() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment