Fiche offerte

Ton premier programme, sans rien installer

2 h de lecture et d'exercices · Faire tourner son premier programme

Nelya, votre guide IA

Nelya —Cette fiche est offerte, en entier. Lisez-la tranquillement : c'est le meilleur moyen de savoir si ma façon d'expliquer vous convient, avant de décider quoi que ce soit.

Ici, on se tutoie : tu es dans le cours, pas sur la brochure.

À la fin de cette séance, tu as écrit un programme qui lit quarante noms de fichiers et sort les vingt-deux qui sont mal formés — sans avoir rien installé sur ton ordinateur.

Durée de la séance : 2 h · Module 1 — Faire tourner son premier programme Dossier d'exercice : 01-premier-programme.zip — télécharge-le avant de commencer.


Ce que tu sauras faire à la fin

  • Exécuter du Python dans ton navigateur, sans installation et sans compte.
  • Ranger une liste de valeurs sous un seul nom, et compter combien elle en contient.
  • Reprendre le même traitement sur chaque élément d'une liste, sans écrire quarante lignes.
  • Poser une question à chaque élément, et n'afficher que ceux qui répondent oui.
  • Lire les trois messages d'erreur que tout le monde rencontre le premier jour.

1. Le problème, montré

Ouvre noms-de-fichiers.txt, le seul fichier du dossier d'exercice. Ce sont quarante noms relevés dans un vrai dossier de factures et de devis. En voici vingt, dans l'ordre du fichier.

Facture-muller-11.pdf
FACTURE-gauthier-02.pdf
facture-muller-11.pdf
Facture-moreau-06.pdf
facture_fontaine_8.PDF
Facture-perrin-02.pdf
devis_morel_12.PDF
Devis-gauthier-06.pdf
Facture-mercier-12.pdf
Facture-andre-03.pdf
FACTURE-lefevre-08.pdf
Facture-chevalier-05.pdf
[…]
facture andre 11.pdf
FACTURE-chevalier-09.pdf
Devis perrin 6.pdf
FACTURE mercier 12.pdf
Devis-gauthier-05.pdf
Facture leroy 1.pdf
Facture_gauthier_3.PDF
Devis morel 10.pdf

Prends quatre-vingt-dix secondes devant les quarante, dans le fichier, et compte ceux qui sont mal nommés. Fais-le vraiment : note un nombre sur un papier avant de lire la suite.

Tu as sans doute repéré les noms écrits avec des espaces à la place des tirets — facture andre 11.pdf, Devis perrin 6.pdf — et peut-être les cinq dont l'extension est en capitales, .PDF au lieu de .pdf. Ce sont les deux défauts visibles.

Il y en a un troisième, et tu ne peux pas le voir. Neuf de ces quarante noms se terminent par un espace. Un espace en fin de nom ne s'affiche nulle part : ni dans l'explorateur de fichiers, ni dans un tableur, ni dans le bloc ci-dessus. Il est là, il compte comme un caractère, il est invisible.

Le total est vingt-deux, sur quarante. Si ton papier dit treize, tu as trouvé exactement ce que l'œil peut trouver. Les neuf autres sont hors de portée d'une relecture, quel que soit le temps qu'on y passe.

Pourquoi ça compte

Un nom mal formé n'est pas une question d'esthétique, c'est une panne à retardement. Un espace de fin casse toute recherche : tu cherches Facture-andre-03.pdf, le fichier s'appelle Facture-andre-03.pdf␣, et ton tableur répond que la ligne n'existe pas. Une extension en capitales casse un filtre : un tri « tous les .pdf » laisse les cinq .PDF au bord de la route, sans le dire.

Et ces quarante noms, c'est le petit dossier. Le vrai en contient deux mille, et personne ne les relit à l'œil. Voilà pourquoi on écrit un programme.

⚠️ Ce que tu ne feras pas aujourd'hui : renommer. Le programme de cette séance lit et affiche. Il ne touche à aucun fichier, il ne renomme rien, il ne supprime rien. Renommer cinq cents fichiers sans en perdre un est un sujet entier, c'est la fiche 08, et elle vient bien plus tard pour une bonne raison.


2. Où écrire du Python, sans rien installer

Compte cinq minutes. C'est le seul moment de la séance où tu ne programmes pas.

