Mon Labo Python

Comprendre les boucles for et while en Python sans peine

Comprendre les boucles for et while en Python sans peine

Il pleut sur Clermont-Ferrand ce soir, et je suis encore là, à ma table de cuisine, avec les miettes du dîner pour seules compagnes. Devant moi, sur l'écran, une liste de courses que j'essaie désespérément de transformer en quelque chose d'utile avec Python. Mon but était simple : que l'ordinateur lise chaque ligne de ma liste une par une sans que j'aie à taper dix fois la commande 'print'. C'est comme ça que je me suis retrouvée nez à nez avec le concept des boucles.

Le robot de la boucle 'for' et le mystère des quatre espaces

Au début, j'ai vu la boucle for comme un petit robot ménager très obéissant. On lui donne une corbeille de linge (ma liste), et on lui dit : « Pour chaque vêtement dans cette corbeille, plie-le ». C'est exactement ce que fait Python. J'ai créé ma liste de fruits, et j'ai écrit ma première ligne de code. C'est là que j'ai réalisé que pour Python, tout commence à l'index 0. Si ma liste a cinq fruits, le premier est le numéro zéro. C'est un peu déroutant, comme si on commençait à compter ses marches d'escalier par la marche zéro, mais on s'y fait.

Le plus dur pour moi n'a pas été la logique, mais la discipline. En Python, l'indentation n'est pas là pour faire joli. C'est une règle absolue. Pour que mon petit robot comprenne ce qu'il doit faire à l'intérieur de la boucle, je dois décaler mon texte. Le bruit de mon vieux clavier qui claque un peu trop fort dans le silence de l'appartement quand je tape mes quatre espaces d'indentation est devenu le rythme de mes soirées. C'est le standard de la PEP 8, le guide de style officiel, et si on ne le respecte pas, la machine nous envoie balader avec un message d'erreur rouge vif.

Gros plan sur un écran d'ordinateur affichant une boucle Python et un clavier

Le drame de la boucle 'while' et le ventilateur en folie

Si la boucle for est un robot qui vide une corbeille, la boucle while (tant que), c'est une autre paire de manches. Je l'ai testée pour créer un compte à rebours. L'idée était simple : tant que mon chiffre est plus grand que zéro, affiche-le et enlève 1. Sauf que, dans ma fatigue de fin de journée, j'ai oublié la partie « enlève 1 ».

Ce qui s'est passé ensuite restera gravé dans ma mémoire de débutante. J'ai eu une petite poussée d'adrénaline et de panique quand j'ai vu le texte défiler sans fin sur mon écran noir, des milliers de « 10 » qui s'affichaient à la seconde. Mon vieux PC a commencé à souffler, le ventilateur s'est emballé comme s'il allait décoller de la table de la cuisine. Je ne savais pas comment l'arrêter ! J'ai fini par trouver le fameux raccourci Ctrl+C pour couper le sifflet à la machine. J'ai appris ce soir-là qu'une boucle while a toujours besoin d'une porte de sortie, sinon elle tourne jusqu'à la fin des temps (ou jusqu'à ce que l'ordinateur fonde).

Le déclic des dossiers et de l'eau des pâtes

Le vrai déclic est venu un dimanche après-midi en mai, alors que je triais mes vieux dossiers administratifs. J'avais une pile de papiers bien précise à classer : c'était une boucle for. Je savais quand ça s'arrêterait. Par contre, quand j'ai mis l'eau des pâtes à chauffer juste après, je me suis dit : « Je surveille la casserole TANT QUE l'eau ne bout pas ». Je ne savais pas si ça prendrait trois ou six minutes. C'est ça, la boucle while. On attend une condition, pas la fin d'une liste.

J'ai aussi compris pourquoi on utilise souvent la fonction range(5). Au début, je pensais que ça m'afficherait les chiffres jusqu'à 5. Mais non, Python s'arrête juste avant. Ça génère 0, 1, 2, 3 et 4. C'est un héritage de la façon dont le langage a été conçu, notamment depuis la sortie de Python 3.0 en 2008, qui a bien changé les choses par rapport aux versions plus anciennes. C'est un peu comme si on vous promettait cinq bonbons et qu'on s'arrêtait de compter à quatre parce qu'on a commencé à zéro. C'est frustrant au début, puis on finit par intégrer cette logique bizarre.

Pourquoi je commence à bouder les boucles classiques

Après quelques mois de pratique, j'ai découvert quelque chose qui a un peu changé ma vision des choses. On nous apprend toujours les boucles for et while en premier, mais en discutant avec des gens qui codent depuis longtemps, j'ai réalisé qu'il y avait plus élégant. Parfois, écrire quatre lignes de code pour filtrer une liste, c'est un peu comme sortir le gros mixeur pour hacher une seule gousse d'ail.

C'est là que j'ai découvert les compréhensions de liste. C'est une façon d'écrire une boucle en une seule ligne, très compacte. Au lieu de dire à Python de créer une liste vide, puis de parcourir une autre liste, puis d'ajouter les éléments un par un, on lui dit tout d'un coup ce qu'on veut. C'est beaucoup plus lisible une fois qu'on a l'habitude. C'est le genre de petites astuces que je découvre petit à petit, souvent après avoir galéré pendant des heures sur un script qui refusait de fonctionner, comme je l'expliquais dans mon journal sur la difficulté d' apprendre la programmation Python après le travail à la maison.

Aujourd'hui, mes boucles tournent enfin rond. Ce n'est pas encore du code de professionnel, loin de là, mais voir ma liste de tâches s'afficher proprement sans faire planter mon ordinateur me donne l'impression d'avoir dompté une petite partie de la machine. Je ne comprends toujours pas tout, loin de là, notamment pourquoi certaines boucles imbriquées me donnent encore le tournis, mais le brouillard se lève doucement. Demain, j'essaierai peut-être de manipuler un fichier Excel, mais pour ce soir, je ferme l'ordinateur, ma tisane est froide et mes yeux piquent un peu trop.

Articles connexes