← Bibliothèque · BOOST · Mon premier script
0/0 ⬇
Collection « Challenges » · Apprendre à coder en Python · Adultes débutants · Boost

Mon premier script — 5 jours pour comprendre le code et gagner du temps

Vous n'avez jamais programmé et le code vous impressionne ? En cinq jours, vous comprenez ce qu'est un programme, vous ouvrez votre atelier sans rien risquer, et vous écrivez un premier script qui vous fait gagner du temps : votre calculateur d'échéances.

5 épisodes · 5 jours1 épisode par jourBasthon ou Thonny≈ 25 min / épisode
BOOST · 5 JOURSComprendre ce qu'est un programme et écrire un premier script qui vous fait gagner du temps.
PRO · 20 JOURSAutomatiser vos tâches répétitives (fichiers, tableaux) avec des scripts que vous savez corriger.
MASTER · 4 MOISFaire tourner un outil fiable et documenté, apprendre seul et transmettre à un collègue.
Le fil rouge. Nadia, 47 ans, assistante de gestion dans une PME (personnage fictif). Chaque fin de mois, elle suit les factures, calcule des échéances et des pénalités de retard à la calculatrice. Elle n'a jamais programmé et elle a peur de « casser l'ordinateur ». Elle progresse avec vous, jour après jour.
Chaque épisode = un scénario, une notion ou une méthode, ce que disent les sources, des idées reçues, un quiz, votre kit et votre journal.
Rien à casser. Les scripts de ce livre ne lisent et ne modifient aucun fichier. Basthon, dans votre navigateur, suffit pour tout le parcours. Votre progression et votre journal restent dans ce navigateur.
Règle d'or. Un code que vous ne comprenez pas, vous ne le lancez pas.
01
JOUR 1 · Comprendre

Un programme, c'est une procédure que vous suivez déjà

Passer d'une procédure que vous suivez à la main à un algorithme, puis à quelques lignes de Python : variables, types, opérateurs, conversions.

⏱ 20 min de lecture · 5 min de quiz
[1]Scénario
Nadia · Lundi, 9 h

Sur le bureau de Nadia, une fiche plastifiée, jaunie par les années : « Facture payée en retard : 1. noter le montant ; 2. compter les jours de retard ; 3. appliquer le taux annuel au prorata des jours ; 4. ajouter l'indemnité de 40 € ». Elle la suit à la calculatrice, facture après facture, et recommence quand elle se trompe d'une touche. Karim, son collègue de la comptabilité, passe la tête par la porte : « Ta fiche, c'est déjà un programme. Il ne lui manque qu'une langue que l'ordinateur comprend. »

[2]Concept

De la fiche au programme

Programme, algorithme, langage. Un algorithme est une suite d'étapes précises qui résout un problème. La fiche de Nadia, rendue précise :

  1. prendre le montant de la facture ;
  2. multiplier par le taux annuel (en %), puis diviser par 100 ;
  3. multiplier par le nombre de jours de retard, puis diviser par 365 ;
  4. ajouter l'indemnité forfaitaire de 40 €.

Un langage est une façon d'écrire ces étapes pour qu'un ordinateur les exécute ; un programme est l'algorithme écrit dans ce langage. Python exécute les lignes dans l'ordre, de haut en bas, exactement comme elles sont écrites : ni plus, ni moins.

Code
montant = 1850
taux_annuel = 12.40
jours_retard = 12
indemnite = 40
penalites = montant * taux_annuel / 100 * jours_retard / 365
total_du = penalites + indemnite
print(penalites)
print(round(penalites, 2))
print(round(total_du, 2))

Affiche 7.5419178082191785, puis 7.54, puis 47.54.

Les variables. montant = 1850 pose l'étiquette montant sur la valeur 1850, comme une cellule de tableur à laquelle vous auriez donné un nom. Le signe = range une valeur ; il ne compare pas. Une variable peut changer : facture = facture + 40 calcule facture + 40, puis range le résultat dans facture. Les noms s'écrivent en minuscules, sans espace ni accent, avec _ entre les mots.

Les types de base.

TypeExempleCe que c'est
int (de integer, entier)1850un nombre entier
float (nombre « à virgule flottante »)12.40un nombre à virgule, écrit avec un point
str (de string, chaîne de caractères)"1850"du texte, entre guillemets, même s'il ressemble à un nombre
bool (booléen)1850 > 1000vrai ou faux : True ou False

type(…) donne le type d'une valeur : print(type(1850), type(12.40), type("1850"), type(1850 > 1000)) affiche <class 'int'> <class 'float'> <class 'str'> <class 'bool'>.

Les opérateurs et les priorités. Ce sont ceux de vos formules de tableur, avec deux opérateurs en plus, très utiles pour les jours :

OpérateurSensExempleRésultat
+ - *addition, soustraction, multiplication2 * 36
/division (donne toujours un nombre à virgule)7 / 23.5
//quotient de la division entière45 // 76
%reste de la division entière45 % 73
**puissance2 ** 38

45 jours, ce sont 45 // 7 = 6 semaines pleines et 45 % 7 = 3 jours. Comme dans un tableur, * et / passent avant + et - : 100 + 50 / 2 vaut 125.0, alors que (100 + 50) / 2 vaut 75.0. Les parenthèses comptent.

Les conversions. int("14") donne le nombre 14, float("12.40") donne 12.4, str(14) donne le texte "14". Et round(x, 2) arrondit x à 2 chiffres après la virgule : au centime.

