eleveai.frLa liberté d'apprendre
Maths2ndeFiche d'exercices

Algorithmique et Python : 20 exercices corrigésmaths 2nde — du geste seul au problème de contrôle

Vingt exercices, du geste seul au problème : suivre un programme ligne à ligne, reconnaître un type, lire une condition, dérouler une boucle, écrire une fonction, simuler le hasard. Un placement à 4 %, le CO₂ de l'atmosphère, un dé lancé dix mille fois, la conjecture de Syracuse, la racine de 2 cherchée pas à pas. Chaque corrigé montre la trace du programme, tour après tour. Un rappel de cours avant chaque niveau. Cherche d'abord au brouillon, puis ouvre la correction.

Un seul geste : exercices 1 à 8niveau 1

Un programme par exercice : le suivre ligne à ligne en notant les valeurs.

Rappel de cours

  • « x = x + 1 » n'est pas une égalité : c'est un ORDRE. On calcule à droite avec l'ancienne valeur, puis on range le résultat dans x.
  • Les types : int (entier), float (nombre à virgule), str (texte, entre guillemets), bool (True ou False). « / » donne TOUJOURS un float ; « // » le quotient entier ; « % » le reste.
  • « for i in range(1, 6) » : i prend les valeurs 1, 2, 3, 4, 5 — le 6 est EXCLU. « while condition » : on répète TANT QUE la condition est vraie.
  1. 1

    Suivre ce programme ligne à ligne. Que valent a et b à la fin ?
    a = 5
    b = 3
    a = a + b
    b = a - b
    a = a - b
    Voir la correction
    On note les valeurs après chaque ligne. À droite du signe « = », on utilise les valeurs du moment. Ligne 3 : a reçoit . Ligne 4 : b reçoit . Ligne 5 : a reçoit . À la fin, a vaut et b vaut  : le programme a ÉCHANGÉ les deux valeurs. ⛔ Le piège : lire « a = a + b » comme une équation, et conclure que b vaut . En Python, « = » range une valeur, il n'affirme rien.
    ligneab
    15–
    253
    383
    485
    535
  2. 2

    Que vaut x à la fin de ce programme ?
    x = 2
    x = 3 * x + 1
    x = x ** 2
    Voir la correction
    Ligne 2 : on calcule avec l'ANCIENNE valeur de x, puis x vaut . Ligne 3 : « ** » est la puissance : x reçoit . À la fin, x vaut . ⛔ Le piège : écrire le carré avec l'accent circonflexe, comme sur la calculatrice. En Python, le carré s'écrit « x ** 2 » ; l'accent circonflexe y fait une tout autre opération.
    lignex
    12
    27
    349
  3. 3

    Donner la valeur et le type de chaque expression : a) « 7 » b) « 7.0 » c) « 7 / 2 » d) « 7 // 2 » e) « 7 % 2 » f) « '7' » g) « 3 < 5 »
    Voir la correction
    a) , un entier : int. b) , un nombre à virgule : float (le point est la virgule de Python). c)  : float. La division « / » donne toujours un float. d)  : int. « // » donne le quotient entier (). e)  : int. « % » donne le reste de la division. f) le texte « 7 », entre guillemets : str. Ce n'est plus un nombre. g) True : bool. Une comparaison vaut vrai ou faux. ⛔ Le piège au f) : croire que '7' et 7 sont la même chose. Les guillemets en font un TEXTE.
    expressionvaleurtype
    77int
    7.07.0float
    7 / 23.5float
    7 // 23int
    7 % 21int
    '7''7'str
    3 < 5Truebool
  4. 4

    Que renvoie Python pour chacune de ces expressions ? a) « 6 / 3 » b) « '3' + '4' » c) « 3 + 4 » d) « int('3') + 4 » e) « '3' * 2 »
    Voir la correction
    a) « 2.0 », et non « 2 » : « / » donne toujours un float, même quand la division tombe juste. b) « '34' » : entre deux textes, « + » les COLLE bout à bout. c) « 7 » : entre deux nombres, « + » additionne. d) « 7 » : int('3') transforme le texte '3' en nombre , puis on ajoute . e) « '33' » : un texte multiplié par est répété deux fois. ⭐ Le même signe « + » ne fait pas la même chose selon le TYPE de ce qu'il relie.
    expressionrésultat
    6 / 32.0
    '3' + '4''34'
    3 + 47
    int('3') + 47
    '3' * 2'33'
  5. 5

    a) Qu'affiche ce programme ? b) Et si l'on remplace la première ligne par « n = 40 » ?
    n = 17
    if n % 2 == 0:
    print('pair')
    else:
    print('impair')
    Voir la correction
    a) « n % 2 » est le reste de la division de n par  : , le reste vaut . La condition « 1 == 0 » est fausse : on passe dans le « else », le programme affiche « impair ». b) , le reste vaut  : la condition est vraie, il affiche « pair ». ⛔ Le piège : écrire « if n % 2 = 0 ». Un seul « = » RANGE une valeur ; pour COMPARER, il en faut deux : « == ».
    nn % 2n % 2 == 0affiche
    171Falseimpair
    400Truepair
  6. 6

    Un cinéma applique ce tarif. Que renvoient « prix(8) », « prix(12) », « prix(17) » et « prix(18) » ?
    def prix(age):
    if age < 12:
    return 5
    elif age < 18:
    return 7
    else:
    return 10
    Voir la correction
    On teste les conditions DANS L'ORDRE, et on s'arrête à la première vraie. prix(8) : est vrai, on renvoie . prix(12) : est FAUX ; est vrai, on renvoie . prix(17) : faux, vrai : . prix(18) : les deux sont faux, on arrive au « else » : . ⛔ Le piège : prix(12) = . Avec « < », n'est pas strictement inférieur à  : à ans, on paie déjà €.
    âgeage < 12age < 18prix
    8True–5
    12FalseTrue7
    17FalseTrue7
    18FalseFalse10
  7. 7

    Qu'affiche ce programme ? Faire la trace de i et de s.
    s = 0
    for i in range(1, 6):
    s = s + i
    print(s)
    Voir la correction
    « range(1, 6) » donne i = , , , ,  : le est exclu. À chaque tour, on ajoute i à s : , puis , , , . Le programme affiche  : c'est . ⛔ Le piège : faire aussi un tour avec i = , et trouver . La borne de droite d'un range n'est jamais atteinte.
    touris
    111
    223
    336
    4410
    5515
  8. 8

    Qu'affiche ce programme ? Combien de fois la boucle tourne-t-elle ?
    n = 1
    while n < 100:
    n = n * 2
    print(n)
    Voir la correction
    On répète TANT QUE n est inférieur à , et on teste AVANT chaque tour. n vaut successivement , , , , , ,  : à chaque fois, , on continue. Avec n = , on fait encore un tour : n devient . Maintenant est faux : on sort. La boucle a tourné fois, et le programme affiche . ⛔ Le piège : répondre , « le dernier nombre sous  ». La boucle s'arrête quand la condition devient FAUSSE, donc après l'avoir dépassé.
    tourn avantn < 100 ?n après
    11oui2
    22oui4
    34oui8
    48oui16
    516oui32
    632oui64
    764oui128

