Aller au contenu

Algorithmique et programmation en Python

Première · Maths · Algorithmique et programmation

Algorithmique et programmation

Variables, tests et boucles

En spécialité maths, Python n'est pas une matière à part : c'est un outil qui traverse tout le programme. Tu l'utilises pour calculer les termes d'une suite, chercher un seuil, simuler un échantillon, estimer une probabilité. Bonne nouvelle : le nombre de notions à connaître est très réduit — variables, tests, boucles, fonctions, listes. Le reste, c'est de la pratique.

Les types de base et les opérateurs

Python distingue les entiers (int), les nombres décimaux (float), les booléens (bool : True ou False) et les chaînes de caractères (str). Le type se devine à l'écriture : 3 est un int, 3.0 est un float, "3" est une chaîne. Attention, le séparateur décimal en Python est le point, jamais la virgule.

OpérateurRôleExempleRésultat
+ − *addition, soustraction, multiplication3 * 412 (int)
/division décimale (résultat toujours float)7 / 23.5 (float)
//quotient de la division euclidienne17 // 53 (int)
%reste de la division euclidienne (modulo)17 % 52 (int)
**puissance2 ** 101024 (int)
== !=test d'égalité, test de différence5 == 5True (bool)
< > <= >=comparaisons3 >= 7False (bool)

Boucle bornée (for) et boucle non bornée (while)

Boucle for (bornée)Boucle while (non bornée)
Quand l'utiliserOn sait à l'avance combien de tours faireOn répète tant qu'une condition est vraie, sans savoir combien de tours
Écriturefor i in range(n):while condition:
Exemple typiquecalculer une somme de n termeschercher le premier rang n où une suite dépasse un seuil
Risqueerreur sur les bornes du rangeboucle infinie si la condition ne devient jamais fausse

Algorithmique et programmation

Fonctions, listes et algorithmes du programme

Une fois les briques de base maîtrisées, il ne reste qu'à les assembler. Les épreuves de spécialité recyclent presque toujours les mêmes quatre algorithmes : parcourir une liste, calculer une somme ou une moyenne, chercher un seuil, simuler du hasard. Apprends leur squelette et tu pourras les adapter à n'importe quel énoncé.

Les listes

Une liste range plusieurs valeurs dans un même objet : L = [3, 1, 4, 1, 5]. On accède à un élément par son indice, et les indices commencent à 0 : L[0] vaut 3, L[1] vaut 1, L[4] vaut 5. La longueur s'obtient avec len(L), ici 5 — donc le dernier indice valide est len(L) − 1 = 4. L'indice −1 est un raccourci commode pour le dernier élément.

  • L.append(x) ajoute x à la fin de la liste L.
  • len(L) donne le nombre d'éléments de L.
  • for x in L: parcourt directement les valeurs de la liste.
  • for i in range(len(L)): parcourt les indices ; on accède alors aux valeurs par L[i].
  • sum(L) et max(L) existent, mais un sujet peut te demander de les reprogrammer à la main.

