Accueil

Traduction

Tutoriel Python - sommaire

Tutoriel Python - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Python : découverte des strings, tuples, dictionnaires et ensembles

Dans ce chapitre je ne prétends pas épuiser complètement le sujet sur ces structures. Lisez donc aussi le chapitre 15 pour approfondir vos connaissances concernant les structures citées.

L'emploi dans un programme de structures telles les tuples, les ensembles ("set"), les dictionnaires, peut simplifier sensiblement le travail du programmeur.
En fin de chapitre je vous propose la version presque définitive du programme "tirage au sort de 5 cartes". À cette fin j'utilise un "set" pour stocker les cartes tirées : les doublons sont alors impossibles simplement par l'emploi de cette séquence.

Autres traitements sur les listes

Avant d'évoquer les chaines, tuples dictionnaires et ensembles il faut compléter vos connaissances sur les listes.

Tirage au sort dans une liste

Le code correspondant :

Pour importer le module "random" j'ai employé la syntaxe "import nomModule" donc je dois ensuite préfixer les fonctions. Voir le chapitre 9 pour de plus amples explications.
Notez la syntaxe pour extraire de façon aléatoire un élément : random.choice(nomListe)
Notez l'emploi de l'opérateur "in" dans la boucle while ; que l'utilisateur saisisse la lettre "o" en majuscule ou minuscule le programme continue de boucler.

Les conversions

Il peut s'avérer nécessaire de convertir une liste en chaine ou le contraire.

Convertir une liste en chaine

Commandes dans la console :

machaine = " - ".join(maliste) : la méthode join() a une syntaxe étrange ...
Elle convertit ici une liste en chaine. Les crochets et les guillemets internes sont supprimés, les virgules sont ici remplacées par des "-".
Si je veux des espaces ll suffit d'écrire : : machaine = " ".join(maliste)

Convertir une chaine en liste

Pour que chaque mot d'une liste devienne un élément d'une liste il faut utiliser la méthode de chaine : split().
Commandes à saisir :

La méthode de chaine split() appliquée une chaine avec des séparateurs crée une liste de mots.

Il faut argumenter la méthode split() avec le caractère qui sert de séparateur de mots dans la chaine d'origine. Par défaut le séparateur est le caractère espace.

Autres méthodes pour modifier une liste

Dans la suite de commandes ci-dessous j'utilise différentes méthodes de manipulation de listes.

La fonction générique del

Pour supprimer un élement de liste vous pouvez aussi utiliser del.

Le type str (chaine ou 'string')

Le nombre de méthodes applicables à un objet de type "str" est impressionnant.

Quelques méthodes applicables aux chaines

Dans ce chapitre je n'en présente que quelques méthodes de la classe str. Pour compléter vos connaissances, vous lirez ensuite le chapitre 15.

Commandes à saisir dans la console :

Les méthodes lower(), upper(), capitalize() "modifient la casse".
Bien évidemment ces méthodes n'ont aucun impact sur des chaines composées de chiffres.

Davantage de méthodes

Petit à petit on découvre la richesse des méthodes applicables à une chaine.

Le type tuple

Dans un chapitre précédent j'ai évoqué cette séquence. J'ai montré qu'une fonction pouvait retourner un tuple (plusieurs valeurs séparées par des virgules).

Commandes à saisir dans la console :

Différences entre un tuple et une liste ?

Pourquoi les tuples ?

On peut se demander à quoi ça peut bien servir ce type de données ? En fait un tuple ça peut être très utile dans certains cas précis que je détaillé ci-dessous.

Un tuple permet une affectation multiple

À droite du signe "=" c'est un tuple (j'aurais pu encadrer de parenthèses).
Donc en une seule instruction je crée et initialise plusieurs variables.

Une fonction retournant un tuple de valeurs

Une fonction perso peut retourner plusieurs valeurs sous forme d'un tuple.

Exemple :

Une fonction permet de retourner le périmètre et l'aire d'un rectangle à partir de la longueur et de la largeur.
Dans la fonction les variables sont lo (comme longueur), la (comme largeur), p (comme périmètre), a (comme aire),

Dans la fonction "rectangle" le mot "return" est suivi d'un tuple à deux éléments : p,a.
Notez l'appel de la fonction avec à gauche du signe "=" un tuple à deux éléments.