Il existe des sites qui exécutent du Python directement dans le navigateur : tu tapes ton code dans un cadre, tu cliques sur un bouton, le résultat s'affiche à côté. Rien ne s'installe sur ta machine, aucun compte n'est demandé. Pour en trouver un, tape dans ton moteur de recherche python en ligne ou python online, et prends le premier résultat qui affiche deux zones — une pour le code, une pour le résultat — et un bouton « Run » ou « Exécuter », sans réclamer de compte. Cette fiche ne recommande aucun service : ils font tous la même chose pour ce dont tu as besoin aujourd'hui.

[CAPTURE 1] — Un interpréteur Python en ligne fraîchement ouvert, avant toute saisie : la zone de code à gauche, la zone de résultat à droite, le bouton d'exécution visible. Cadrage sur les deux zones et le bouton, sans la barre d'adresse ni le nom du service.

🚨 Règle absolue et sans exception : rien de confidentiel dans un interpréteur en ligne. Ton code part sur le serveur de quelqu'un d'autre pour y être exécuté. Les noms de cette séance sont des données d'exercice, sans importance. À l'atelier, tu travailleras sur tes propres noms de fichiers : si l'un d'eux contient un nom de client, un montant ou un numéro de dossier, remplace-le avant de coller. Dès la fiche 02, Python tourne chez toi et la question ne se pose plus.

Une remarque de version. La référence de cette formation est Python 3.14 ; l'interpréteur en ligne en fait tourner une autre, souvent plus ancienne, et ne te le dira pas forcément. Aucune importance aujourd'hui : tout ce que tu écris ici fonctionne à l'identique sur toutes les versions de Python 3. La question redeviendra sérieuse en fiche 02.


3. Ton premier programme tient en un mot

Dans la zone de code, efface ce qui s'y trouve déjà — la plupart de ces sites y laissent un exemple d'accueil — et tape exactement ceci :

print("Bonjour")

Clique sur le bouton d'exécution. Dans la zone de résultat :

Bonjour

Voilà. Tu viens d'exécuter un programme. Il est court, il ne sert à rien, et il a fait exactement ce que tu lui as demandé : c'est déjà tout ce qu'on attend d'un programme.

print veut dire « affiche ». Le mot vient de l'anglais imprimer, héritage d'une époque où la sortie partait sur du papier. Aujourd'hui print écrit dans la zone de résultat, et c'est le seul moyen que ton programme a de te parler. Les parenthèses encadrent ce qu'on lui donne, et vont toujours par deux. Les guillemets disent « ceci est du texte » : ce qui est entre guillemets est pris à la lettre. Sans eux, Python essaierait de comprendre Bonjour comme le nom de quelque chose.

Vérifie-le, en ajoutant une deuxième ligne :

print("Bonjour")
print(40 - 22)
Bonjour
18

La seconde ligne n'affiche pas 40 - 22 : elle affiche 18, parce que sans guillemets, Python a fait le calcul. Retiens cette différence, elle est à l'origine de la moitié des surprises des trois premières séances.

[CAPTURE 2] — Les deux lignes print dans la zone de code et le résultat Bonjour / 18 dans la zone de résultat. Cadrage serré sur les deux zones côte à côte.


4. Ranger les quarante noms sous une seule étiquette

Un programme qui affiche Bonjour ne range aucun dossier : il lui faut nos noms de fichiers. Tu es dans un navigateur, sur la machine de quelqu'un d'autre, et ton programme n'a aucun moyen d'ouvrir noms-de-fichiers.txt, qui est sur ton disque. On va donc coller la liste dans le code — façon de faire d'aujourd'hui, et seulement d'aujourd'hui : à partir de la fiche 07, ton programme ira lire le fichier tout seul.

Pour commencer, on n'en prend pas quarante mais quinze — assez pour que les trois défauts soient représentés, assez peu pour vérifier le résultat à l'œil. Efface tout, et tape ceci. Oui, en entier : recopier à la main, la première fois, fait plus pour toi qu'un copier-coller.

noms = [
    "Facture-muller-11.pdf",
    "FACTURE-gauthier-02.pdf",
    "facture_fontaine_8.PDF",
    "Facture-perrin-02.pdf",
    "devis_morel_12.PDF",
    "Facture-mercier-12.pdf",
    "Facture-andre-03.pdf ",
    "Facture-chevalier-05.pdf",
    "devis-chevalier-01.pdf",
    "facture andre 11.pdf",
    "Facture-gauthier-07.pdf ",
    "Devis perrin 6.pdf",
    "FACTURE mercier 12.pdf",
    "facture-muller-02.pdf",
    "Facture_gauthier_3.PDF",
]