Type devoir : exercices 9 à 16niveau 2

Plusieurs étapes, comme au contrôle : lire une fonction, compléter un programme, en écrire un.

Rappel de cours

  • Une fonction : « def nom(x): » puis, en retrait, les instructions, et « return » pour rendre le résultat.
  • Une liste s'écrit entre crochets : « [12, 8, 15] ». « len(L) » donne sa longueur ; « for n in L » parcourt ses éléments.
  • L'INDENTATION (le retrait) dit ce qui est DANS la boucle ou la condition. Elle fait partie du programme.
  1. 9

    a) Que renvoient « f(2) », « f(-1) » et « f(0) » ? b) Quelle fonction mathématique ce programme calcule-t-il ?
    def f(x):
    return 3 * x ** 2 - 5
    Voir la correction
    a) On remplace x par la valeur donnée. « ** » passe avant « * », qui passe avant « - » : les priorités des maths. . . . b) C'est la fonction . ⛔ Le piège au a) : taper « -1 ** 2 » dans la console. Python calcule d'abord la puissance : il obtient . Quand on appelle f(-1), la valeur remplace x tout entier, comme si on écrivait .
    appelcalculrenvoie
    f(2)3 * 4 - 57
    f(-1)3 * 1 - 5-2
    f(0)3 * 0 - 5-5
  2. 10

    Qu'affiche ce programme ? Que calcule-t-il ?
    notes = [12, 8, 15, 11, 14]
    s = 0
    for n in notes:
    s = s + n
    print(s / len(notes))
    Voir la correction
    La boucle parcourt la liste : n prend les valeurs , , , , , et s les additionne : , , , , . « len(notes) » vaut , le nombre de notes. Le programme affiche « 12.0 » : c'est la MOYENNE des notes, . ⭐ « 12.0 » et non « 12 » : la division « / » donne un float, même quand elle tombe juste.
    tourns
    11212
    2820
    31535
    41146
    51460
  3. 11

    On place € à % par an (intérêts composés). Ce programme cherche au bout de combien d'années le capital dépasse €. a) Expliquer la ligne « c = c * 1.04 ». b) Qu'affiche le programme ?
    c = 1000
    n = 0
    while c < 1500:
    c = c * 1.04
    n = n + 1
    print(n)
    Voir la correction
    a) Augmenter de %, c'est multiplier par . Chaque tour de boucle fait passer une année. b) On déroule, au centime :  ;  ; … ; au bout de ans, € : encore sous , on continue. Au bout de ans, € : on sort. Le programme affiche  : il faut années. ⭐ C'est un algorithme de SEUIL : on ne sait pas d'avance combien de tours il faut, d'où le « while ». ⛔ Le piège : répondre ans, «  € à € par an ». Les intérêts s'ajoutent aux intérêts : le capital grandit plus vite.
    n (années)c (€)
    01 000
    11 040
    21 081,60
    91 423,31
    101 480,24
    111 539,45
  4. 12

    a) Écrire une fonction « est_multiple(a, b) » qui renvoie True si a est un multiple de b, et False sinon. b) Que renvoient « est_multiple(21, 7) » et « est_multiple(22, 7) » ? c) Quel est le type de ce qu'elle renvoie ?
    Voir la correction
    a) a est un multiple de b quand le reste de la division de a par b est nul : « def est_multiple(a, b): » puis, en retrait, « return a % b == 0 ». b)  : le reste est , elle renvoie True.  : le reste est , elle renvoie False. c) Une comparaison vaut True ou False : la fonction renvoie un bool. ⭐ Pas besoin de « if » : la comparaison « a % b == 0 » EST déjà le résultat.
    def est_multiple(a, b):
    return a % b == 0
    est_multiple(21, 7) # True
    est_multiple(22, 7) # False
  5. 13

    Écrire un programme qui calcule et affiche la somme des carrés des entiers de à  : . Quelle valeur affiche-t-il ?
    Voir la correction
    On garde le schéma de l'exercice 7 : une variable s à , puis une boucle qui ajoute chaque carré. Les entiers de à  : « range(1, 11) », car la borne de droite est exclue. À chaque tour, on ajoute « k ** 2 ». Le programme affiche . ⭐ Vérification : . ⛔ Le piège : « range(1, 10) », qui s'arrête à et oublie .
    s = 0
    for k in range(1, 11):
    s = s + k ** 2
    print(s)
  6. 14

    Voici l'algorithme de Syracuse : si n est pair, on le divise par  ; sinon, on le multiplie par et on ajoute . On recommence jusqu'à obtenir . a) Qu'affiche le programme ? b) Que compte la variable etapes ?
    n = 6
    etapes = 0
    while n != 1:
    if n % 2 == 0:
    n = n // 2
    else:
    n = 3 * n + 1
    etapes = etapes + 1
    print(etapes)
    Voir la correction
    a) On déroule : est pair →  ; est impair →  ; puis , , , , , . On a obtenu  : « n != 1 » (n différent de ) est faux, on sort. Le programme affiche . b) etapes compte le nombre de transformations pour arriver à  : ici . ⭐ Personne n'a jamais trouvé de nombre qui n'arrive pas à … mais personne n'a démontré que c'était toujours vrai : c'est la CONJECTURE de Syracuse, toujours ouverte. ⛔ Le piège : « n / 2 » au lieu de « n // 2 ». On obtiendrait des float, « 3.0 », « 5.0 »…
    étapen
    06
    13
    210
    35
    416
    58
    64
    72
    81
  7. 15

    Ce programme doit afficher l'âge de l'utilisateur l'an prochain. Il s'arrête sur une erreur. a) Pourquoi ? b) Corriger la première ligne.
    age = input('Âge ? ')
    print(age + 1)
    Voir la correction
    a) « input » renvoie TOUJOURS un texte (str), même si l'on tape des chiffres : age vaut par exemple '15', entre guillemets. « age + 1 » demande d'ajouter un texte et un nombre : Python refuse (TypeError). b) On convertit le texte en entier dès la saisie : « age = int(input('Âge ? ')) ». Avec , le programme affiche . ⭐ Le type d'une variable n'est pas écrit dans le programme, mais il décide de ce qu'on peut en faire.
    age = int(input('Âge ? '))
    print(age + 1)
  8. 16

    a) Que renvoient « somme(4) » et « somme(100) » ? b) Comparer avec la formule .
    def somme(n):
    s = 0
    for k in range(n + 1):
    s = s + k
    return s
    Voir la correction
    a) « range(n + 1) » donne k = , , …, . La fonction additionne donc les entiers de à . somme(4) : . somme(100) : . b) ✓ et ✓. ⭐ La boucle fait tours pour somme(100) ; la formule, un seul calcul. Le programme sert à VÉRIFIER une formule sur beaucoup de cas avant de la démontrer. ⛔ Le piège : « range(n) », qui s'arrête à et oublie le dernier terme.
    ks
    00
    11
    23
    36
    410

