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 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 :
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 .
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 | 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éthode : Initialisation 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.
Méthode : Dé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].