print(len(noms))

Exécute. Le résultat :

15

noms = pose une étiquette. À gauche du signe égal le nom que tu choisis, à droite ce qu'il désigne. À partir de cette ligne, écrire noms dans ton programme, c'est écrire les quinze valeurs d'un coup. Le mot noms est le nôtre : mes_fichiers marcherait aussi bien. Choisis-le clair, tu le reliras.

Les crochets [ et ] délimitent la collection, ouverte sur la première ligne, refermée sur la dernière. La virgule sépare deux valeurs — une après chaque nom, y compris le dernier : Python l'accepte, et ça t'évitera de l'oublier le jour où tu ajouteras une ligne. Les guillemets, encore : chaque nom de fichier est du texte. len(noms) compte — de length, longueur. Il répond 15, et ce nombre est ton premier contrôle : si tu lis 14, une virgule manque quelque part.

Les deux espaces qu'il ne faut pas supprimer

Regarde le septième nom et le onzième :

    "Facture-andre-03.pdf ",
    "Facture-gauthier-07.pdf ",

Il y a un espace entre le f de pdf et le guillemet fermant. Il est là exprès : c'est le défaut invisible de la section 1, et le nom réel tel qu'il figure dans le fichier. Si ton éditeur ou ton habitude te le fait supprimer, ton programme trouvera six noms mal formés au lieu de huit, et tu chercheras longtemps pourquoi.

[CAPTURE 3] — La liste dans la zone de code, curseur de texte placé juste après le f de pdf du septième nom, de sorte que l'espace avant le guillemet soit visible. Cadrage serré sur quatre lignes de code.


5. Faire la même chose pour chacun

Tu as quinze noms sous une seule étiquette et tu veux les afficher tous. Le réflexe normal, celui que tout le monde a la première fois, serait d'écrire quinze lignes print. Pour quarante noms, quarante lignes. Pour deux mille, on arrête.

Python sait faire autrement. Remplace print(len(noms)) par ces deux lignes :

for nom in noms:
    print(nom)
Facture-muller-11.pdf
FACTURE-gauthier-02.pdf
facture_fontaine_8.PDF
Facture-perrin-02.pdf
devis_morel_12.PDF
Facture-mercier-12.pdf
Facture-andre-03.pdf 
Facture-chevalier-05.pdf
devis-chevalier-01.pdf
facture andre 11.pdf
Facture-gauthier-07.pdf 
Devis perrin 6.pdf
FACTURE mercier 12.pdf
facture-muller-02.pdf
Facture_gauthier_3.PDF

Quinze lignes affichées, deux lignes écrites. Lis la première à voix haute : « pour chaque nom dans noms, fais ceci ». C'est presque du français.

Le mot nom est le tien : Python ne le connaissait pas, tu viens de l'inventer sur cette ligne. C'est l'étiquette temporaire de l'élément en cours de traitement — au premier passage il désigne "Facture-muller-11.pdf", au deuxième "FACTURE-gauthier-02.pdf", et ainsi de suite. for truc in noms: avec print(truc) donnerait le même résultat ; écris quand même un mot qui a du sens. Le mot noms, lui, n'est pas libre : c'est l'étiquette posée à la section 4. Si tu écris for nom in liste:, Python te répondra qu'il ne connaît pas liste.

Les deux-points, et le décalage

Voilà la seule vraie difficulté de la séance.

La première ligne se termine par deux-points. Ils annoncent : « ce qui suit est le travail à répéter ». Sans eux, Python s'arrête net :

for nom in noms
    print(nom)
  File "<stdin>", line 3
    for nom in noms
                   ^
SyntaxError: expected ':'

Trois lignes, et elles disent tout : — ligne 3 ; la ligne fautive recopiée ; puis le problème nommé, expected ':', « on attendait deux-points », l'accent circonflexe ^ pointant l'endroit exact. Chez toi, la première ligne peut afficher main.py ou <string> à la place de <stdin> : c'est le nom que ton interpréteur donne à ton code. Le reste du message est identique.

La deuxième ligne est décalée vers la droite. Ce décalage n'est pas de la présentation : c'est lui qui dit quelles lignes appartiennent au travail répété. Quatre espaces, c'est l'usage. Retire-les :

for nom in noms:
print(nom)
  File "<stdin>", line 4
    print(nom)
    ^