Problèmes : exercices 17 à 20niveau 3

Des situations réelles : on lit le programme, on le fait tourner à la main, on interprète ce qu'il affiche.

Rappel de cours

  • « from random import randint » puis « randint(1, 6) » : un entier au hasard entre et , bornes COMPRISES.
  • Simuler, c'est répéter une expérience aléatoire un grand nombre de fois et compter : la fréquence obtenue s'approche de la probabilité.
  • Un programme ne prouve rien d'un modèle : il calcule ce que le modèle PRÉVOIT.
  1. 17Le dé lancé dix mille fois

    a) Que calcule la fonction « lancers(n) » ? b) Quelle valeur s'attend-on à trouver pour « lancers(10000) » ? c) Deux élèves lancent « lancers(10) » : l'un obtient 0.4, l'autre 0.0. L'un d'eux s'est-il trompé ?
    from random import randint
    def lancers(n):
    six = 0
    for i in range(n):
    if randint(1, 6) == 6:
    six = six + 1
    return six / n
    Voir la correction
    a) La boucle lance n fois un dé ; à chaque « 6 », on ajoute au compteur six. À la fin, on divise par n : la fonction renvoie la FRÉQUENCE des six sur n lancers. b) La probabilité d'un six est . Sur lancers, la fréquence est très proche de  : c'est la loi des grands nombres. c) Personne ne s'est trompé. Sur lancers, obtenir six ou aucun est tout à fait possible : un petit échantillon FLUCTUE beaucoup. ⭐ Le diagramme montre un vrai essai : sur lancers, sur , sur . Plus n est grand, plus la fréquence se resserre autour de  : c'est pour cela qu'on simule en grand.
    0.110 lancers0.191000.164610 0000.167Proba 1/6
  2. 18Le CO₂ de l'atmosphère

    À l'observatoire de Mauna Loa (Hawaï), la concentration moyenne de CO₂ dans l'air était d'environ ppm (parties par million) en 2024. On suppose qu'elle augmente de ppm par an. a) En quelle année le programme prévoit-il le passage des ppm ? b) Quel est le type de co2 à la fin ? Pourquoi ? c) Que faut-il changer pour une hausse de ppm par an ? Quelle année obtient-on alors ?
    co2 = 424
    annee = 2024
    while co2 < 450:
    co2 = co2 + 2.5
    annee = annee + 1
    print(annee)
    Voir la correction
    a) Il faut monter de ppm. Au bout de ans,  : encore sous . Au bout de ans,  : on sort. Le programme affiche . b) co2 valait l'entier , mais on lui ajoute  : il devient un float, « 451.5 ». c) On remplace « 2.5 » par « 3 ». Il faut alors ans () : le programme affiche . ⭐ Le modèle ne dit rien de l'avenir réel : il dit ce qui arrive SI la hausse reste constante. En 2024, elle a d'ailleurs été plus forte que ppm. ⛔ Le piège au a) : diviser, , et répondre 2034. On compte des années entières, et ans ne suffisent pas.
    anneeco2
    2024424
    2025426.5
    2033446.5
    2034449.0
    2035451.5
  3. 19Deux dés : le 7 ou le 12 ?

    On lance deux dés et on fait la somme. Ce programme compte, sur lancers, combien de fois on obtient et combien de fois . a) Compléter les deux lignes « if ». b) Quelles fréquences s'attend-on à trouver ? Justifier avec les issues possibles. c) Un joueur parie sur le « parce que c'est le plus gros ». A-t-il raison ?
    from random import randint
    sept = 0
    douze = 0
    for i in range(36000):
    d1 = randint(1, 6)
    d2 = randint(1, 6)
    s = d1 + d2
    if ...:
    sept = sept + 1
    if ...:
    douze = douze + 1
    print(sept, douze)
    Voir la correction
    a) « if s == 7: » et « if s == 12: » (deux « = » pour comparer). b) Deux dés donnent issues équiprobables. La somme en compte  : (1 ; 6), (2 ; 5), (3 ; 4), (4 ; 3), (5 ; 2), (6 ; 1). La somme une seule : (6 ; 6). On attend une fréquence proche de pour , soit environ fois ; et proche de pour , soit environ fois. c) Non : le sort environ SIX fois plus souvent. Toutes les sommes ne sont pas équiprobables, même si chaque dé l'est. ⛔ Le piège au b) : croire les onze sommes, de à , également probables. Ce sont les COUPLES qui le sont.
    1223344556675849310211112
  4. 20La racine de 2, pas à pas

    On cherche sans la touche racine : on part de et on avance de tant que le carré reste sous . a) Faire la trace de x. Quel encadrement de obtient-on ? b) Python affiche en fait « 1.5000000000000004 ». Pourquoi pas « 1.5 » ? c) Que faut-il changer pour avoir un encadrement à près ? Python affiche alors « 1.4200000000000004 » : quel encadrement en déduit-on ?
    x = 1
    while x * x < 2:
    x = x + 0.1
    print(x)
    Voir la correction
    a) x vaut , puis  ;  ;  ;  : leurs carrés,  ;  ;  ; , sont sous . Avec , le carré vaut  : on sort. , donc . b) L'ordinateur calcule en BINAIRE, où ne s'écrit pas exactement (comme en décimal). Chaque ajout garde une minuscule erreur, et elles s'accumulent : au lieu de . c) On remplace « 0.1 » par « 0.01 ». Le programme s'arrête au premier x dont le carré dépasse , soit (à l'erreur près) : . ⭐ C'est un algorithme de BALAYAGE : plus le pas est petit, plus l'encadrement est fin — et plus la boucle tourne. ⛔ Le piège au a) : répondre «  ». Le programme donne la PREMIÈRE valeur trop grande : est juste avant.
    xx * x< 2 ?
    11oui
    1.11.21oui
    1.21.44oui
    1.31.69oui
    1.41.96oui
    1.52.25non
eleveai.fr - Fiche d'exercicesAlgorithmique et Python - 2nde

Tu as compris ? À toi de t'entraîner :

🧮 Entraîne-toi avec le Coach Maths →