School 47

def, if, for, while : écrire un programme qui calcule à ta place

Seconde · Mathématiques · environ 20 min

Une recette de cuisine est une suite d'instructions précises : « casse trois œufs, si la pâte est trop épaisse ajoute du lait, répète dix fois : verse une louche, retourne la crêpe ». En mathématiques, cela s'appelle un algorithme. Python permet de le confier à l'ordinateur, qui l'exécute sans se tromper… si tes instructions sont justes.

1. Variables, affectation et fonctions

Une variable est une boîte avec un nom qui contient une valeur. L'instruction x = 3 affecte la valeur 3 à x : ce n'est pas une égalité mathématique, mais un ordre, et x = x + 1 augmente x de 1. Opérations : + − * / ; quotient entier //, reste %, puissance ** (17 // 5 vaut 3, 17 % 5 vaut 2).

Une fonction regroupe des instructions sous un nom, avec des paramètres en entrée et un résultat renvoyé par return :

def image(x):
 return 3 * x ** 2 - 5 * x + 2

def ouvre la définition, les deux-points annoncent le corps, et l'indentation (quatre espaces) délimite ce qui appartient à la fonction. L'appel image(2) renvoie 3 × 4 − 10 + 2 = 4 et print(image(2)) l'affiche : f(x) = 3x² − 5x + 2 est devenue une fonction Python.

2. Choisir : if, elif, else

Algorithme : condition et boucle Un organigramme se lit du haut vers le bas. On part de l'ovale début, on lit une donnée n, puis on arrive à un losange qui pose une condition : n est-il supérieur à zéro ? Si la réponse est oui, on exécute une action, puis une flèche remonte vers le test : on répète, c'est une boucle. Si la réponse est non, une flèche mène à l'ovale fin. Un algorithme enchaîne ainsi des instructions, des conditions et des boucles. début lire n n > 0 ? oui non action ; n ← n−1 boucle fin instructions · condition (si…) · boucle (répéter)

Une instruction conditionnelle exécute un bloc seulement si une condition est vraie.

def valeur_absolue(x):
 if x >= 0:
 return x
 else:
 return -x

Comparaisons : == (égal à, deux signes), !=, <, <=, >, >= ; connecteurs and, or, not. Le test n % 2 == 0 est vrai exactement quand n est pair. Pour plus de deux cas, on enchaîne if, elif (« sinon si ») et else.

3. Répéter un nombre connu de fois : la boucle for

range(1, n + 1) produit les entiers de 1 à n : la borne de gauche est comprise, celle de droite est exclue : range(1, n) s'arrête à n − 1, erreur classique des débutants.

def somme_carres(n):
 s = 0
 for k in range(1, n + 1):
 s = s + k ** 2
 return s

La variable s est un accumulateur : elle part de 0 et grossit à chaque tour. Dresse un tableau d'exécution. Avec n = 3 : k = 1, s = 0 + 1 = 1 ; k = 2, s = 1 + 4 = 5 ; k = 3, s = 5 + 9 = 14. La fonction renvoie 14 = 1² + 2² + 3².

4. Répéter tant qu'une condition est vraie : la boucle while

while répète « tant que la condition est vraie », sans nombre de tours fixé d'avance. Cherchons la plus petite puissance de 2 qui dépasse un seuil.

def premiere_puissance(seuil):
 n = 0
 p = 1
 while p <= seuil:
 p = 2 * p
 n = n + 1
 return n

Tableau d'exécution de premiere_puissance(100), en notant (p ; n) : (1 ; 0) au départ, puis (2 ; 1), (4 ; 2), (8 ; 3), (16 ; 4), (32 ; 5), (64 ; 6), (128 ; 7). Comme 128 > 100, la boucle s'arrête et la fonction renvoie 7 : 2⁷ = 128 est la première puissance de 2 au-dessus de 100.

Danger : oublie la ligne p = 2 * p et la boucle tourne sans fin. Règle : for quand le nombre de répétitions est connu, while quand on attend un seuil.

5. Tester son programme

Un programme qui s'exécute sans message d'erreur n'est pas forcément juste. Teste-le sur des cas que tu sais calculer à la main : print(somme_carres(3)) doit afficher 14 ; les cas limites somme_carres(0) et somme_carres(1) doivent renvoyer 0 et 1. Erreurs les plus fréquentes : une borne de range décalée de 1, un return oublié, un = à la place de ==, une indentation manquante.

À retenir

  • x = 3 est une affectation ; == teste une égalité ; // et % donnent le quotient et le reste de la division entière.
  • def nom(paramètres): définit une fonction ; return renvoie le résultat ; le corps est indenté de quatre espaces.
  • if / elif / else exécutent un bloc selon une condition.
  • for k in range(a, b): parcourt a à b − 1 ; while répète tant que sa condition est vraie, et doit pouvoir s'arrêter.
  • Un programme se teste sur des valeurs calculées à la main et sur les cas limites.

★ Pour aller plus loin

En 1843, Ada Lovelace décrit, dans ses notes sur la machine analytique de Charles Babbage, comment lui faire calculer les nombres de Bernoulli : souvent considéré comme le premier programme informatique, un siècle avant le premier ordinateur. Python, lui, est né en 1991 sous la plume de Guido van Rossum, baptisé en hommage aux Monty Python, pas au serpent.

Prends un entier n ; s'il est pair, divise-le par 2, sinon remplace-le par 3n + 1 ; recommence. Cette boucle while atteint-elle toujours 1 ? Pour 6, oui : 6, 3, 10, 5, 16, 8, 4, 2, 1. La conjecture de Syracuse (Lothar Collatz, 1937) affirme que oui pour tout entier de départ ; vérifiée par ordinateur très loin, elle n'a jamais été démontrée. Et en 1936, Alan Turing a prouvé qu'aucun programme ne peut décider si un programme quelconque finira par s'arrêter : le problème de l'arrêt.

Sources pour creuser

  • Livres : Gérard Swinnen, « Apprendre à programmer avec Python 3 » (Eyrolles, version libre en ligne) ; Al Sweigart, « Automate the Boring Stuff with Python » (en anglais, gratuit en ligne).
  • Vidéos : la chaîne YouTube « Docstring » (Python en français) ; cherche « Monka Python seconde boucle for » et « Monka Python seconde boucle while ».
  • Institutionnel : docs.python.org/fr/3/ (tutoriel officiel en français) ; lumni.fr (lycée, mathématiques) ; eduscol.education.fr (programme de Seconde).