IndentationError: expected an indented block after 'for' statement on line 3

IndentationError : erreur de décalage. Le message est même aimable — « on attendait un bloc décalé après l'instruction for de la ligne 3 ».

[CAPTURE 4] — Le message IndentationError complet dans la zone de résultat, avec le code fautif visible à gauche. Cadrage sur les quatre lignes du message et les deux lignes de code.

⚠️ Le décalage est le premier mur, et c'est un mur bas. Presque tous les langages marquent un bloc avec des accolades ; Python le marque avec le décalage. Déroutant pendant vingt minutes, confortable ensuite. La règle tient en une phrase : quatre espaces, toujours les mêmes, jamais un mélange d'espaces et de tabulations. Ta touche Tab insère peut-être une tabulation ; la plupart des interpréteurs en ligne la convertissent, mais pas tous. En cas de doute, appuie quatre fois sur la barre d'espace.


6. Poser une question à chaque nom

Afficher les quinze noms ne trie rien. On veut les mauvais, et eux seuls.

Commence par le défaut le plus fréquent : le nom contient un espace. Ajoute une ligne, et décale le print d'un cran de plus :

for nom in noms:
    if " " in nom:
        print(nom)
Facture-andre-03.pdf 
facture andre 11.pdf
Facture-gauthier-07.pdf 
Devis perrin 6.pdf
FACTURE mercier 12.pdf

Cinq noms sur quinze. Ton programme vient de faire un tri. Lis la ligne du milieu à voix haute : « si un espace est dans nom, alors… ».

if veut dire « si ». Ce qui suit est une question à laquelle on ne peut répondre que par oui ou par non. Si la réponse est oui, ce qui est décalé en dessous s'exécute ; sinon, Python saute par-dessus et passe à l'élément suivant.

" " entre guillemets, c'est un espace — un seul, celui de ta barre d'espace, et c'est du texte comme "Bonjour". Écrire "", deux guillemets collés, désignerait du texte vide, ce qui n'est pas la même chose. in veut dire « se trouve dans » : " " in nom demande « est-ce que cet espace se trouve quelque part dans ce nom ? » N'importe où — au début, au milieu, à la fin.

Et le décalage grandit d'un cran. Le print est maintenant à huit espaces du bord : il dépend du if, qui dépend du for. Chaque niveau dit « ceci n'arrive que si la ligne du dessus le permet ».

💡 Compte les niveaux avec ton doigt. Quand un programme ne fait pas ce que tu crois, pose ton doigt sur le bord gauche des lignes et regarde l'escalier. Une ligne qui devrait être à l'intérieur et qui est restée collée au bord est la panne la plus fréquente du débutant — tu la verras en action au piège 4.


7. Ce que « mal formé » veut dire, exactement

On a trié sur un défaut. Il en reste deux, et c'est le moment de poser la définition complète.

Un nom de fichier est mal formé s'il présente au moins un de ces trois défauts : 1. il contient un espace, où que ce soit ; 2. son extension est écrite en capitales — .PDF au lieu de .pdf ; 3. il se termine par un espace.

Trois défauts, trois questions. On ajoute la deuxième :

for nom in noms:
    if " " in nom:
        print("un espace           :", nom)
    if nom.endswith(".PDF"):
        print("extension capitales :", nom)
extension capitales : facture_fontaine_8.PDF
extension capitales : devis_morel_12.PDF
un espace           : Facture-andre-03.pdf 
un espace           : facture andre 11.pdf
un espace           : Facture-gauthier-07.pdf 
un espace           : Devis perrin 6.pdf
un espace           : FACTURE mercier 12.pdf
extension capitales : Facture_gauthier_3.PDF

Huit noms sur quinze, avec le défaut annoncé devant chacun. Trois nouveautés.

nom.endswith(".PDF") demande « est-ce que ce nom se termine par .PDF ? » End with, en anglais, veut dire « se terminer par ». Remarque l'écriture : le nom, un point, puis la question. Le point se lit « de » — « le "se termine par" de nom ». Tu croiseras cette forme partout, et la fiche 04 la démonte en détail.

Python distingue les capitales des minuscules : .PDF et .pdf sont pour lui deux textes aussi différents que chat et train. C'est ce qui nous permet d'attraper les cinq intrus.

print accepte plusieurs morceaux, séparés par des virgules : le texte, puis un espace, puis le nom. Les espaces à l'intérieur de "un espace :" alignent la colonne de droite.