À vous de travailler : écrivez la fonction qui a partir du rayon retourne la circonférence et l'aire d'un cercle. Donc un argument à passer lors de l'appel de la fonction et deux valeurs retournées par cette fonction.

Créer des constantes dans un programme

Dans un programme il peut y avoir des variables qui ne doivent pas être modifiées après avoir été initialisées. C'est ce qu'on appelle des constantes. Il suffit donc d'initialiser ces variables particulières à partir d'un tuple.

Exemple :

La variable "taux_tva" contient un tuple avec deux éléments ; Chaque élément a un indice.

Les taux de TVA sont exprimés pour 100 €, donc je dois diviser par 100 pour obtenir la TVA.
Notez que je n'arrive pas à modifier le contenu du premier élément du tuple.

Lire un tuple

Parcourir un tuple

Un tuple est une structure itérable :

Un tuple est une structure immuable donc n'admet pas la commande del.

Appliquer le "slicing" et l'indexation à un tuple

Le tuple se manipule alors comme une liste.

Remarques sur les tuples

Créer un tuple à partir de variables simples

On peut créer un tuple à partir de variables simples.

Le changement de contenu de la variable a n'a pas d'incidence sur le contenu du tuple.

Une liste de tuples

Rien n'interdit de créer une liste de tuples. D'ailleurs cette structure peut être fort utile pour manipuler une base de données.
Ci-dessous : extrait d'un programme d'insertion de lignes dans la table "especes" d'une base

Analyse du code

La variable "autres_poissons" référence une liste de 5 tuples. Notez bien la syntaxe : des crochets incluant des paires de parenthèses.
Ensuite chaque tuple devient un nouvel enregistrement dans la table "especes" grâce à l'instruction curseur.executemany(requête d'insertion SQL, liste de tuples).
Pour en savoir plus sur Python et les bases de données : voir les chapitres 17 & 18 de ce tuto.

Type dictionnaire (classe 'dict')

Un dictionnaire n'est pas une séquence d'éléménts simples mais une suite de paires "clé:valeur". Un paire "clé:valeur" s'appelle aussi un item.
Les dictionnaires sont délimités par des accolades. Un dictionnaire c'est l'équivalent d'un tableau associatif dans d'autres langages (PHP, JS).
Un dictionnaire permet d'indiquer les attributs d'un objet par exemple le nom, prénom, sexe,etc. d'une personne.

Exemple de dictionnaire

À saisir dans la console :

Je crée un dictionnaire nommé "mon_inventaire" qui comprend 4 paires de clé-valeur.
Pour accéder à une valeur il faut préciser la clé. Syntaxe : nomDictionnaire [clé]. Ainsi j'apprends que j'ai 5 pantalons.
machaine =" - ".join(mon_inventaire) : création d'une chaine à partir du dictionnaire, avec la méthode join() ; seules les clés sont conservées dans la chaine de destination.
mon_inventaire["pulls"] = 10 : ajout d'un cinquième paire au dictionnaire
del(mon_inventaire["vestes"]) : suppression d'une paire du dictionnaire

Un programme qui parcourt un dictionnaire

Rappel : un dictionnaire est une séquence non pas d'éléments simples mais d'items c'est à dire de paires "clé:valeur" donc le parcours d'un dictionnaire est un peu plus délicat ...

Il faut appliquer la méthode items() pour afficher les paires "clé:valeur".

Exécution de ce programme :

Liste de dictionnaires

Il peut s'avérer très utile de créer un liste de dictionnairs.

J'ai créé une liste contenant deux dictionnaires. Notez bien la syntaxe : des crochets incluant des paires d'accolades.
Veillez à ce que les différents dictionnaires de la liste aient les mêmes clés.
En créant des listes de dictionnaires vous obtenez une structure de données complexe identique à celle d'une table d'une base de données.

Les clés d'un dictionnaire peuvent être complexes

Jusqu'à présent les clés sont des chaines de caractères mais ce n'est pas une obligation. Les clés peuvent être aussi des entiers voire des tuples (voir ci-dessous).

La position des pièces sur un échiquier :

Pour chaque pièce la clé est un tuple indiquant le nom de la colonne et le numéro de ligne.

Les ensembles

Python n'est pas avare en structures de données.
Depuis la version 3 de Python, il existe un nouveau type de structure : les ensembles (ou "set" en anglais).

Différence entre un dictionnaire et un ensemble

