Baralla de cartes

El mòdul baralla conté tot un seguit de funcions que permeten crear, modificar i consultar el conjunt de cartes d’una baralla.

Hem decidit representar una carta amb una tupla (n, p), on

  • n és el número (entre 1 i 12) i

  • p és el pal, una cadena de caràcters que pot valdre 'oros', 'copes', 'espases' o 'bastos'.

Una baralla, sencera o no, es representa com una llista de cartes.

Es demana que:

  1. Dissenyeu la funció nova_baralla() [1]:

    baralla.nova_baralla()

    Retorna una baralla amb les 48 cartes ordenades: [(1, “oros”), (2, “oros”), … (12, “bastos”)]

    Per exemple:

    >>> from baralla import nova_baralla
    
    >>> b = nova_baralla()
    >>> len(b)
    48
    >>> print(b[0])
    (1, 'oros')
    >>> print(b[47])
    (12, 'bastos')
    
  2. Dissenyeu la funció següent [1]:

    baralla.nom_carta(carta)

    Retorna el nom tradicional de la carta (str) calculat a partir de la tupla carta.

    Per exemple:

    >>> from baralla import nom_carta
    
    >>> nom_carta( (1, 'copes') )
    'as de copes'
    >>> nom_carta( (5, 'espases') )
    "5 d'espases"
    >>> nom_carta( (10, 'oros') )
    "sota d'oros"
    >>> nom_carta( (12, 'bastos') )
    'rei de bastos'
    

    Recordeu que tradicionalment s’anomena as al número 1, sota al 10, cavall a l’11 i rei al 12.

  3. Definiu la funció següent [1]:

    baralla.escriu(baralla)

    Escriu a la sortida estàndard el nom tradicional de totes les cartes de la baralla baralla.

    Per exemple:

    >>> from baralla import escriu
    
    >>> b = [
    ... (3, 'bastos'),
    ... (12, 'oros'),
    ... (1, 'copes'),
    ... ]
    >>> escriu(b)
    3 de bastos
    rei d'oros
    as de copes
    
  4. Dissenyeu la funció següent [1]:

    baralla.treu_carta(b)

    Retorna la primera carta de la baralla b i l’elimina de la baralla b.

    Per exemple:

    >>> from baralla import nova_baralla, treu_carta
    
    >>> x = nova_baralla()
    >>> y = x[:]
    >>> c = treu_carta(x)
    >>> print(c)
    (1, 'oros')
    >>> x == y[1:]
    True
    
  5. Utilitzant la funció shuffle() del mòdul random, dissenyeu la funció següent [1]:

    baralla.barreja(b)

    Barreja les cartes de la baralla b, intercanviant-ne l’ordre a l’atzar.

    Per exemple:

    >>> from baralla import nova_baralla, barreja
    
    >>> b = nova_baralla()
    >>> c = b[:]
    >>> barreja(b)
    >>> c == b
    False
    >>> sorted(c) == sorted(b)
    True
    
  6. Dissenyeu la funció següent [1]:

    baralla.quatre_bastos_seguits(b)

    Retorna True si a la baralla b hi ha quatre cartes de bastos juntes i False altrament.

    Per exemple:

    >>> from baralla import nova_baralla, quatre_bastos_seguits
    
    >>> b = nova_baralla()
    >>> quatre_bastos_seguits(b)
    True
    >>> quatre_bastos_seguits(b[:39])
    False
    
  7. Dissenyeu la funció següent [1]:

    baralla.talla(b, l)

    Retorna una nova baralla calculada tallant en dues piles la baralla de cartes b pel lloc l i empilant-les en l’ordre contrari.

    Per exemple:

    >>> from baralla import talla
        
    >>> b = [
    ... (3, 'bastos'),
    ... (12, 'oros'),
    ... (1, 'copes'),
    ... ]
    >>> b1 = talla(b, 1)
    >>> b1
    [(12, 'oros'), (1, 'copes'), (3, 'bastos')]
    >>> b2 = talla(b, 2)
    >>> b2
    [(1, 'copes'), (3, 'bastos'), (12, 'oros')]
    >>> b3 = talla(b, 0)
    >>> b3 == b
    True
    

Solució

Disposeu d’una solució al fitxer baralla.py. Us encoratgem a resoldre el problema abans de mirar la solució. Useu-la per comparar-la amb la vostra.

Notes