La troisième question, et ce qu'elle apprend

Ajoute la dernière, à la suite des deux autres et au même décalage :

    if nom.endswith(" "):
        print("un espace a la fin  :", nom)
extension capitales : facture_fontaine_8.PDF
extension capitales : devis_morel_12.PDF
un espace           : Facture-andre-03.pdf 
un espace a la fin  : Facture-andre-03.pdf 
un espace           : facture andre 11.pdf
un espace           : Facture-gauthier-07.pdf 
un espace a la fin  : Facture-gauthier-07.pdf 
un espace           : Devis perrin 6.pdf
un espace           : FACTURE mercier 12.pdf
extension capitales : Facture_gauthier_3.PDF

Dix lignes affichées — mais toujours huit noms. Deux d'entre eux sortent deux fois.

Arrête-toi trente secondes là-dessus : c'est le passage intéressant de la séance. Un nom qui se termine par un espace contient forcément un espace. La troisième question ne peut donc jamais désigner un nom que la première a laissé passer. Ce n'est pas un hasard de nos données, c'est vrai par construction, sur n'importe quelle liste.

Alors pourquoi la garder ? Parce qu'elle nomme le défaut avec précision. « Un espace » et « un espace à la fin » ne sont pas le même problème : le premier se voit et se corrige en regardant, le second est invisible — c'est celui qui te fera dire « pourtant je vois bien le fichier » devant une recherche qui échoue. Un programme qui donne le bon diagnostic fait gagner plus de temps qu'un programme qui donne la bonne liste.

Reste un défaut d'affichage : deux noms sortent en double, et le compte devient impossible à lire.


8. Un seul verdict par nom, et un compte à la fin

Ce qu'on veut, c'est une ligne par nom fautif, avec son défaut le plus précis, et le total en bas. Voici la version qu'on garde :

mal_formes = 0

for nom in noms:
    probleme = ""
    if " " in nom:
        probleme = "un espace"
    if nom.endswith(".PDF"):
        probleme = "une extension en capitales"
    if nom.endswith(" "):
        probleme = "un espace à la fin"
    if probleme != "":
        mal_formes = mal_formes + 1
        print(nom, "→", probleme)

print()
print("Noms examinés   :", len(noms))
print("Noms mal formés :", mal_formes)

Exécute, en gardant tes quinze noms au-dessus :

facture_fontaine_8.PDF → une extension en capitales
devis_morel_12.PDF → une extension en capitales
Facture-andre-03.pdf  → un espace à la fin
facture andre 11.pdf → un espace
Facture-gauthier-07.pdf  → un espace à la fin
Devis perrin 6.pdf → un espace
FACTURE mercier 12.pdf → un espace
Facture_gauthier_3.PDF → une extension en capitales

Noms examinés   : 15
Noms mal formés : 8

Huit lignes, huit noms, un compte. Quatre choses ont changé.

probleme = "" remet l'ardoise à zéro. C'est la première ligne du travail répété : à chaque nouveau nom, probleme redevient du texte vide. Sans elle, le verdict du nom précédent resterait collé au suivant, et tu accuserais des noms innocents.

Le dernier « oui » l'emporte. Les trois questions s'exécutent dans l'ordre. Si un nom contient un espace et se termine par un espace, probleme reçoit d'abord "un espace", puis se fait remplacer par "un espace à la fin". C'est voulu : les questions sont rangées de la plus générale à la plus précise, pour que ce soit la plus précise qui reste. Inverse les trois if et le diagnostic devient plus flou, sans qu'aucune erreur ne te prévienne.

if probleme != "": demande « est-ce que probleme n'est pas vide ? » Le signe != se lit « est différent de ». Seuls les noms ayant récolté un verdict sont affichés ; les sept autres passent en silence.

mal_formes = mal_formes + 1 compte. À lire de droite à gauche : prends la valeur actuelle, ajoute 1, range le résultat sous la même étiquette. Ce n'est pas une équation — x = x + 1 n'aurait aucun sens en mathématiques — c'est un ordre. D'où le mal_formes = 0 tout en haut : il faut bien partir de quelque part.

print(), parenthèses vides, affiche une ligne blanche. Et la flèche "→" est du texte comme le reste : si ton interpréteur affiche un caractère bizarre à sa place ou sur les accents, écris "->" et enlève les accents. C'est un problème d'encodage, et la fiche 10 lui consacre une séance entière.


