6. Les types séquentiels

Mémento Python
Raccourcis clavier

Certains programmes nécessitent l’utilisation d’un grand nombres de valeurs. Il serait impraticable de les mettre chacune dans une variable différente. Comme d’autres langages de programmation, Python offre la possibilité de stocker des séquences de valeurs dans des variables de type séquentiel (ou itérable).

Le type string que nous connaissons déjà est un exemple de variable séquentiel car il s’agit simplement d’une séquence de caractères !

Le type liste

Une liste est une variable de type séquentiel. C’est une séquence ordonnée d’objets quelconques (nombres, textes, fonctions, etc…).
Pour définir une liste, on met simplement la liste des objets que contient la liste dans des crochets [] séparés par des virgules.

On peut accéder au contenu d’une liste en indiquant entre crochets [] le numéro de l’élément que l’on souhaite. Attention, le numérotation commence à 0 !

On appelle le numéro d’un élément l’index. Ainsi, par exemple, le 3ème élément d’une liste se trouve à l’index 2.

Il est aussi possible d’accéder aux éléments en partant de la fin en commençant par l’index -1 pour le dernier élément, puis -2, -3, etc.

Question

En informatique, une liste …




Une liste est une séquence ordonnée d’objets quelconques (nombres, strings, fonctions, etc). Une liste peut même contenir d’autres listes.

Exercice 21 - Listes de branches (facile 😎)

Créez une liste branches et une liste moyennes qui contiennent respectivement les noms de 3 branches du gymnase et les moyennes que vous y avez.
Affichez ensuite la moyenne pour chaque branche.

Solution

Question

Que se passe-t-il si vous essayez d’accéder à un index en dehors de la liste (par exemple à l’index 3 dans une liste de 3 éléments) ?




Le plus grand index possible d’une liste de longueur n est n-1. Si vous dépassez cet index, vous êtes “out of range” (hors des limites) et le programme plante.

Pour modifier un élément d’une liste à un certain index, il suffit d’utiliser le signe = pour mettre une nouvelle valeur à l’index voulu.
Pour ajouter un élément à la fin d’une liste, on utilise la méthode append() (“ajouter” en français) en donnant en argument la valeur à ajouter.

Pour aller plus loin

Exercice 22 - Modifications de listes (facile 😎)

Reprenez l’exercice précédent (l’exercice 21).

  1. Modifiez la moyenne de l’une de vos branches.

  2. Ajoutez une nouvelle branche à votre liste de branches. Ajoutez également la moyenne correspondante dans la liste de moyennes.

  3. Affichez les nouvelles données.

Solution

Question

Que va afficher ce programme ?

grille= [[1,2,3],[4,5,6],[7,8,9]]
print(grille[2][1])




La variable grille est une liste contenant 3 listes de 3 nombres chacune.
Le programme affiche le 2ème élément (index 1) de la 3ème liste (index 2).

Les caractères d’une chaînes de caractères (str) peuvent aussi être indexés (numérotés). Chaque élément d’un string correspond alors à un caractère.

La notation [i:j], après le nom d’une variable qui contient une liste, permet d’extraire une sous-liste de la liste. Cette sous-liste, aussi appelée tranche, est une partie de la liste identifiée par les deux index i et j. La sous-liste contiendra donc les éléments se trouvant entre i et j-1.

Question

Quel est le résultat de l’expression 'python'[:2] ?




La tranche [:2] récupère les 2 premiers éléments (0 et 1).

Question

Quel est le résultat de l’expression 'pikachu'[-3:] ?




La tranche [-3:] récupère les 3 derniers éléments (-3, -2, -1).

Le mot-clé in permet de tester si une valeur se trouve dans une liste (ou n’importe quelle autre variable de type séquentiel).
A l’inverse, not in permet de tester l’absence d’une valeur.

De la même manière, in permet de tester si un mot se trouve dans une phrase ou un texte.

L’opérateur + permet de concaténer (appondre) plusieurs listes ou plusieurs chaînes de caractères (string) ensemble.

La boucle for

