Apprendre à programmer avec des cartes

Les instructions du module carte

Le module Cartes est une extension du langage Python qui permet de manipuler des tas de cartes à jouer.

On l'utilise en écrivant dans Python from Cartes import *.

L'environnement de "jeu" est composé de 4 tas de cartes pouvant être vide, numérotés de 1 à 4. Sur chaque tas, on peut mettre des cartes, les bouger d'un sommet de tas à un autre ...

Chacun des quatre tas peut contenir un nombre quelconque de cartes, y compris aucune.

Deux instructions sont définies dans le module :

  • l'instruction init_tas(n,s) qui initialise le tas numéro n avec une pile de cartes décrite par la chaîne de caractères s ;

  • l'instruction deplacer_sommet(n,p) qui déplace une carte du tas numéro n vers le tas numéro p.

Par exemple, en supposant qu'initialement aucun tas ne contienne de cartes, alors le dialogue qui suit donne le tas tel qu'on peut le voir sur l'image .

init_tas(1,"TCP")

Comme on peut le constater sur l'image 1[1], l'effet de bord (la modification d'un état autre que sa valeur de retour) provoqué par cette instruction est une initialisation du tas numéro 1 avec trois cartes de couleurs successives , ♡ et ♠.

Initialisation d'un tas de cartes

En poursuivant le dialogue avec l'interprète, on peut déplacer la carte au sommet du tas numéro 1 vers le tas numéro 2 avec l'instruction deplacer_sommet(1,2)

L'effet de bord de l'instruction deplacer_sommet(1,2) est la transformation de l'état des cartes. Nous allons voir comment les instructions fonctionnent.

MéthodeInitialisation des tas de cartes

Ces tas, numérotés de 1 à 4 de gauche à droite, contiennent des cartes en nombre quelconques choisies au hasard. Les problèmes que nous traiterons nécessitent de pouvoir imposer certaines configurations de l'état de ces quatre tas.

Afin de décrire en début de programme, la configuration initiale des tas de cartes, le module Cartes offre une procédure init_tas

init_tas(n,s)

La chaîne de description, lue de gauche à droite, indique les cartes d'un tas du bas vers le haut avec les conventions suivantes :

  • Les lettres T, C, K, P représentent respectivement : trèfle, cœur, carreau, pique

  • Si A et B sont des chaînes de description, la chaîne AB est aussi une chaîne de description qui représente les cartes de A surmontées de celles de B.

  • Si A et B sont des chaînes de description, la chaîne A+B est aussi une chaîne de description qui représente un choix entre les cartes de A ou celles de B ;

  • Si A est une chaîne de description, [A] représente la répétition des cartes de A un nombre quelconque (défini de manière aléatoire) de fois (y compris zéro).

  • Les parenthèses sont autorisées pour éviter les ambiguïtés.

Exemple :

  • init_tas(1,"") déclare le tas numéro 1 vide.

  • l'instruction init_tas(2,"TCK") décrit le tas numéro 2 contenant de bas en haut un trèfle, un coeur et un carreau.

  • l'instruction init_tas(3,"T+P") décrit le tas numéro 3 contenant une carte qui est soit un trèfle soit un pique.

  • l'instruction init_tas(4,"[T+P]") décrit le tas numéro 4 contenant un nombre quelconque, non déterminé, de cartes de couleur trèfle ou pique

  • l'instruction init_tas(1,"T+[P]CC") décrit le tas numéro 1 contenant soit une seule carte de couleur trèfle, soit un nombre quelconque de pique surmonté de deux coeur.

  • l'instruction init_tas(1,"(T+[P])CC") décrit le tas numéro 1

contenant soit trois cartes un trèfle surmonté de deux coeur, soit un nombre quelconque de pique surmonté de deux coeur. À noter qu'une autre façon de décrire la même initialisation est d'utiliser la chaîne "TCC + [P]CC".

Remarque : Tout programme de résolution d'un problème sur les cartes doit débuter par une initialisation des quatre tas à l'aide de l'instruction init_tas. Une fois cette initialisation effectuée, cette instruction n'est plus utilisée. Il s'en suit qu'après l'étape d'initialisation, le nombre de cartes globalement présentes sur les quatre tas ne varie pas.

Initialisation des tas de cartes

MéthodeDéplacer une carte

La seule action permettant de modifier l'état des tas est le déplacement de la carte située au sommet d'un tas vers le sommet d'un autre tas. Cette action est donnée par un appel à la procédure deplacer_sommet paramétrée par un couple~:

deplacer_sommet(n,p)

où n est le numéro du tas duquel on prend une carte, et p est celui du tas sur lequel on la pose.

Il n'est pas permis de déplacer une carte située sur un tas vide.

Toute tentative d'action deplacer_sommet(n,p) déclenche l'exception Tas_Vide si le tas n est vide.

Exemple

L'instruction deplacer_sommet(2,4) a pour effet de déplacer la carte au sommet du tas 2 pour la poser au sommet du tas 4. Appliquée à l'état des tas décrits par la figure 1[2], cette instruction transforme les tas 2 et 4 comme le montre la figure 2[3].

Déplacement de carte
Déplacer une carte : situation finale

ExempleDéplacement de cartes

Déplacer une carte
  1. 1
    Initalisation du tas de carte 1
    Initalisation du tas de carte 1
  2. 1
    Déplacement de carte
  3. 2
    Déplacer une carte : situation finale
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Laetitia Jourdan, Éric Wegrzynowski, Léopold Weinberg. FIL - IEEA - Univ. Lille1. http://www.fil.univ-lille1.fr Paternité - Pas d'Utilisation CommercialeRéalisé avec Scenari (nouvelle fenêtre)