9. Les quarante noms

Passer de quinze à quarante ne demande aucune ligne de code supplémentaire : seulement de remplacer la liste.

Ouvre noms-de-fichiers.txt et recopie les quarante noms dans ton programme, un par ligne, chacun entre guillemets et suivi d'une virgule, exactement dans la forme de la section 4. Compte dix minutes, et ne te trompe pas sur les espaces de fin : les lignes 10, 14, 18, 23, 25, 29, 31, 34 et 35 du fichier en ont un.

Oui, c'est fastidieux, et même absurde : recopier une liste à la main pour éviter de relire une liste à la main, on a fait mieux comme économie. C'est exactement la limite du navigateur, et c'est la première raison d'installer Python en fiche 02. À partir de la fiche 07, ces quarante noms tiennent en une ligne, et deux mille aussi.

Le résultat sur les quarante — vingt-deux lignes, dont voici les huit premières et les quatre dernières :

facture_fontaine_8.PDF → une extension en capitales
devis_morel_12.PDF → une extension en capitales
Facture-andre-03.pdf  → un espace à la fin
FACTURE-rousseau-01.pdf  → un espace à la fin
devis_blanc_2.PDF → une extension en capitales
FACTURE-robin-07.pdf  → un espace à la fin
facture andre 11.pdf → un espace
Facture-gauthier-07.pdf  → un espace à la fin
[…]
Facture garnier 11.pdf → un espace
Facture_gauthier_3.PDF → une extension en capitales
Facture_moreau_12.PDF → une extension en capitales
Devis morel 10.pdf → un espace

Noms examinés   : 40
Noms mal formés : 22

Vingt-deux. Le nombre annoncé en section 1, obtenu sans compter à l'œil, en une demi-seconde, et il sera le même la prochaine fois.

Tes trois contrôles

Un programme qu'on ne vérifie pas n'est pas un gain de temps. Prends trente secondes.

  1. Noms examinés affiche 40. Si tu lis 39 ou 41, ta liste est mal recopiée — une ligne sautée, ou une virgule oubliée qui a collé deux noms ensemble.

  2. Noms mal formés affiche 22. Si tu lis 13, tes neuf espaces de fin ont disparu au collage. C'est le piège 1, le plus fréquent de cette séance.

  3. 40 − 22 = 18 noms corrects. Ce sont ceux qui n'apparaissent pas dans la sortie.

[CAPTURE 5] — Le programme complet dans la zone de code et, dans la zone de résultat, les dernières lignes de la sortie avec les deux compteurs Noms examinés : 40 et Noms mal formés : 22. Cadrage sur le bas de la zone de résultat.

Quarante lignes de liste, une quinzaine de lignes de travail, Alex, et une corvée de quatre-vingt-dix secondes ramenée à zéro. C'est très exactement ce que fait cette formation, et tu viens de le faire une fois.


À toi : l'atelier

Compte 40 minutes. Le corrigé est dans le dossier d'exercice : ouvre-le après, pas pendant.

Étape 1 — Refaire sans regarder (10 minutes). Ouvre un interpréteur vide. Sans remonter dans la fiche, réécris le programme de la section 8 sur les quinze noms. Tu vas oublier des deux-points et des décalages : c'est le but de l'étape. Contrôle : Noms mal formés : 8.

Étape 2 — Les quarante (10 minutes). Remplace la liste par les quarante noms de noms-de-fichiers.txt. Contrôle : Noms examinés : 40 et Noms mal formés : 22.

Étape 3 — Une quatrième question (5 minutes). Beaucoup de ces noms sont écrits entièrement en capitales : FACTURE-lefevre-08.pdf. Ajoute une quatrième question qui les repère, en réutilisant in, et place-la à l'endroit qui convient dans la série. Contrôle : sur les quarante noms, le total passe de 22 à 25, parce que trois noms tout en capitales n'avaient encore aucun autre défaut.

Étape 4 — Tes propres noms de fichiers (15 minutes). C'est l'étape qui compte. Choisis un dossier à toi — téléchargements, photos, factures — et récupère la liste de ses noms.

Et sur l'autre système ? Sur Windows : sélectionne les fichiers dans l'Explorateur, maintiens Maj, clic droit, puis « Copier en tant que chemin d'accès ». Sur macOS : sélectionne les fichiers dans le Finder, maintiens Option, ouvre le menu Édition et choisis « Copier comme noms de chemins ». Dans les deux cas, colle le résultat dans un éditeur de texte : tu obtiens un chemin complet par ligne. Sous Linux, le geste dépend du gestionnaire de fichiers.

