« Programmation Python/Dictionnaires » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 492 :
Il arrive fréquemment que l'on ait à diriger l'exécution d'un programme dans différentes directions, en fonction de la valeur prise par une variable. Vous pouvez bien évidemment traiter ce problème à l'aide d'une série d'instructions <code>if - elif - else</code> , mais cela peut devenir assez lourd et inélégant si vous avez affaire à un grand nombre de possibilités. Exemple :
 
<source lang=python>
<pre>
materiau = raw_input("Choisissez le matériau : ")
 
Ligne 504 :
fonctionD()
elif ... etc ...
</presource>
 
Les langages de programmation proposent souvent des instructions spécifiques pour traiter ce genre de problème, telles les instructions <code>switch</code> ou <code>case</code> du C ou du Pascal. Python n'en propose aucune, mais vous pouvez vous tirer d'affaire dans bien des cas à l'aide d'une liste (nous en donnons un exemple détaillé page 227), ou mieux encore à l'aide d'un dictionnaire. Exemple :
 
<source lang=python>
<pre>
materiau = raw_input("Choisissez le matériau : ")
 
Ligne 517 :
... etc ...}
dico[materiau]()
</presource>
 
Les deux instructions ci-dessus pourraient être condensées en une seule, mais nous les laissons séparées pour bien détailler le mécanisme :
Ligne 527 :
Vous pouvez encore améliorer la technique ci-dessus en remplaçant cette instruction par sa variante ci-dessous, qui fait appel à la méthode <code>get()</code> afin de prévoir le cas où la clé demandée n'existerait pas dans le dictionnaire (vous obtenez de cette façon l'équivalent d'une instruction else terminant une longue série de <code>elif</code>) :
 
<source lang=python>
<pre>
dico.get(materiau, fonctAutre)()
</presource>
 
Lorsque la la valeur de la variable materiau ne correspond à aucune clé du dictionnaire, c'est la fonction <code>fonctAutre()</code> qui est invoquée.
Ligne 571 :
<ol>
<li>
 
<pre>
Sauvegarde d'un dictionnaire (complément de l'ex. 10.45).
<source lang=python>
 
def enregistrement():
fich = raw_input("Entrez le nom du fichier de sauvegarde : ")
Ligne 602 :
dico[cle] = (age, taille) # reconstitution du dictionnaire
ofi.close()
</presource>
 
Ces deux fonctions peuvent être appelées respectivement à la fin et au début du programme principal, comme dans l'exemple ci-dessous :
 
<source lang=python>
<pre>
dico ={}
lectureFichier()
Ligne 618 :
consultation()
enregistrement()
</presource>
</li>
<li>
Cet exercice complète le précédent. On ajoute encore deux petites fonctions, et on réécrit le corps principal du programme pour diriger le flux d'exécution en se servant d'un dictionnaire :
<source lang=python>
<pre>
# Contrôle du flux d'exécution à l'aide d'un dictionnaire
def sortie():
Ligne 648 :
# Rem : toutes les fonctions appelées ici renvoient <None> par défaut,
# sauf la fonction sortie() qui renvoie 1 => sortie de la boucle
</presource>
</li>
</ol>