Les outils de base

outils de base

D'après une photo de Greg Rosenke sur Unsplash

Échanger le contenu de deux variables

Lorsque nous allons effectuer des opérations sur les données, très souvent nous serons amenés à échanger le contenu de deux variables. Il faut se rappeler qu'en informatique, de façon très simplifiée, une variable est une boite, avec une étiquette, qui a un contenu. Ce contenu va être unique et il faut être attentif à son évolution

Fausse bonne idée

Imaginons deux variables a et b qui contiennent des valeurs entières que l'on veut échanger. Il serait tentant d'utiliser le code suivant

a = 5
b = 7
# on échnage le contenu de a et b
a = b
b = a
# On affiche le résultat de la manipulation
print(f"a vaut {a} et b vaut {b}")

Vous vous attendez sans doute à ce que a ait pour valeur 7 et b pour valeur 5 ? Essayez vous même le code

On voit que ça ne marche pas ! À la fin de l'éxécution de ce code, a et b valent tous les deux 7. C'est normal. Au début de notre programme, a vaut 5 et b vaut 7. Lorsque nous exécutons l'instruction a = b, à ce mmoment là, a prend la valeur 7. Et par la suite, aussi bien a que b auront la valeur 7. Nous avons perdu l'information que contenait a lorsque nous l'avons remplacé par l'information que contient b.

La bonne façon de faire

Pour ne pas perdre l'information contenue dans a, nous allons la stocker dans une variable temporaire, que nous n'utiliserons que le temps de l'échange. Le code devient :

a = 5
b = 7
# on échnage le contenu de a et b
temporaire = a
a = b
b = temporaire
# On affiche le résultat de la manipulation
print(f"a vaut {a} et b vaut {b}")

Essayez le programme vous même

À retenir

Pour échanger le contenu de deux variables, on utilise une variable temporaire.

# on échnage le contenu de a et b
temporaire = a
a = b
b = temporaire
Pour aller plus loin

En Python, il existe une autre façon de faire qui est plus courte, mais qui relève du "truc". Néanmoins, on voit ce procédé très souvent, et il n'est pas inutile de comprendre le fonctionnement

En python, il existe des tuples, qui sont des variables identiques à des listes, mais dont le contenu n'est pas modifié. Un tuple est indiqué entre parenthèse. Par exemple le tuple (a,b) contient les valeurs de a et b.

Par ailleurs, un tuple peut être écrit avec ou sans les parenthèses s'il n'y a pas d'ambiguité. On peut se servir de cela pour faire des affectations multiples.

Cela permet de faire le raccourci suivant pour échanger les valeurs de a et b

# Échange du contenu de a et b
a, b = b, a

Il faut bien avoir conscience que l'on travaille ici avec des tuples, et que les parenthèses ont été omises.

Recherche du maximum dans une liste

On souhaite rechercher le plus grand élément d'une liste. Bien sur, en première approche, le problème semble anodin. Il suffit de "regarder lequel est le plus grand". Pour faire cela, nous effectuons en fait inconsciemment une suite d'opérations complexes qu'il va falloir conscientiser.

Un ordinateur peut effectuer de très nombreux calculs très rapidement, il peut manipuler énormément de données, mais tout se fait à partir d'opérations élémentaires très limitées. Si l'on veut accéder à des informations de façon pérenne pendant le déroulement d'un programme, il faut absolument que cette information soit stockée dans une variable.

Pour visualiser la situation, imaginez que la liste dont vous cherchez le plus grand élément est conséquente. Elle contient une bonne centaine d'élément. Qui plus est, imaginez que ce sont des nombres décimaux de 10 à 20 chiffres, qui ne diffèrent parfois que d'un chiffre à la dixième décimale... Il est impossible de "voir" le plus grand en un coup d'oeil.

Voici comment nous allons procéder :

  • On commence au début de la liste. Le premier élément est le plus grand que l'on connaît pour l'instant (on en a pas vu d'autre)
  • On stocke cette information dans une variable (le_plus_grand par exemple)
  • On va ensuite parcourir tous les éléments de la liste. Pour chaque élément, on va regarder : est il plus grand que le plus grand que l'on ait vu jusqu'ici. Ça tombe bien, ce plus grand jusqu'ici est stocké dans la variable le_plus_grand. Si l'élément de la liste est plus grand, on va mémoriser cette valeur dans notre variable le_plus_grand. Sinon, il n'y a rien de particulier à faire, on passe juste à l'élément suivant.

Le code est donc le suivant :

le_plus_grand = liste[0]
for elt in liste:
    if element > le_plus_grand :
        le_plus_grand = element
print(f"Le plus grand élément de la liste est {le_plus_grand}")

Recherche de l'indice du maximum dans une liste

On va maintenant s'intéresser à un autre problème, voisin. Il ne s'agit plus de trouver le maximum d'une liste. Il s'agit de trouver à quelle position est le maximum dans la liste. Pour cela, nous allons utiliser une variable supplémentaire, qui va stocker l'indice du maximum.

  • Cette variable, indice_max, sera initialisée à 0.
  • Nous allons ensuite parcourir la liste. Pour chaque élément de la liste, nous allons regarder si l'élément est plus grand que l'élément qui est à la position indice_max.
    • Si c'est le cas, alors nous allons stocker l'indice de cet élément dans la variable indice_max.
    • Sinon, on passe juste à l'élément suivant
  • Lorsque nous aurons parcouru toute la liste, la variable indice_max contiendra l'indice du plus grand élément de la liste.

Le code n'est finalement pas très différent du précédent. La principale différence est surtout que nous parcourons la liste en utilisant les indices dans notre boucle for plutôt que de parcourir la liste par éléments.

indice_max = 0
for i in range(len(liste)):
    if liste[i] > liste[indice_max] :
        indice_max = i
print(f"L'indice du plus grand élément de la liste est {indice_max}")
À vous de faire

À votre tour ! Vous allez compléter le code pour rechercher la position du minimum d'une liste et donner la valeur de ce minimum.