Tu obtiens des chemins complets. Garde la fin de chaque ligne — le nom de fichier — et mets-la entre guillemets ; vingt noms suffisent largement. Puis relance ton programme dessus, sans y changer une ligne. Si un de tes noms contient une information que tu ne souhaites pas envoyer sur le serveur d'un tiers, remplace-la : le programme s'en moque.

Ce que tu dois avoir à la fin

  • Un programme qui tourne sur quinze noms et affiche 8 noms mal formés.
  • Le même sur les quarante noms : 40 examinés, 22 mal formés.
  • Le même, avec quatre questions au lieu de trois : 25 mal formés.
  • Le même, sur tes noms de fichiers, avec un nombre que tu es celui qui sait interpréter.

Garde ce dernier programme dans un fichier texte sur ton ordinateur. Tu le rouvriras en fiche 07, quand il saura lire ton dossier tout seul.


Les pièges

1. L'espace de fin a disparu au collage, et le compte est faux. Symptôme : sur les quarante noms, tu lis Noms mal formés : 13 au lieu de 22, et aucune ligne « un espace à la fin » n'apparaît. Cause : les neuf espaces de fin ont sauté. Certains éditeurs les suppriment automatiquement ; le copier-coller depuis un aperçu de fichier les perd aussi. Sortie de secours : rouvre noms-de-fichiers.txt dans un éditeur de texte brut — le Bloc-notes sur Windows, TextEdit en mode texte seul sur macOS — et retape l'espace à la main avant le guillemet fermant, aux lignes 10, 14, 18, 23, 25, 29, 31, 34 et 35. Le total doit remonter à 22.

2. IndentationError: expected an indented block after 'for' statement on line 3. Symptôme : ce message, et rien d'autre. Cause : la ligne qui suit un for ou un if n'est pas décalée. Python attend un travail à faire, il ne trouve rien. Sortie de secours : place ton curseur au début de la ligne fautive — son numéro est dans le message — et appuie quatre fois sur la barre d'espace. Vérifie ensuite que toutes les lignes du même niveau sont alignées au même endroit, à l'espace près.

3. SyntaxError: expected ':'. Symptôme : le message de la section 5, avec un ^ en bout de ligne. Cause : les deux-points manquent à la fin d'un for ou d'un if. C'est l'oubli le plus fréquent des trois premières heures de Python, sans exception. Sortie de secours : va à la ligne indiquée, curseur tout à droite, tape :. Le ^ du message pointe déjà l'endroit exact.

4. Un seul nom s'affiche, et son verdict est faux. Symptôme : ton programme sort une seule ligne, par exemple Facture_gauthier_3.PDF un espace — alors que ce nom ne contient aucun espace. Cause : ton print final est collé au bord gauche, donc il ne fait plus partie du travail répété. Il s'exécute une fois, à la fin, avec les dernières valeurs en mémoire : le dernier nom de la liste, et le dernier verdict enregistré, qui appartenait à un autre nom. Sortie de secours : décale le print au même niveau que les if. C'est le piège le plus dangereux de la fiche : le programme ne plante pas, il répond faux. Les contrôles chiffrés de la section 9 sont faits pour l'attraper.

5. Une virgule oubliée entre deux noms, et un nom disparaît. Symptôme : len(noms) affiche 14 au lieu de 15, et un nom bizarre apparaît dans la sortie — FACTURE-gauthier-02.pdffacture_fontaine_8.PDF. Cause : deux textes écrits l'un après l'autre sans virgule sont recollés en un seul par Python, sans le moindre avertissement. Sortie de secours : print(len(noms)) avant toute chose. Le nombre doit être celui que tu attends. Un contrôle d'une seconde qui t'épargne un quart d'heure.

6. Les guillemets oubliés autour d'un nom. Symptôme : SyntaxError: invalid decimal literal. Cause : un nom écrit sans guillemets, ou un guillemet fermant manquant. Python essaie de lire Facture-muller-11.pdf comme un calcul, tombe sur le 11 collé à un tiret, et abandonne. Le message parle de nombre décimal alors que tu parles de fichiers : c'est déroutant, et c'est normal. Sortie de secours : compte les guillemets sur la ligne indiquée. Il en faut deux par nom.