L’instruction for ... in ... permet d’itérer sur une variable de type séquentiel (par exemple une liste) et de répéter un bloc d’instructions pour chaque valeur de la séquence.
for valeur in liste peut être traduit en français par pour chaque valeur de la liste et permet donc d’itérer sur chaque valeur.

Dans l’exemple ci-dessous, la variable name prendra successivement les valeurs de la liste presidents et la fonction print() sera à chaque fois exécutée.
Une variable qui change ainsi pour chaque élément d’une séquence est appelée une variable d’itération.

L’exemple suivant montre comment itérer sur une liste de couleurs.

Question

Que va afficher ce programme ?

somme = 0
for n in [2, 3, 5, 7, 11]:
    somme = somme + n
print(somme)




Le programme calcule la somme des éléments de la liste et l’affiche (2+3+5+7+11 = 28).
Cela se fait en itérant sur chaque nombre de la liste (la variable d’itération n vaut donc successivement 2, 3, 5, 7 et 11).

Exercice 23 - Calcul de moyenne (moyen 🤓)

Ecrivez une fonction calcule_moyenne() qui prend une liste de nombres en argument et qui retourne la moyenne de ces nombres.
Indice: la fonction len() permet de calculer la longueur d’une liste.

Solution

Le type range

Une range (“intervale” en français) est un autre exemple de variable de type séquentiel.
Elles sont utilisées pour stocker des intervales de nombres entiers de manière plus efficace qu’une liste. Une variable de type range peut être créée avec la fonction range(start, stop, step) qui retourne un interval semi-fermé [start, stop[ avec un incrément de step.

  • start est la valeur de départ (vaut 0 si pas indiqué),

  • stop est la valeur finale, mais sans l’inclure,

  • step est l’incrément (vaut 1 si pas indiqué).

L’exemple suivant affiche le carré des nombres 1 à 9.

L’exemple suivant dessine un polygone en utilisant une boucle for et une range.

En utilisant l’argument step, on peut visualiser l’intervale [-50, 250[ avec un incrément de 50.

En imbriquant 2 boucles for, il est possible de construire toutes les tables de multiplication (jusqu’à 9 dans cet exemple).
i et j sont des noms de variable très communément utilisés pour itérer sur des nombres.

Question

Que va afficher ce programme ? (les / remplacent ici un retour à la ligne)

mot_complique = 'anticonstitutionnellement'
for i in range(0, 10, 2):
    print(mot_complique[i:i+2])




Le programme itère sur tous les index pairs dans l’intervale [0, 10[ (donc 0,2,4,6,8). Pour chaque index i, il affiche la tranche de caractères allant de i à i+1.
En résumé, on affiche les caractères aux index suivants: 0-1, 2-3, 4-5, 6-7, 8-9.

Exercice 24 - Nombres premiers (difficile 🤯)

  1. Ecrivez une fonction est_premier() qui contrôle si un nombre donné en argument est premier ou non et retourne la valeur logique associée.
    Pour rappel, un nombre est premier quand il n’est divisible par aucun autre nombre (à part 1 et lui-même).
    Les plus petits sont: 2, 3, 5, 7, 11, 13, etc…

  2. Utilisez cette fonction pour afficher tous les nombres premiers plus petits que 1000.

Solution

Le jeu du pendu (optionnel)

Le jeu du pendu consiste à trouver un mot en devinant les lettres qui le composent. Le jeu se joue traditionnellement à deux, avec un papier et un crayon, avec le dessin d’une potence, dans lequel, pour chaque erreur, un trait du bonhomme allumette est ajouté.

Exercice du pendu (difficile 🤯)

Modifiez le programme du pendu pour que l’ordinateur choisisse aléatoirement un mot à trouver parmi une liste de mots de votre choix.
Plusieurs pistes de solution:

  1. Sélectionnez un mot de la liste à un index aléatoire avec la fonction randint() du module random.

  2. Sélectionnez un mot de la liste aléatoirement avec la fonction choice() du module random.

Faites-en sorte que le programme s’arrête dès que vous avez trouvé le mot mystère et affiche ‘Gagné !’.
Une possible manière de faire est d’utiliser l’instruction break qui permet de sortir immédiatement de la boucle courante (plus d’infos ici).

Solution

Vous avez tout terminé ? Allez faire un tour sur Modulo !