Exercices corrigés

  1. Combien de tours fait la boucle « for i in range(5): », et quelles valeurs prend i ?

    • A.4 tours, i allant de 1 à 4
    • B.5 tours, i allant de 1 à 5
    • C.6 tours, i allant de 0 à 5
    • D.5 tours, i allant de 0 à 4Bonne réponse

    Réponse : D — 5 tours, i allant de 0 à 4

    range(5) produit les entiers 0, 1, 2, 3, 4 : il y a bien 5 valeurs, mais elles commencent à 0 et s'arrêtent à 4, car la borne indiquée est exclue. C'est la double particularité à mémoriser : le bon nombre de tours, mais décalé d'un cran vers le bas. Si tu veux les valeurs 1 à 5, il faut écrire range(1, 6).

  2. En Python, quelle est la différence entre = et == ?

    • A.= affecte une valeur à une variable, == teste si deux valeurs sont égalesBonne réponse
    • B.= teste une égalité, == affecte une valeur à une variable
    • C.Les deux font la même chose, == est simplement plus lisible
    • D.= sert aux nombres et == sert aux chaînes de caractères

    Réponse : A — = affecte une valeur à une variable, == teste si deux valeurs sont égales

    Le simple = est l'affectation : n = 5 range la valeur 5 dans la variable n. Le double == est un test : n == 5 ne modifie rien et renvoie True ou False. C'est pour cela qu'on écrit « if x % 2 == 0: » avec deux signes égal — on veut comparer, pas affecter. Écrire un seul = dans un if provoque d'ailleurs une erreur de syntaxe.

  3. En Python, que renvoie l'expression 7 / 2 ?

    • A.3, de type int
    • B.3.5, de type floatBonne réponse
    • C.3.5, de type str
    • D.4, car Python arrondit au plus proche

    Réponse : B — 3.5, de type float

    L'opérateur / est la division décimale : elle renvoie toujours un float, même quand le résultat tombe juste (8 / 2 donne 4.0 et non 4). Pour obtenir le quotient entier 3, il faudrait écrire 7 // 2. Et 3.5 n'est pas une chaîne de caractères : il faudrait des guillemets, "3.5", pour cela.

  4. Que vaut 17 // 5 en Python ?

    • A.3.4
    • B.4
    • C.3Bonne réponse
    • D.2

    Réponse : C — 3

    L'opérateur // donne le quotient de la division euclidienne : dans 17, il y a 3 paquets de 5 (car 3 × 5 = 15, et il reste 2). Le résultat est donc l'entier 3. Répondre 3.4, c'est confondre // avec / ; répondre 2, c'est confondre // avec % qui, lui, donne le reste : 17 % 5 vaut effectivement 2. Retiens la relation 17 = 5 × 3 + 2.

  5. On pose L = [3, 1, 4, 1, 5]. Que renvoie len(L) ?

    • A.4
    • B.5Bonne réponse
    • C.14
    • D.3

    Réponse : B — 5

    len(L) renvoie le nombre d'éléments de la liste : ici 3, 1, 4, 1 et 5, soit 5 éléments. Le fait que la valeur 1 apparaisse deux fois ne change rien, chaque case compte. Répondre 4, c'est confondre la longueur avec le dernier indice valide (qui vaut bien 4, puisque les indices vont de 0 à 4). Répondre 14, c'est calculer la somme des éléments, ce que ferait sum(L).

  6. On pose L = [10, 20, 30, 40]. Que vaut L[1] ?

    • A.10
    • B.1
    • C.20Bonne réponse
    • D.30

    Réponse : C — 20

    Les indices d'une liste commencent à 0 : L[0] vaut 10, L[1] vaut 20, L[2] vaut 30 et L[3] vaut 40. Répondre 10 est l'erreur la plus fréquente : elle vient du réflexe naturel de numéroter à partir de 1, alors que Python numérote à partir de 0. Conséquence à retenir : dans une liste de n éléments, le dernier indice valide est n − 1.

  7. Que vaut s à la fin de ce programme ? s = 0 puis « for i in range(1, 5): s = s + i »

    • A.15
    • B.5
    • C.4
    • D.10Bonne réponse

    Réponse : D — 10

    range(1, 5) parcourt 1, 2, 3 et 4 : la borne 5 est exclue. La variable s vaut donc successivement 0, puis 1, puis 3, puis 6, puis 10. Le résultat final est 10. Répondre 15, c'est croire que la boucle va jusqu'à 5 inclus (1 + 2 + 3 + 4 + 5 = 15) : c'est exactement le piège de la borne droite exclue. Répondre 4, c'est donner la dernière valeur de i au lieu de la somme accumulée.

  8. On exécute : u = 1, n = 0, puis « while u < 50: u = 3 * u puis n = n + 1 ». Que vaut n à la sortie de la boucle ?

    • A.4Bonne réponse
    • B.3
    • C.5
    • D.81

    Réponse : A — 4

    Déroulons le tableau. Départ : u = 1 et n = 0. Tour 1 : 1 < 50, donc u = 3 et n = 1. Tour 2 : 3 < 50, donc u = 9 et n = 2. Tour 3 : 9 < 50, donc u = 27 et n = 3. Tour 4 : 27 < 50, donc u = 81 et n = 4. On teste alors 81 < 50 : c'est faux, la boucle s'arrête. Donc n = 4. Répondre 81, c'est donner la valeur de u au lieu de celle de n : relis toujours ce que la question demande.

  9. Dans une fonction Python, quelle est la différence entre return et print ?

    • A.print renvoie la valeur pour qu'on puisse la réutiliser, return se contente de l'afficher
    • B.return renvoie la valeur au programme appelant, print se contente de l'afficher à l'écranBonne réponse
    • C.Les deux instructions font exactement la même chose
    • D.return affiche la valeur et arrête définitivement tout le programme

    Réponse : B — return renvoie la valeur au programme appelant, print se contente de l'afficher à l'écran

    return transmet une valeur : après a = ma_fonction(3), la variable a contient le résultat et on peut le réutiliser dans un calcul. print se contente d'afficher du texte dans la console, et la valeur est ensuite perdue. Une fonction qui utilise print au lieu de return renvoie en réalité None. Attention aussi à l'option 4 : return met fin à la fonction, pas au programme entier, qui continue normalement après l'appel.

  10. On pose L = [7, 2, 9, 4]. Que renvoie L[-1] ?

    • A.7
    • B.Une erreur : les indices négatifs sont interdits
    • C.4Bonne réponse
    • D.9

    Réponse : C — 4

    En Python, l'indice −1 désigne le dernier élément de la liste, ici 4. De même, −2 désignerait l'avant-dernier, soit 9. C'est un raccourci très pratique : L[-1] évite d'écrire L[len(L) - 1]. Répondre 7, c'est croire que l'indice négatif fait repartir du début ; les indices négatifs sont au contraire parfaitement autorisés et se comptent depuis la fin.

  11. Combien de valeurs, et lesquelles, l'instruction range(2, 10, 3) produit-elle ?

    • A.8 valeurs, tous les entiers de 2 à 9
    • B.2 valeurs : 2 et 5
    • C.4 valeurs : 2, 5, 8 et 11
    • D.3 valeurs : 2, 5 et 8Bonne réponse

    Réponse : D — 3 valeurs : 2, 5 et 8

    Le troisième argument est le pas : on part de 2 et on avance de 3 en 3, tant qu'on reste strictement inférieur à 10. On obtient donc 2, puis 5, puis 8. La valeur suivante serait 11, mais 11 dépasse 10, donc elle n'est pas produite — c'est pourquoi l'option 3 est fausse. La borne de droite reste exclue, exactement comme dans range(n) ou range(a, b).

  12. Après « from random import randint », que renvoie l'appel randint(1, 6) ?

    • A.Un entier au hasard entre 1 et 6, les deux bornes comprisesBonne réponse
    • B.Un entier au hasard entre 1 et 5, la borne 6 étant exclue
    • C.Un nombre décimal au hasard entre 1 et 6
    • D.Un entier au hasard entre 0 et 6

    Réponse : A — Un entier au hasard entre 1 et 6, les deux bornes comprises

    randint(a, b) tire un entier au hasard dans l'intervalle [a ; b] avec les deux bornes incluses : randint(1, 6) simule donc exactement un dé à six faces, chaque face ayant la probabilité 1/6. C'est une différence importante avec range, dont la borne droite est exclue. Pour obtenir un décimal au hasard, il faudrait la fonction random(), qui renvoie une valeur dans [0 ; 1[.

S'entraîner sur ce chapitre

Ce chapitre compte 35 exercices corrigés dans l'application, avec le suivi de ta progression.

Commencer les exercices