Critères de réussite


Si tu veux aller plus loin

  • Trois compteurs au lieu d'un. Compte séparément les noms qui contiennent un espace, ceux dont l'extension est en capitales, et ceux qui finissent par un espace. Sur les quarante noms tu dois obtenir 17, 5 et 9 — et remarquer que 17 + 5 + 9 ne fait pas 22. Explique l'écart à voix haute : c'est toute la section 7 en une phrase. 10 minutes.

  • Afficher les bons plutôt que les mauvais. Remplace if probleme != "": par if probleme == "": — deux signes égal, qui se lisent « est égal à ». Le programme sort alors les noms corrects : 18 sur les quarante. 5 minutes.

  • Une liste vide, pour voir. Remplace tes quinze noms par noms = [] et exécute. Le programme n'affiche rien, annonce 0 examiné, 0 mal formé, et ne plante pas. Ça paraît anodin ; c'est la preuve qu'un travail répété sur rien du tout est une situation prévue, pas une panne. Tu seras surpris du nombre de programmes qui, eux, s'écroulent là-dessus. 5 minutes.


Ce qu'on retient

  • Un interpréteur Python en ligne suffit pour écrire un programme utile : rien à installer, rien à configurer, et rien de confidentiel dedans.

  • print est le seul moyen qu'a ton programme de te parler. Sans guillemets Python calcule, avec guillemets il recopie.

  • Au fait, ce que tu viens d'écrire porte des noms. noms, probleme et mal_formes sont des variables : des étiquettes posées sur une valeur, qu'on peut relire et remplacer. Ce qui est entre crochets est une liste : plusieurs valeurs rangées dans l'ordre sous une seule étiquette.

  • for nom in noms: est une boucle : le même travail refait une fois par élément, que la liste en contienne quinze ou deux mille. if " " in nom: est une condition : un bloc qui ne s'exécute que si la réponse est oui.

  • Une variable, une boucle et une condition sont les trois briques de presque toutes les automatisations que tu écriras. Tu les as écrites avant d'en connaître le nom, et c'est le bon ordre.

  • En Python, le décalage des lignes n'est pas de la mise en forme : c'est lui qui dit ce qui appartient à quoi. Quatre espaces, toujours les mêmes.

  • Un message d'erreur donne le numéro de ligne, recopie la ligne, et nomme le problème. Il se lit, il ne se subit pas.

  • Un programme qui ne plante pas peut être faux. Un compte affiché à la fin vaut mieux qu'une longue sortie qu'on ne vérifie jamais.

  • Cette séance n'a renommé aucun fichier, et c'est volontaire : lire et afficher d'abord, agir ensuite.


Et maintenant ?

Cette séance est offerte, et elle s'arrête ici — mais elle ne s'arrête pas au milieu, Alex. Tu as un programme entier, qui tourne, que tu as écrit toi-même et fait tourner sur tes propres fichiers. Tu sais ranger des données sous un nom, les parcourir une par une, poser une question à chacune, compter, et lire les trois messages d'erreur qui font abandonner tout le monde le premier soir. C'est la moitié de ce dont on se sert tous les jours pour automatiser une corvée.

Ce qui manque, honnêtement, c'est tout ce que le navigateur t'interdit. Ton programme ne peut pas ouvrir un fichier, donc tu as recopié quarante noms à la main. Il ne peut pas parcourir un dossier, donc il ne saura jamais combien tu as vraiment de factures. Il ne peut rien enregistrer, donc il disparaît quand tu fermes l'onglet. Et il ne peut pas se lancer tout seul le lundi matin, ce qui est pourtant le but de toute l'histoire.

Ces quatre limites ont la même sortie : Python doit tourner chez toi. C'est la fiche 02 — Installer Python pour de bon : Windows et macOS en 2026. Deux heures et demie, et elles sont méritées, parce que c'est là que la plupart des gens s'arrêtent : l'installeur que tous les tutoriels francophones recommandent encore est en train de disparaître, et la fameuse case « Add python.exe to PATH » n'existe plus dans la méthode officielle. On y va pas à pas, sur les deux systèmes, et on vérifie l'installation en trois commandes.

Ensuite viennent les briques du langage, le rangement de tes fichiers, tes classeurs, la planification — et à partir de la fiche 03, chaque séance fait grossir le même programme : le rapport du lundi matin, celui qui t'attendra un jour avec le travail déjà fait.