Il ne faut pas confondre les ensembles avec les dictionnaires. Certes dans les deux cas les délimiteurs sont des accolades. Mais dans un ensemble il n'y a que des éléments simples à la différence d'un dictionnaire (série de clé-valeur).
Donc pour créer un ensemble vide il faut utiliser la syntaxe nomSet =set() alors que pour créer un dictionnaire vide la commande est : nomDictionnaire = {}

Intérêt des ensembles

Puisqu'un ensemble est une suite de valeurs comme une liste, quel est l'intérêt pratique de cette nouvelle structure ?
À la différence d'une liste, un ensemble ne peut pas contenir une même valeur plusieurs fois ; en d'autres termes il ne peut y avoir de doublons dans un 'set'.
Cette particularité peut être très utile en programmation ; par exemple pour la simulation des jeux de cartes, on ne peut pas tirer deux fois la même carte !

Créer un ensemble non vide

Si vous tentez de saisir des doublons dans un ensemble, l'interpréteur ne signale aucune erreur mais élimine les doublons de la séquence.

Création d'un ensemble à partir d'une liste

Le deuxième "3" a disparu du set.

Création d'un ensemble à partir d'une chaine

La chaine "anguille" comprend deux "l".
Dans la chaine "lotte de mer" il y a aussi des doublons.
Dans les sets ensemble2 et ensemble3 les doublons ont disparu.

On peut construire rapidement un set composé de nombres avec la fonction range()

Il faut donc imbriquer les fonctions set() et range().

Opérations sur les ensembles

Maintenant que vous savez créé un ensemble de différentes manières, voyons les manipulations sur ce type de données.

Ajouter une valeur au "set"

On a pu ajouter la lettre "i' à l'ensemble. Par contre la tentative d'ajout de la lettre "l" a échoué puisque cette valeur existait déjà dans le "set" mais il n'y a pas de message d'erreur.

Attention : pour ajouter un élément à une liste la méthode est append() alors que pour ajouter un élément à un ensemble c'est la méthode add().

Vérifier l'existence d'une valeur dans le "set"

On peut appliquer les opérateurs "in" et "not in" à un ensemble.

Parcourir un ensemble

Un 'set' est une structure itérable donc elle peut être parcourue par une boucle FOR.

Autres manipulations possibles

On peut vider un ensemble, supprimer un élement.

Vider un set de tous les éléments

Supprimer un élément dans l'ensemble

Je supprime la lettre "i" de l'ensemble puis je demande la suppression d'un élément qui n'existe pas ; l'interpréteur ne lève pas d'exception avec la méthode discard() mais signale une erreur avec la méthode remove().

Union de deux ensembles

Le nouveau ensemble ("set_union") est bien l'union de "set1" et "set2" ; les valeurs communes aux deux ensembles d'origine ne sont présentes qu'une fois.

Intersection de deux ensembles

Le nouvel ensemble ("set_inter") ne comprend que les éléments qui étaient communs aux deux ensembles d'origine : 5,6,7,8,9.

Exemple d'utilisation des ensembles

Deux plongeurs donnent la liste des poissons qu'ils ont pu observer dans un lac.
Vous devez en déduire la liste des poissons de ce biotope (sans doublons).

Deux espèces ont été signalées par les deux plongeurs.

Ce qu'on ne peut pas faire sur un ensemble

Un ensemble n'est pas une séquence : un élément d'un set n'a pas d'indice. Donc on ne peut pas "slicer" un ensemble ni appliquer la méthode index().

Programme basé sur un ensemble

Vous vous souvenez du programme qui consistait à tirer au sort cinq cartes. Je disais même que ce programme "trichait" puisqu'une même carte pouvait être tirée plusieurs fois. En utilisant un ensemble à la place d'une liste, nous n'aurons plus ce problème !

Le code corrigé

Notez les commentaires multi-lignes : encadrés par trois guillemets.

Notez que la fonction len() fonctionne pour tous les types de structures (liste, tuple, dictionnaire, ensemble).
Par contre pour ajouter un élément à un ensemble, la méthode est add() (et non pas append()).

Trace de l'exécution

Et oui, il y a encore un petit problème : si la même carte est tirée au sort deux fois, l'ensemble ne comprend alors que 4 cartes.
Il faudrait imaginer que dans ce cas il y ait un sixième tirage.
La solution définitive sera présentée dans le chapitre X.