Usaremos la biblioteca itertools, para generar una baraja de 52 cartas, recuerde que list() debe recibir un iterador de modo que crea la lista con cada elemento del iterador.


In [1]:
numeros = list(iter(range(1,14)))

In [2]:
numeros


Out[2]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

In [3]:
pintas = ['c', 'd', 't', 'p']

In [4]:
import itertools

In [5]:
cartas = list(iter(itertools.product(numeros,pintas)))

In [6]:
cartas


Out[6]:
[(1, 'c'),
 (1, 'd'),
 (1, 't'),
 (1, 'p'),
 (2, 'c'),
 (2, 'd'),
 (2, 't'),
 (2, 'p'),
 (3, 'c'),
 (3, 'd'),
 (3, 't'),
 (3, 'p'),
 (4, 'c'),
 (4, 'd'),
 (4, 't'),
 (4, 'p'),
 (5, 'c'),
 (5, 'd'),
 (5, 't'),
 (5, 'p'),
 (6, 'c'),
 (6, 'd'),
 (6, 't'),
 (6, 'p'),
 (7, 'c'),
 (7, 'd'),
 (7, 't'),
 (7, 'p'),
 (8, 'c'),
 (8, 'd'),
 (8, 't'),
 (8, 'p'),
 (9, 'c'),
 (9, 'd'),
 (9, 't'),
 (9, 'p'),
 (10, 'c'),
 (10, 'd'),
 (10, 't'),
 (10, 'p'),
 (11, 'c'),
 (11, 'd'),
 (11, 't'),
 (11, 'p'),
 (12, 'c'),
 (12, 'd'),
 (12, 't'),
 (12, 'p'),
 (13, 'c'),
 (13, 'd'),
 (13, 't'),
 (13, 'p')]

In [7]:
len(cartas)


Out[7]:
52

In [8]:
import random

Aqui vamos a revolver las cartas...


In [9]:
random.shuffle(cartas)

In [10]:
cartas


Out[10]:
[(6, 'd'),
 (2, 'c'),
 (6, 'c'),
 (8, 'd'),
 (5, 'c'),
 (1, 'd'),
 (8, 'c'),
 (3, 't'),
 (12, 'c'),
 (7, 'd'),
 (2, 't'),
 (7, 'p'),
 (13, 'p'),
 (11, 't'),
 (1, 'p'),
 (1, 't'),
 (5, 'p'),
 (2, 'p'),
 (9, 'p'),
 (4, 'c'),
 (10, 'p'),
 (6, 't'),
 (4, 't'),
 (1, 'c'),
 (10, 'c'),
 (13, 'c'),
 (13, 't'),
 (9, 't'),
 (5, 't'),
 (9, 'd'),
 (2, 'd'),
 (3, 'd'),
 (5, 'd'),
 (4, 'd'),
 (12, 't'),
 (11, 'd'),
 (6, 'p'),
 (8, 'p'),
 (8, 't'),
 (7, 'c'),
 (12, 'd'),
 (9, 'c'),
 (11, 'c'),
 (10, 't'),
 (10, 'd'),
 (12, 'p'),
 (13, 'd'),
 (3, 'c'),
 (4, 'p'),
 (11, 'p'),
 (3, 'p'),
 (7, 't')]

In [11]:
def es_roja(carta):
    if carta[1] == 'd' or carta[1] == 'c':
        return True
    else:
        return False

Existe las funciones map y filter, ellas reciben una funcion y un iterador como parametro y retorna un iterador, en el caso de map, con el resultado de la funcion, para filter con los parametros en que la función retorna verdadero


In [12]:
cartas_rojas = list(filter(es_roja, iter(cartas)))

In [13]:
cartas_rojas


Out[13]:
[(6, 'd'),
 (2, 'c'),
 (6, 'c'),
 (8, 'd'),
 (5, 'c'),
 (1, 'd'),
 (8, 'c'),
 (12, 'c'),
 (7, 'd'),
 (4, 'c'),
 (1, 'c'),
 (10, 'c'),
 (13, 'c'),
 (9, 'd'),
 (2, 'd'),
 (3, 'd'),
 (5, 'd'),
 (4, 'd'),
 (11, 'd'),
 (7, 'c'),
 (12, 'd'),
 (9, 'c'),
 (11, 'c'),
 (10, 'd'),
 (13, 'd'),
 (3, 'c')]

In [14]:
son_rojas = list(map(es_roja, iter(cartas)))

In [15]:
son_rojas


Out[15]:
[True,
 True,
 True,
 True,
 True,
 True,
 True,
 False,
 True,
 True,
 False,
 False,
 False,
 False,
 False,
 False,
 False,
 False,
 False,
 True,
 False,
 False,
 False,
 True,
 True,
 True,
 False,
 False,
 False,
 True,
 True,
 True,
 True,
 True,
 False,
 True,
 False,
 False,
 False,
 True,
 True,
 True,
 True,
 False,
 True,
 False,
 True,
 True,
 False,
 False,
 False,
 False]

In [16]:
len(son_rojas)


Out[16]:
52

In [17]:
def valor_carta(carta):
    if carta[0] >= 10:
        return 10
    else:
        return carta[0]

In [18]:
valores = list(map(valor_carta, iter(cartas)))

In [19]:
valores


Out[19]:
[6,
 2,
 6,
 8,
 5,
 1,
 8,
 3,
 10,
 7,
 2,
 7,
 10,
 10,
 1,
 1,
 5,
 2,
 9,
 4,
 10,
 6,
 4,
 1,
 10,
 10,
 10,
 9,
 5,
 9,
 2,
 3,
 5,
 4,
 10,
 10,
 6,
 8,
 8,
 7,
 10,
 9,
 10,
 10,
 10,
 10,
 10,
 3,
 4,
 10,
 3,
 7]

In [20]:
valores = set(map(valor_carta, iter(cartas)))

In [21]:
valores


Out[21]:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

In [22]:
tupla = tuple(map(valor_carta, iter(cartas)))

In [23]:
tupla


Out[23]:
(6,
 2,
 6,
 8,
 5,
 1,
 8,
 3,
 10,
 7,
 2,
 7,
 10,
 10,
 1,
 1,
 5,
 2,
 9,
 4,
 10,
 6,
 4,
 1,
 10,
 10,
 10,
 9,
 5,
 9,
 2,
 3,
 5,
 4,
 10,
 10,
 6,
 8,
 8,
 7,
 10,
 9,
 10,
 10,
 10,
 10,
 10,
 3,
 4,
 10,
 3,
 7)

In [ ]: