# Comment représenter une carte d'un jeu de 52 cartes

# Une carte, par exemple l'As de Pique ou le 10 de Coeur, est caractérisée par
# une enseigne et une valeur.
#
# Une carte du jeu ne doit pas changer.  On peut donc la représenter par un
# tuple (un couple) composé d'une valeur et d'une enseigne :
#
#      carte = (valeur, enseigne) 
#
# On peut définir les valeurs possibles pour l'enseigne par un tuple car c'est
# une information constante

ENSEIGNES = ('Pique', 'Coeur', 'Carreau', 'Trèfle')

# Pour les valeurs, on peut aussi utiliser un tuple.  On peut aussi considérer
# qu'une valeur est un entier entre 1 et 13 avec comme convention 11 pour
# Valet, 12 pour Dame et 13 pour roi.

VALEURS = tuple(range(1, 14))

# Exemples de carte :

dix_coeur = (10, 'Coeur')
as_pique = (1, 'Pique')
dame_carreau = (13, 'Carreau')

# Un jeu de carte pourra être coupé, battu, etc.  Il contient 52 cartes qui
# pourront être mélangées.  On peut donc prendre une liste.

jeu52 = [(v, e) for e in ENSEIGNES for v in VALEURS]

print(jeu52)



## Étant donnée une liste l, comment désigner la liste de tous les éléments
## sauf le premier et le dernier ?

def milieu(liste):
    return liste[1:-1]

def test_milieu():
    assert [3, 4] == milieu([2, 3, 4, 5])


## Étant donnée une liste l, comment obtenir deux listes, la première qui
## contient les éléments d’indice pair et la seconde les éléments d’indice
## impair ?

def liste_indices_pairs(liste):
    return liste[0::2]

def liste_indices_impairs(liste):
    return liste[1::2]

def test_liste_indices_pairs():
    assert [-5, 1, 0] == liste_indices_pairs([-5, 2, 1, 18, 0])

def test_liste_indices_impairs():
    assert [2, 18] == liste_indices_impairs([-5, 2, 1, 18, 0])


## Comment représenter une tâche caractérisée par un nom, une priorité, une
## difficulté et une date d'échéance.  On veut représenter plusieurs
## informations, on peut prendre une liste ou un tuple.
## Plus tard on pourra envisager un dictionnaire...
##
##  tache = [nom, priorité, difficulté, échéance]
##
## On pourrait prendre un tuple si modifiable.