Pourquoi 0.1 + 0.2 n'affiche pas 0.3. Essayez : print(0.1 + 0.2) affiche 0.30000000000000004. L'ordinateur range les nombres à virgule en binaire, et 0,1 ne s'y écrit pas exactement (comme 1/3 ne s'écrit pas exactement en décimal : 0,333…). L'écart est minuscule ; pour un montant, on arrondit au centime à l'affichage : round(0.1 + 0.2, 2) affiche 0.3. Une conséquence à connaître : round(2.675, 2) affiche 2.67, et non 2.68, car 2,675 est rangé comme 2,67499999… Pour un calcul d'aide comme celui de ce livre, c'est sans importance ; pour une comptabilité officielle, c'est votre logiciel comptable qui fait foi.

Suivre les variables · les pénalités d'une facture en retard
Ce qui s'affiche

[3]Recherche

Ce que disent les sources

  • Tutoriel officiel de Python — « Les divisions (/) donnent toujours des float. » L'opérateur // effectue une division entière, % donne le reste et ** calcule une puissance. Le signe égal (=) est utilisé pour affecter une valeur à une variable ; utiliser une variable à laquelle aucune valeur n'a été affectée produit une erreur [1].
  • Documentation officielle de Python — La valeur décimale 0,1 ne peut pas être représentée exactement en binaire ; pour la plupart des usages courants, le tutoriel conseille d'arrondir au nombre de décimales voulu au moment de l'affichage [2]. La documentation de round() prévient que son résultat peut surprendre : round(2.675, 2) donne 2.67, parce que 2,675 n'est pas représentable exactement [8].
  • Python aujourd'hui — En octobre 2026, Python est en tête de l'indice TIOBE, un classement de popularité des langages fondé sur les recherches en ligne [3]. La version 3.15 est sortie le 9 octobre 2026 (3.15.2 le 25 octobre) ; les exemples de ce livre fonctionnent avec Python 3.12 et plus [4].
  • Les pénalités de retard entre professionnels (l'exemple du livre, pas un conseil juridique) — Le taux figure dans les conditions générales ou le contrat ; il ne peut pas être inférieur à trois fois le taux de l'intérêt légal, fixé à 2,75 % pour les professionnels au second semestre 2026, soit 8,25 % [5][6]. Sans taux prévu, c'est le taux de la Banque centrale européenne au 1er janvier ou au 1er juillet, majoré de 10 points : 12,40 % au second semestre 2026 [7]. S'y ajoute une indemnité forfaitaire de 40 € par facture payée en retard. Le calcul : montant × taux annuel × jours de retard ÷ 365 [6][7].
[4]Mythes
« Il faut être bon en maths pour programmer. »
il faut surtout être précis. Vous suivez déjà une procédure exacte avec votre calculatrice : le programme écrit les mêmes étapes.
« À mon âge, c'est trop tard. »
on apprend à programmer à tout âge ; ce qui compte, c'est la régularité (vingt minutes par jour) et un problème qui vous concerne, comme celui de Nadia.
« Un programme peut abîmer l'ordinateur tout seul. »
un script fait exactement ce qu'on écrit. Ceux de ce livre calculent et affichent ; ils ne touchent à aucun fichier. Le jour où vos scripts modifieront des fichiers (dans le Pro), vous travaillerez sur des copies.
[5]Quiz

1. Qu'affiche ce programme ? facture = 100, puis facture = facture + 40, puis print(facture).

la deuxième ligne calcule 100 + 40 et range 140 dans facture (sortie vérifiée).

2. Combien de semaines pleines et de jours restants dans 45 jours ? Que valent 45 // 7 et 45 % 7 ?

// donne le quotient entier, % le reste : 6 semaines et 3 jours (sortie vérifiée : 6 3).

3. Vous voulez la moyenne de deux factures de 100 € et 300 €. Quelle ligne est juste ?

sans parenthèses, la division passe avant l'addition : 100 + 300 / 2 vaut 250.0 ; (100 + 300) / 2 vaut 200.0 (sorties vérifiées).
[6]Kit

🎒 Votre kit — Épisode 1

20 min

Exercice : de la fiche au programme

  1. Sur papier, inventez une facture (montant, jours de retard) et calculez à la main les pénalités au taux de 12,40 %, plus l'indemnité de 40 €.
  2. Écrivez l'algorithme en 4 étapes, en français.
  3. Prédisez ce qu'affichent ces trois programmes, puis vérifiez dans la console de Basthon (ouvrez basthon.fr dans votre navigateur, choisissez la console Python : rien à installer) :
  • A : a = 5, a = a + 3, b = a * 2, print(a, b)
  • B : jours = 45, print(jours // 7, jours % 7)
  • C : montant = "100", print(montant + "0"), print(int(montant) + 10)
  1. Recopiez le programme des pénalités avec votre facture et comparez avec votre calcul à la main.

Corrigé (sorties réelles) : A affiche 8 16 ; B affiche 6 3 ; C affiche 1000, puis 110. Dans C, montant est du texte : + colle deux textes, alors qu'int(montant) + 10 additionne deux nombres.

Code à copier : le programme des pénalités ci-dessus.

Checklist

  • Je sais ce qu'est un algorithme et j'ai écrit celui des pénalités.
  • Je connais les 4 types de base et l'effet de /, // et %.
  • J'ai prédit puis vérifié les 3 programmes.
Vigilancedes factures inventées, jamais celles de vrais clients ou de votre employeur.
[7]Journal

✍️ Journal de bord

Quelle procédure que vous suivez à la main chaque semaine ou chaque mois pourrait devenir un programme ?

[8]Sources
  1. Python Software Foundation, Tutoriel Python — 3. Introduction informelle à Python, consulté le 30/10/2026.
  2. Python Software Foundation, Tutoriel Python — 15. Arithmétique en nombres à virgule flottante : problèmes et limites, consulté le 30/10/2026.
  3. Blog du Modérateur, Les 20 langages informatiques les plus populaires en octobre 2026 (d'après l'indice TIOBE), consulté le 30/10/2026.
  4. Python Software Foundation, Active Python releases, consulté le 30/10/2026.
  5. Service-public.gouv.fr (Entreprendre), Retards de paiement : taux de l'intérêt légal du second semestre 2026 (actualité du 30/06/2026 ; arrêté du 26 juin 2026, JO du 30 juin 2026), consulté le 30/10/2026.
  6. R. Kohen, avocat, Client professionnel qui paie en retard : pénalités, indemnité de 40 euros et intérêts en 2026 (articles L441-10 et D441-5 du Code de commerce) (kohenavocats.fr, 3/10/2026), consulté le 30/10/2026.
  7. Billies, Pénalités de retard 2026 : 12,40 %, 40 € et calcul (taux de la BCE de 2,40 % au 1er juillet 2026), mis à jour le 28/10/2026, consulté le 30/10/2026.
  8. Python Software Foundation, Fonctions natives — round(), consulté le 30/10/2026.
02
JOUR 2 · Pratiquer

Ouvrir votre atelier, lancer un script, lire une erreur

Choisir un environnement, écrire un script qui pose des questions, et corriger une erreur en lisant le message, sans paniquer.

⏱ 20 min de pratique · 5 min de quiz
[1]Scénario
Nadia · Mardi, 12 h 30

Pause déjeuner. Nadia ouvre Basthon dans son navigateur et tape un script qui demande le montant d'une facture, puis le multiplie par le taux. Elle lance. Un message rouge, en anglais :

Message d'erreur
TypeError: can't multiply sequence by non-int of type 'float'

Son premier réflexe : fermer l'onglet, persuadée d'avoir fait une bêtise. Karim, qui mange un sandwich à côté, l'arrête : « Rien n'est cassé. Ce message, c'est Python qui t'explique où il bloque. Lis-le. »

[2]Méthode

Lancer, puis lire une erreur en 3 questions

1. Choisir un environnement.

  • Dans le navigateur, sans compte : Basthon. Rien à installer ; c'est celui que nous conseillons pour tout ce Boost.
  • Sur votre ordinateur : Thonny, un éditeur conçu pour débuter, à télécharger uniquement depuis son site officiel, thonny.org ; ses installateurs pour Windows et macOS contiennent Python. Sur un ordinateur professionnel, installez-le seulement avec l'accord de votre service informatique : beaucoup d'entreprises l'exigent.
  • Avec Python : si Python est déjà installé (depuis python.org), il fournit un petit éditeur, IDLE.

2. Console ou script. La console (repérable au signe >>>) exécute une ligne tout de suite, comme une calculatrice : parfait pour essayer. Le script est un fichier .py qu'on écrit en entier, qu'on enregistre, puis qu'on lance (bouton « Exécuter » ou ▶).

3. Afficher et demander. print("Total :", total) affiche plusieurs valeurs séparées par des espaces. input("Montant : ") affiche la question, attend la réponse… et la renvoie toujours sous forme de texte. Pour un nombre, on convertit : float(input("Montant : ")) (nombre à virgule) ou int(input("Jours : ")) (nombre entier).

Code
print("Calcul des pénalités de retard")
montant = float(input("Montant de la facture en euros : "))
jours_retard = int(input("Nombre de jours de retard : "))
taux_annuel = float(input("Taux annuel des pénalités en % : "))
penalites = montant * taux_annuel / 100 * jours_retard / 365
print("Pénalités :", round(penalites, 2), "euros")
print("Indemnité forfaitaire : 40 euros")
print("Total à réclamer :", round(penalites + 40, 2), "euros")

Essai réel :

Ce que vous voyez
Calcul des pénalités de retard Montant de la facture en euros : 1850 Nombre de jours de retard : 12 Taux annuel des pénalités en % : 12.40 Pénalités : 7.54 euros Indemnité forfaitaire : 40 euros Total à réclamer : 47.54 euros

4. Lire une erreur en 3 questions.

  1. Quelle ligne ? Le message donne le numéro de ligne (line 2).
  2. Quel type d'erreur ? C'est le premier mot de la dernière ligne du message.
  3. Qu'est-ce qui ne va pas à cet endroit ? La fin de la dernière ligne l'explique ; les signes ^ ou ~ montrent où regarder.
TypeTraductionCause fréquente
SyntaxErrorerreur de syntaxe (d'écriture)guillemet, parenthèse ou deux-points oublié
NameErrorerreur de nomvariable mal écrite ou pas encore créée
TypeErrorerreur de typeopération entre types incompatibles (texte × nombre)
ValueErrorerreur de valeurconversion impossible, par exemple float("12,5")
IndentationErrorerreur de retraitespace en trop ou en moins en début de ligne

Le message de Nadia, lu avec la méthode : ligne 2 (penalites = montant * 0.124) ; TypeError ; can't multiply sequence by non-int of type 'float' = « impossible de multiplier une séquence par un nombre non entier ». La séquence, c'est montant : du texte, car input renvoie toujours du texte. Correction : montant = float(input("Montant de la facture : ")).

[3]Pourquoi ça marche

L'ordinateur suit votre texte à la lettre et s'arrête à la première chose qu'il ne peut pas faire. Le message d'erreur décrit ce moment précis : où, quoi, pourquoi. Le lire d'abord évite de modifier au hasard un script qui n'avait qu'une seule faute, ou de coller une « solution » trouvée en ligne qui répond à un autre problème. Depuis Python 3.10, les messages sont plus précis et proposent parfois la correction : Did you mean: 'penalites'? (« Vouliez-vous dire : penalites ? »). Un message d'erreur n'est pas une sanction : votre ordinateur et vos fichiers ne risquent rien.

À retenirdernière ligne d'abord (le type), puis la ligne indiquée, puis la cause.
[4]Entraînement

Bon réflexe ou piège ?

Je ferme tout et je recommence depuis le début.
vous perdez ce qui marchait, et la même faute reviendra.
Je lis la dernière ligne du message en premier.
c'est là que se trouvent le type d'erreur et son explication.
Je vérifie le type de ce que renvoie input.
c'est du texte, toujours ; beaucoup de TypeError viennent de là.
Je colle le message dans un moteur de recherche et je recopie la première réponse.
sans comprendre l'erreur, vous ne savez pas si la réponse correspond à votre problème, et vous ajoutez du code que vous ne comprenez pas (règle d'or).
Je relance sans rien changer, au cas où.
le même code produit la même erreur.
[5]Quiz

1. Vous voulez essayer une seule ligne pour voir ce qu'elle fait. Où ?

la console exécute chaque ligne tout de suite.

2. Que renvoie input("Montant : ") quand on tape 1850 ?

input renvoie toujours du texte ; il faut convertir avec int ou float.

3. Un message d'erreur fait 4 lignes. Laquelle lire en premier ?

la dernière ligne donne le type d'erreur et son explication.
[6]Kit

🎒 Votre kit — Épisode 2

25 min

Exercice : un script qui marche, trois scripts à réparer

  1. Ouvrez Basthon (ou Thonny).
  2. Écrivez et lancez le script des pénalités ci-dessus. Testez-le avec une facture inventée : 1 200 €, 30 jours de retard, 12,40 % (résultat attendu : 12,23 € de pénalités, 52,23 € au total).
  3. Réparez ces trois scripts. Pour chacun, notez la ligne, le type d'erreur et sa traduction.

Script 1 :

Code
total = 1250.5
print("Total : , total)

Script 2 :

Code
penalites = 7.54
print("Pénalités :", penalite)

Script 3 (avec les factures 100 et 250) :

Code
facture1 = input("Facture 1 : ")
facture2 = input("Facture 2 : ")
total = facture1 + facture2
print("Total :", total)

Corrigé (messages et sorties réels) :

  • Script 1 : SyntaxError: unterminated string literal (detected at line 2) — « chaîne de caractères non terminée » : il manque le guillemet après Total : .
  • Script 2 : NameError: name 'penalite' is not defined. Did you mean: 'penalites'? — le nom est mal écrit, et Python propose la correction.
  • Script 3 : aucun message d'erreur, et pourtant le script affiche Total : 100250 ! input a renvoyé deux textes, et + les a collés. C'est le piège le plus dangereux : un résultat faux, sans alerte. Correction : facture1 = float(input("Facture 1 : ")) (et de même pour facture2) ; le script affiche alors Total : 350.0. D'où l'habitude du jour 4 : toujours comparer avec un cas calculé à la main.

Code à copier : le script des pénalités.

Checklist

  • J'ai lancé un script dans un environnement.
  • Je sais pourquoi input doit être converti.
  • J'ai réparé les 3 scripts, dont celui qui ne signalait rien.
VigilancePython et Thonny se téléchargent uniquement depuis leur site officiel (python.org, thonny.org), jamais depuis un site de téléchargement tiers, qui peut ajouter des logiciels indésirables.
[7]Journal

✍️ Journal de bord

Quelle erreur vous a le plus résisté aujourd'hui ? Qu'est-ce qui, dans le message, vous a permis de la comprendre ?

[8]Sources
  1. Python Software Foundation, Tutoriel Python — 8. Erreurs et exceptions, consulté le 30/10/2026.
  2. Python Software Foundation, Les nouveautés de Python 3.10 — Meilleurs messages d'erreurs, consulté le 30/10/2026.
  3. Python Software Foundation, Fonctions natives — input(), consulté le 30/10/2026.
  4. Pyodide, Related projects (Basthon : environnement Python qui s'exécute dans le navigateur, interface en français), consulté le 29/10/2026.
  5. Thonny, site officiel (version 5.0.1 ; installateurs Windows et macOS avec Python 3.14), consulté le 30/10/2026. (thonny.org)
03
JOUR 3 · Comprendre

Faire décider le programme

Comparer, combiner des conditions, et faire choisir le programme avec if / elif / else : combien de jours compte ce mois ?

⏱ 20 min de lecture · 5 min de quiz
[1]Scénario
Nadia · Mercredi, 16 h

Une facture du 15 février, payable à 20 jours. Nadia écrit « 35 février » sur son brouillon, sourit, puis hésite : février compte-t-il 28 ou 29 jours cette année ? Et pour une facture du 20 avril, 30 ou 31 ? Elle compte sur les bosses de ses phalanges, comme à l'école. Karim : « Dans ton tableur, tu écrirais une formule SI. En Python, c'est pareil, en plus lisible. »

[2]Concept

Comparer, puis décider

Comparer. Une comparaison donne True (vrai) ou False (faux) : == (égal), != (différent), <, <=, >, >=. Attention : = range une valeur, == compare deux valeurs. On combine les comparaisons avec and (et : les deux doivent être vraies), or (ou : une seule suffit) et not (non). Avec montant = 1850 :

Code
montant = 1850
print(montant > 1000, montant == 1850, montant != 1850)
print(montant > 0 and montant < 1000, montant < 0 or montant > 1000, not montant > 1000)

Affiche True True False, puis False True False.

Décider : if / elif / else. Le nombre de jours d'un mois :

Code
mois = 2
annee = 2028
bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
if mois == 2 and bissextile:
    jours_du_mois = 29
elif mois == 2:
    jours_du_mois = 28
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
    jours_du_mois = 30
else:
    jours_du_mois = 31
print("Ce mois compte", jours_du_mois, "jours.")

Affiche Ce mois compte 29 jours. Les conditions sont testées dans l'ordre ; la première vraie s'exécute, les autres sont ignorées. if veut dire « si », elif « sinon, si », else « sinon » (facultatif). Chaque ligne de test finit par deux-points :, et ce qui en dépend est décalé de 4 espaces : c'est le retrait (ou indentation). Il indique ce qui dépend de la condition, comme un sous-point dans une liste.

L'année bissextile, une condition composée. Une année est bissextile si elle est divisible par 4, sauf les années de siècle, qui ne le sont que si elles sont divisibles par 400. « Divisible par 4 », c'est « le reste de la division par 4 vaut 0 » : annee % 4 == 0 (l'opérateur % du jour 1). La ligne bissextile = … range donc True ou False.

AnnéeDivisible par 4 ?par 100 ?par 400 ?Bissextile (sortie réelle)
2026nonnonnonFalse
2028ouinonnonTrue
1900ouiouinonFalse
2000ouiouiouiTrue
2100ouiouinonFalse

Le piège de l'ordre. Le même programme, avec les deux tests de février inversés :

Code
mois = 2
annee = 2028
bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
if mois == 2:
    jours_du_mois = 28
elif mois == 2 and bissextile:
    jours_du_mois = 29
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
    jours_du_mois = 30
else:
    jours_du_mois = 31
print("Ce mois compte", jours_du_mois, "jours.")

Affiche Ce mois compte 28 jours. pour février 2028 ! Le premier test (mois == 2) est vrai : Python s'arrête là et ne voit jamais le cas bissextile. On place donc le cas le plus précis en premier.

Comme la fonction SI d'un tableur. =SI(B2>1000;"gros";"petit") s'écrit en Python if montant > 1000: … else: … Les elif évitent d'imbriquer des SI les uns dans les autres.

Machine à conditions · combien de jours compte ce mois ?
Ce qui s'affiche

[3]Recherche

Ce que disent les sources

  • Tutoriel officiel de Python — Le mot clé elif est un raccourci pour else if ; il peut y avoir un nombre quelconque de parties elif, et la partie else est facultative. Une suite if … elif … elif … remplace l'instruction switch ou case d'autres langages [1].
  • Tutoriel officiel de Python — Les opérateurs booléens and et or s'évaluent de gauche à droite, et l'évaluation s'arrête dès que le résultat est connu ; not a la priorité la plus haute des trois, or la plus basse [2].
  • Observatoire royal de Belgique — Dans le calendrier grégorien, en usage depuis 1582, une année est bissextile si elle est divisible par 4, sauf si elle est divisible par 100 ; dans ce cas, elle ne l'est que si elle est aussi divisible par 400. 1900 n'était pas bissextile ; 2000 l'était [3].
[4]Mythes
« L'ordre des elif n'a pas d'importance. »
Python s'arrête au premier test vrai. Mal rangés, les tests donnent 28 jours à février 2028.
« = et ==, c'est pareil. »
= range une valeur dans une variable, == compare deux valeurs. if mois = 2: provoque une SyntaxError.
« Une année sur quatre est bissextile, toujours. »
1900 ne l'était pas, 2100 ne le sera pas ; 2000 l'était. La règle tient en une ligne de Python.
[5]Quiz

1. Dans le programme des jours du mois, quelle branche s'exécute pour mois = 9 ?

les deux tests de février sont faux ; le troisième est vrai car mois == 9 est vrai, et or n'en demande qu'un (sortie vérifiée : 30 jours).

2. Que vaut 2026 % 4 == 0 ?

2026 divisé par 4 donne 506, reste 2 ; le reste n'est pas 0 (sortie vérifiée : False).

3. Avec jour = 31 et mois = 4, que vaut mois == 4 and jour > 30 or mois == 2 ?

and est évalué avant or ; mois == 4 and jour > 30 est vrai, donc le tout est vrai. C'est une façon de repérer une date impossible (le 31 avril) (sortie vérifiée : True).
[6]Kit

🎒 Votre kit — Épisode 3

20 min

Exercice : prédire puis vérifier

  1. Recopiez la version qui pose les questions (code à copier ci-dessous).
  2. Pour chacun de ces 5 cas, écrivez sur papier ce que le programme va afficher, puis lancez-le : janvier 2026 ; avril 2026 ; février 2026 ; février 2028 ; février 2100.
  3. Inversez les deux tests de février et relancez février 2028 : que se passe-t-il ? Remettez-les dans le bon ordre.
Code
mois = int(input("Mois (1 à 12) : "))
annee = int(input("Année : "))
bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
if mois == 2 and bissextile:
    jours_du_mois = 29
elif mois == 2:
    jours_du_mois = 28
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
    jours_du_mois = 30
else:
    jours_du_mois = 31
print("Ce mois compte", jours_du_mois, "jours.")

Essai réel :

Ce que vous voyez
Mois (1 à 12) : 2 Année : 2028 Ce mois compte 29 jours.

Corrigé (sorties réelles) : janvier 2026 : 31 jours ; avril 2026 : 30 ; février 2026 : 28 ; février 2028 : 29 ; février 2100 : 28. Tests inversés : février 2028 donne 28.

Code à copier : le programme ci-dessus.

Checklist

  • Je sais écrire une comparaison avec == (et pas =).
  • Je place le cas le plus précis en premier dans mes if / elif.
  • J'ai prédit puis vérifié les 5 cas.
Vigilanceun retrait oublié ou en trop provoque une IndentationError (par exemple IndentationError: unexpected indent, « retrait inattendu »). Elle se corrige en une seconde : alignez la ligne sur ses voisines.
[7]Journal

✍️ Journal de bord

Dans votre travail, quelle décision prenez-vous toujours de la même façon, selon une règle que vous pourriez écrire avec des « si… sinon » ?

[8]Sources
  1. Python Software Foundation, Tutoriel Python — 4. D'autres outils de contrôle de flux, consulté le 30/10/2026.
  2. Python Software Foundation, Tutoriel Python — 5.7. Plus d'informations sur les conditions, consulté le 30/10/2026.
  3. Observatoire royal de Belgique, Le calendrier grégorien (robinfo.oma.be, 12/04/2022), consulté le 30/10/2026.
04
JOUR 4 · Pratiquer

Construire le calcul d'échéance pas à pas

Une étape, un test, un cas calculé à la main : construire un programme sans se perdre.

⏱ 25 min de pratique · 5 min de quiz
[1]Scénario
Nadia · Jeudi, 14 h

Nadia veut écrire d'un seul coup le calcul « date de la facture + délai de paiement = échéance ». Elle tape vingt lignes, lance avec une facture du 20 décembre payable à 28 jours… et obtient Échéance : 17/13/2026. Un treizième mois. Karim rit : « Fais comme en compta : un cas dont tu connais la réponse, une ligne à la fois, et tu vérifies. »

[2]Méthode

« Une étape, un test, un cas connu »

Rappels : conversions (voir épisode 1), lecture d'erreur (voir épisode 2), nombre de jours d'un mois (voir épisode 3).

  1. Les cas de référence : calculez à la main, avec un calendrier, quatre échéances :
FactureDélaiÉchéance attendueCe que le cas teste
5/3/202620 jours25/3/2026reste dans le mois
15/4/202628 jours13/5/2026passe au mois suivant (avril : 30 jours)
15/2/202820 jours6/3/2028février d'une année bissextile
20/12/202628 jours17/1/2027change d'année
  1. Une étape à la fois : demander jour, mois, année et délai ; puis le nombre de jours du mois (copié du jour 3) ; puis ajouter le délai ; puis le passage au mois suivant ; puis le changement d'année ; puis l'affichage.
  2. Un test après chaque étape, avec les cas de référence.
  3. On compare l'obtenu et l'attendu. Seulement si c'est juste, on passe à l'étape suivante.

Le calcul d'échéance :

Code
jour = int(input("Jour de la facture : "))
mois = int(input("Mois de la facture (1 à 12) : "))
annee = int(input("Année de la facture : "))
delai = int(input("Délai de paiement en jours (1 à 28) : "))
bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
if mois == 2 and bissextile:
    jours_du_mois = 29
elif mois == 2:
    jours_du_mois = 28
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
    jours_du_mois = 30
else:
    jours_du_mois = 31
jour_echeance = jour + delai
mois_echeance = mois
annee_echeance = annee
if jour_echeance > jours_du_mois:
    jour_echeance = jour_echeance - jours_du_mois
    mois_echeance = mois + 1
if mois_echeance == 13:
    mois_echeance = 1
    annee_echeance = annee + 1
print("Échéance :", str(jour_echeance) + "/" + str(mois_echeance) + "/" + str(annee_echeance))

Essai réel avec le quatrième cas de référence :

Ce que vous voyez
Jour de la facture : 20 Mois de la facture (1 à 12) : 12 Année de la facture : 2026 Délai de paiement en jours (1 à 28) : 28 Échéance : 17/1/2027

Les quatre cas donnent l'échéance attendue (sorties réelles : 25/3/2026, 13/5/2026, 6/3/2028, 17/1/2027). Le treizième mois de Nadia venait de l'étape oubliée : sans le dernier if, le programme affiche Échéance : 17/13/2026.

Comment lire ce programme. Si le jour obtenu dépasse la fin du mois (jour_echeance > jours_du_mois), on retire le nombre de jours du mois et on passe au mois suivant : 15 avril + 28 = « 43 avril », moins 30 jours, = 13 mai. Si l'on arrive au mois 13, c'est janvier de l'année suivante. Pour afficher la date, str(…) convertit chaque nombre en texte, et + colle les textes avec des / (jour 1).

Pourquoi un délai de 28 jours au plus. Le programme ne passe qu'un mois. Avec un délai de 28 jours au plus, c'est toujours suffisant, car aucun mois n'a moins de 28 jours. Au-delà, il se tromperait : le 30 janvier + 30 jours donnerait un « 29 février 2026 » qui n'existe pas. Nous avons comparé ce programme au calendrier de Python pour toutes les dates de 1900 à 2100 et tous les délais de 1 à 28 jours : aucun écart sur 2 055 592 cas. Les délais plus longs (45 jours fin de mois, 60 jours) se calculent avec le module datetime, que vous découvrirez dans le Pro.

Remettez les lignes dans l'ordre · cliquez les lignes une par une
Votre programme
Lignes à placer
[3]Pourquoi ça marche

Quand on ajoute une seule étape à la fois, une erreur apparaît juste après l'étape qui l'a introduite : on sait où chercher. Et le cas calculé à la main transforme « ça a l'air de marcher » en « c'est juste » : un résultat plausible peut être faux, comme le total de 100250 € du jour 2. C'est la logique d'un rapprochement bancaire : on vérifie sur quelques lignes connues avant de faire confiance au reste.

À retenirun cas connu, une étape, un test ; on compare l'obtenu et l'attendu.
[4]Entraînement

Bon réflexe ou piège ?

Je teste avec un cas que j'ai calculé à la main.
sans résultat attendu, impossible de savoir si le résultat obtenu est juste.
J'écris tout le programme, puis je teste une seule fois.
plusieurs erreurs se mélangent, et on ne sait plus laquelle vient d'où.
Je ne teste pas décembre, c'est un mois comme les autres.
c'est le seul qui fait changer d'année ; c'est là que Nadia a obtenu un treizième mois.
Je teste aussi un délai hors limites, comme 45 jours.
un programme doit réagir à ce que tapera vraiment l'utilisateur (vous le ferez demain).
Le résultat a l'air plausible, donc il est juste.
7/3 au lieu de 6/3 a l'air plausible ; seul le cas de référence (février 2028) le démasque.
[5]Quiz

1. Que fait le programme quand le jour obtenu dépasse la fin du mois ?

15 avril + 28 = « 43 avril » ; 43 − 30 = 13 mai (sortie vérifiée : 13/5/2026).

2. Quel cas de référence teste le changement d'année ?

seul décembre peut mener au mois 13, donc à janvier de l'année suivante (sortie vérifiée : 17/1/2027).

3. À quoi sert un cas de référence ?

sans résultat attendu, un résultat faux mais plausible passe inaperçu.
[6]Kit

🎒 Votre kit — Épisode 4

25 min

Exercice : le calcul d'échéance en 5 étapes

  1. Recopiez le tableau des 4 cas de référence ; vérifiez-en un vous-même sur un calendrier.
  2. Étape 1 : les 4 questions, puis print(jour, mois, annee, delai) pour vérifier les saisies. Testez.
  3. Étape 2 : le nombre de jours du mois (copié du jour 3), puis print(jours_du_mois). Testez avec avril et février 2028.
  4. Étape 3 : jour_echeance = jour + delai et le passage au mois suivant. Testez avec les trois premiers cas.
  5. Étape 4 : le changement d'année. Testez avec le quatrième cas.
  6. Étape 5 : l'affichage final. Retirez les print de vérification. Testez les 4 cas, puis tapez un délai de 45 jours : que se passe-t-il ? (Vous le corrigerez demain.)

Code à copier : le calcul d'échéance ci-dessus.

Checklist

  • J'ai 4 cas de référence calculés à la main.
  • J'ai testé après chaque étape.
  • Mon programme donne les 4 échéances attendues.
Vigilancevotre calculateur vous aide à vérifier. En cas de doute sur une échéance, c'est le contrat, la facture ou votre service comptable qui fait foi.
[7]Journal

✍️ Journal de bord

À quelle étape votre programme a-t-il donné un résultat faux, et comment l'avez-vous vu ?

[8]Sources
  1. Python Software Foundation, Tutoriel Python — 4. D'autres outils de contrôle de flux, consulté le 30/10/2026.
  2. Sorties du calcul d'échéance et de sa version sans changement d'année : exécutions réelles sous Python 3.12.13, 3.15.0 et 3.15.2 (journaux de test de ce livre), le 30/10/2026.
  3. Comparaison de la règle du livre avec le module datetime de Python, pour toutes les dates du 1/1/1900 au 31/12/2100 et les délais de 1 à 28 jours : 2 055 592 cas, aucun écart (script de vérification du livre), le 30/10/2026.
05
JOUR 5 · Pratiquer · Final

Votre calculateur d'échéances et votre certificat

Terminer un script utile, le tester comme le ferait un collègue, puis rassembler vos outils.

⏱ 25 min · boîte à outils · carrousel · certificat
[1]Scénario
Nadia · Vendredi, 17 h

Nadia montre son calculateur à Karim. Il tape une facture du 15 décembre à 28 jours : Échéance : 12/1/2027. Puis 12 jours de retard sur 1 850 € à 12,40 % : Pénalités : 7.54 euros. Il compare avec son logiciel de comptabilité : au centime près. Il essaie un 30 février (refusé, avec une explication), un délai de 45 jours (refusé aussi), puis tape « 1850,50 » avec une virgule… et le script s'arrête sur un message rouge. Nadia ne panique pas : elle lit la dernière ligne, ValueError: could not convert string to float: '1850,50', « impossible de convertir le texte '1850,50' en nombre à virgule ». Python attend un point. Elle l'écrit dans la question : « (avec un point) ». Lundi, elle avait peur de casser l'ordinateur ; aujourd'hui, elle sait pourquoi son programme s'arrête.

[2]Outil

Mon carnet de code

Consigne : terminez votre calculateur en deux parties (1. l'échéance d'une facture ; 2. les pénalités d'un retard), avec des saisies hors limites signalées par une condition, puis testez-le sur 4 cas : un cas de référence, un changement de mois, un changement d'année, une saisie hors limites. Rangez ensuite vos outils de la semaine dans votre carnet.

Le calculateur complet (code à copier) :

Code
print("=== Calculateur d'échéances ===")
print("--- Date d'échéance ---")
jour = int(input("Jour de la facture : "))
mois = int(input("Mois de la facture (1 à 12) : "))
annee = int(input("Année de la facture : "))
delai = int(input("Délai de paiement en jours (1 à 28) : "))
bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
if mois == 2 and bissextile:
    jours_du_mois = 29
elif mois == 2:
    jours_du_mois = 28
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
    jours_du_mois = 30
else:
    jours_du_mois = 31
if mois < 1 or mois > 12:
    print("Le mois doit être compris entre 1 et 12.")
elif jour < 1 or jour > jours_du_mois:
    print("Ce mois compte", jours_du_mois, "jours : le jour", jour, "n'existe pas.")
elif delai < 1 or delai > 28:
    print("Le délai doit être compris entre 1 et 28 jours.")
else:
    jour_echeance = jour + delai
    mois_echeance = mois
    annee_echeance = annee
    if jour_echeance > jours_du_mois:
        jour_echeance = jour_echeance - jours_du_mois
        mois_echeance = mois + 1
    if mois_echeance == 13:
        mois_echeance = 1
        annee_echeance = annee + 1
    print("Échéance :", str(jour_echeance) + "/" + str(mois_echeance) + "/" + str(annee_echeance))
print("--- Pénalités de retard ---")
montant = float(input("Montant de la facture en euros (avec un point) : "))
jours_retard = int(input("Jours de retard (0 si payée à temps) : "))
taux_annuel = float(input("Taux annuel des pénalités en % (avec un point) : "))
if montant <= 0 or jours_retard < 0 or taux_annuel < 0:
    print("Le montant doit être positif, les jours et le taux aussi.")
elif jours_retard == 0:
    print("Facture payée à temps : aucune pénalité.")
else:
    penalites = round(montant * taux_annuel / 100 * jours_retard / 365, 2)
    print("Pénalités :", penalites, "euros")
    print("Indemnité forfaitaire de recouvrement : 40 euros")
    print("Total à réclamer :", round(penalites + 40, 2), "euros")

Les contrôles de saisie forment une seule suite if / elif / else : le calcul ne se fait (dans le else, décalé de 4 espaces) que si toutes les saisies sont possibles. À l'intérieur, les deux if du jour 4 sont décalés une fois de plus.

Essai réel :

Ce que vous voyez
=== Calculateur d'échéances === --- Date d'échéance --- Jour de la facture : 15 Mois de la facture (1 à 12) : 12 Année de la facture : 2026 Délai de paiement en jours (1 à 28) : 28 Échéance : 12/1/2027 --- Pénalités de retard --- Montant de la facture en euros (avec un point) : 1850 Jours de retard (0 si payée à temps) : 12 Taux annuel des pénalités en % (avec un point) : 12.40 Pénalités : 7.54 euros Indemnité forfaitaire de recouvrement : 40 euros Total à réclamer : 47.54 euros

Saisies hors limites (sorties réelles) : un 30 février 2026 → Ce mois compte 28 jours : le jour 30 n'existe pas. ; un délai de 45 jours → Le délai doit être compris entre 1 et 28 jours. ; un mois 13 → Le mois doit être compris entre 1 et 12. ; un montant de -50 → Le montant doit être positif, les jours et le taux aussi. ; 0 jour de retard → Facture payée à temps : aucune pénalité. Le 29 février 2028 + 28 jours donne Échéance : 28/3/2028.

Ce que le calculateur ne fait pas (encore). Il traite une facture à la fois, et un montant tapé avec une virgule l'arrête (ValueError). Traiter toute une liste de factures d'un coup, puis lire un fichier de factures, c'est le Pro ; faire réagir le programme à une saisie illisible au lieu de s'arrêter, c'est le Master. Et le taux de pénalités se lit sur la facture ou dans le contrat : votre calculateur ne le devine pas.

Boîte à outils interactive · Enregistrée dans ce navigateur
[3]Carrousel final

🎨 Carrousel final — Boost

[4]Journal

✍️ Journal de bord — mot de la fin

Qu'est-ce que vous savez faire aujourd'hui qui vous semblait hors de portée lundi ?

✦ PREMIER SCRIPT · LES 5 JOURS ✦

Bravo ! Vous avez terminé les 5 jours du Boost. Vous savez écrire, lancer et réparer un script Python, et vous avez construit un calculateur qui vous fait gagner du temps.

[5]Certificat

🎓 Votre certificat

Le certificat s'affiche lorsque les 5 épisodes sont marqués comme terminés.

COLLECTION « CHALLENGES » · APPRENDRE À CODER EN PYTHON

Certificat de réussite

Ce certificat atteste que

—

a terminé les épisodes du Boost — Mon premier script et atteint le niveau Premier script.

Ce que ce parcours couvre : algorithme et programme, environnements (Basthon, Thonny), console et script, variables et types, opérateurs (dont quotient et reste) et conversions, conditions if / elif / else, lecture des messages d'erreur, construction pas à pas d'un script testé sur des cas connus.

[6]Sources
  1. Python Software Foundation, Tutoriel Python — 8. Erreurs et exceptions, consulté le 30/10/2026.
  2. Sorties du calculateur (cas de référence et 5 saisies hors limites, saisie avec virgule) : exécutions réelles sous Python 3.12.13, 3.15.0 et 3.15.2 (journaux de test de ce livre), le 30/10/2026.