MathLvl
Première STMGExercices corrigés20 exercicesCorrections détaillées

Exercices corrigés : Algorithmique et Python — Première STMG

Besoin de revoir la leçon avant de te lancer ? Cours et fiche de révision : Algorithmique et Python

Niveau
Première STMG
Chapitre
Algorithmique et Python
Nombre d'exercices
20 exercices corrigés
Difficulté
Application directe à type bac

Mis à jour le

En gestion, Python remplace les calculs répétitifs : appliquer une remise à cent articles, suivre un capital mois après mois, compter les jours où les ventes dépassent un objectif ou dépouiller un fichier de commandes. Ces 20 exercices corrigés reprennent les bases de seconde (affectation, test, boucle, fonction), installent le compteur et l'accumulateur, puis la seule notion nouvelle de l'année, la liste. Ils finissent par le traitement de données (tableau croisé) et la simulation du hasard avec random(). Chaque correction suit les variables pas à pas, et toutes les sorties annoncées ont été vérifiées en exécutant les programmes.

Cherche d'abord par toi-même, puis clique sur « Voir la correction » : chaque étape est détaillée avec rappels de cours et erreurs fréquentes à éviter.

1

Exercice 1 — Suivre des affectations

Application directe

On exécute les instructions suivantes :prix = 120prix = prix * 0.9prix = prix * 1.2

  1. 1.Que vaut prix à la fin ?
  2. 2.Que représente ce calcul ?
Voir la correction

Correction détaillée

  1. 1

    Une affectation calcule d'abord le membre de droite avec la valeur actuelle, puis range le résultat dans la variable.

  2. 2

    Après la deuxième ligne : 120 × 0,9 = 108.

  3. 3

    Après la troisième ligne : 108 × 1,2 = 129,6.

    Python affiche 129.6.

  4. 4

    Le programme applique une remise de 10 % puis une TVA de 20 % : le prix final est 129,60 €.

    Les coefficients se multiplient : 0,9 × 1,2 = 1,08, soit +8 % au total.

Réponse : prix = 129,6 : prix TTC après une remise de 10 %.

Rappel de cours : x = x * c multiplie la valeur actuelle de x par c et écrase l'ancienne valeur.

2

Exercice 2 — Que renvoie cette fonction ?

Application directe

On définit :def ht(ttc):return ttc / 1.2

  1. 1.Quelle est l'entrée de la fonction ? sa sortie ?
  2. 2.Que renvoient ht(150) et ht(60) ? Interprète.
Voir la correction

Correction détaillée

  1. 1

    L'entrée est le paramètre ttc, un prix toutes taxes comprises ; la sortie est la valeur renvoyée par return.

  2. 2

    ht(150) : 150/1,2 = 125 ; ht(60) : 60/1,2 = 50.

  3. 3

    La fonction retrouve le prix hors taxes d'un prix TTC avec une TVA de 20 % : on divise par le coefficient 1,2, on ne retire pas 20 %.

Réponse : ht(150) = 125 et ht(60) = 50 : prix hors taxes.

Erreur fréquente : Retirer 20 % du prix TTC : 150 × 0,8 = 120, ce qui est faux.

3

Exercice 3 — Un tarif selon l'âge

Application directe

Un cinéma applique ce tarif :def tarif(age):if age < 18:return 6else:return 9.5

  1. 1.Que renvoient tarif(15) et tarif(18) ?
  2. 2.Combien paie une famille de deux adultes et deux enfants de 10 et 14 ans ?
Voir la correction

Correction détaillée

  1. 1

    tarif(15) : 15 < 18 est vrai, la fonction renvoie 6.

  2. 2

    tarif(18) : 18 < 18 est faux, la fonction renvoie 9,5.

    Un spectateur de 18 ans paie le plein tarif.

  3. 3

    La famille paie 2 × 9,5 + 2 × 6 = 19 + 12 = 31 €.

Réponse : 6 et 9,5 · 31 € pour la famille.
4

Exercice 4 — Lire une liste

Application directe

Les ventes de quatre semaines sont rangées dans la liste L = [45, 52, 38, 61].

  1. 1.Que valent len(L), L[1] et L[-1] ?
  2. 2.Quelle instruction donne les ventes de la troisième semaine ?
Voir la correction

Correction détaillée

  1. 1

    La liste a 4 éléments, d'indices 0 à 3 : len(L) vaut 4.

  2. 2

    L[1] est le deuxième élément, 52 ; L[-1] est le dernier, 61.

  3. 3

    La troisième semaine a l'indice 2 : L[2], qui vaut 38.

    L'indice est toujours le rang moins 1.

Réponse : 4 ; 52 ; 61 · L[2].

Erreur fréquente : Écrire L[3] pour la troisième semaine : c'est la quatrième.

5

Exercice 5 — Une boucle bornée

Application directe

On exécute :s = 0for k in range(5):s = s + 2

  1. 1.Combien de fois la boucle tourne-t-elle ?
  2. 2.Que vaut s à la fin ?
Voir la correction

Correction détaillée

  1. 1

    range(5) donne les valeurs 0, 1, 2, 3, 4 : la boucle tourne 5 fois.

  2. 2

    À chaque tour, s augmente de 2 : elle vaut successivement 2, 4, 6, 8, 10.

  3. 3

    À la fin, s = 5 × 2 = 10.

    La variable k n'est pas utilisée dans le calcul : elle sert seulement à compter les tours.

Réponse : 5 tours · s = 10.
6

Exercice 6 — Un accumulateur

À maîtriser

On veut calculer le total et la moyenne des ventes L = [45, 52, 38, 61] sans utiliser sum :s = 0for v in L:s = s + vmoy = s / len(L)

  1. 1.Que valent s et moy à la fin ?
  2. 2.Pourquoi initialise-t-on s à 0 ?
Voir la correction

Correction détaillée

  1. 1

    La boucle parcourt les valeurs et les ajoute une à une : s vaut 45, 97, 135, puis 196.

  2. 2

    moy = 196/4 = 49 : en moyenne 49 ventes par semaine.

  3. 3

    s est un accumulateur de somme : on part de 0, qui ne change pas une somme.

    Pour un produit, on partirait de 1.

Réponse : s = 196 et moy = 49.

Rappel de cours : Accumulateur : s = 0 avant la boucle, s = s + ... dans la boucle.

7

Exercice 7 — Un compteur

À maîtriser

Les ventes de six jours sont J = [45, 52, 38, 61, 57, 49].

Écris un programme qui compte les jours où les ventes dépassent 50, puis donne le résultat.

Voir la correction

Correction détaillée

  1. 1

    On initialise un compteur à 0 et on l'augmente de 1 chaque fois que la condition est vraie : n = 0for v in J:if v > 50:n = n + 1

  2. 2

    Les valeurs 52, 61 et 57 dépassent 50 : n vaut 3 à la fin.

  3. 3

    L'objectif de 50 ventes est dépassé 3 jours sur 6, soit la moitié des jours.

Réponse : 3 jours.
8

Exercice 8 — Une liste par ajouts successifs

À maîtriser

On exécute :C = []c = 2000for n in range(4):C.append(round(c, 2))c = c * 1.02

  1. 1.Que contient la liste C à la fin ?
  2. 2.À quelle suite correspondent ses éléments ?
Voir la correction

Correction détaillée

  1. 1

    À chaque tour, on ajoute à la fin de la liste la valeur actuelle de c, puis on la multiplie par 1,02.

  2. 2

    C vaut [2000, 2040.0, 2080.8, 2122.42].

  3. 3

    Ce sont les quatre premiers termes de la suite géométrique cₙ = 2000 × 1,02ⁿ : un capital de 2000 € placé à 2 % par an.

    Par exemple 2000 × 1,02³ ≈ 2122,42.

Réponse : [2000, 2040.0, 2080.8, 2122.42] : capital à 2 % par an.
9

Exercice 9 — Une liste en compréhension

À maîtriser

Un stock de 100 articles diminue de 15 articles par jour.

Que contient la liste [100 - 15*k for k in range(5)] ?

Voir la correction

Correction détaillée

  1. 1

    La compréhension calcule 100 - 15k pour k = 0, 1, 2, 3, 4.

  2. 2

    On obtient [100, 85, 70, 55, 40] : le stock au début de chacun des cinq premiers jours.

  3. 3

    Ce sont les termes de la suite arithmétique de premier terme 100 et de raison -15 : la compréhension traduit directement la formule uₖ = 100 - 15k.

Réponse : [100, 85, 70, 55, 40].
10

Exercice 10 — Une fonction à deux entrées

À maîtriser

Le taux de marque est la marge rapportée au prix de vente :def marque(pv, pa):return (pv - pa) / pv * 100

  1. 1.Que renvoie marque(50, 35) ? Interprète.
  2. 2.Pourquoi divise-t-on par pv et non par pa ?
Voir la correction

Correction détaillée

  1. 1

    marque(50, 35) : (50 - 35)/50 × 100 = 15/50 × 100 = 30.

  2. 2

    Un article acheté 35 € et vendu 50 € a un taux de marque de 30 % : la marge représente 30 % du prix de vente.

  3. 3

    Le taux de marque rapporte la marge au prix de vente ; rapportée au prix d'achat, elle donnerait le taux de marge, 15/35 × 100 ≈ 42,9 %.

    L'ordre des paramètres compte : pv d'abord, pa ensuite.

Réponse : 30 : taux de marque de 30 %.
11

Exercice 11 — Un seuil avec while

À maîtriser

Un capital de 3000 € est placé à 4 % par an.c = 3000n = 0while c <= 4000:c = c * 1.04n = n + 1

  1. 1.Que représente n à la fin ?
  2. 2.Que vaut n ? Vérifie par le calcul.
Voir la correction

Correction détaillée

  1. 1

    La boucle multiplie le capital par 1,04 tant qu'il ne dépasse pas 4000 €, en comptant les années : à la fin, n est le nombre d'années nécessaires pour dépasser 4000 €.

  2. 2

    Le programme s'arrête avec n = 8.

  3. 3

    Vérification : 3000 × 1,04⁷ ≈ 3947,80 est encore inférieur à 4000, et 3000 × 1,04⁸ ≈ 4105,71 le dépasse.

Réponse : n = 8 : le capital dépasse 4000 € au bout de 8 ans.
12

Exercice 12 — Filtrer une liste

Type contrôle

Des montants de commandes sont rangés dans M = [12, 35, 8, 50, 27].

Que contient la liste [x for x in M if x >= 20] ?

Quelle proportion des commandes représente-t-elle ?

Voir la correction

Correction détaillée

  1. 1

    La compréhension garde les éléments qui vérifient la condition x >= 20 : 35, 50 et 27.

  2. 2

    La liste vaut [35, 50, 27] : ce sont les commandes d'au moins 20 €.

  3. 3

    Elles représentent 3/5 = 0,6, soit 60 % des commandes.

    En Python : len([x for x in M if x >= 20]) / len(M).

Réponse : [35, 50, 27] · 60 % des commandes.
13

Exercice 13 — Le meilleur mois

Type contrôle

Les chiffres d'affaires de janvier à juin sont V = [310, 285, 342, 298, 360, 331].im = 0for i in range(len(V)):if V[i] > V[im]:im = i

  1. 1.Que contient im à la fin ?
  2. 2.Quel est le meilleur mois ?
Voir la correction

Correction détaillée

  1. 1

    im garde l'indice du plus grand élément rencontré : il vaut 0, puis 2 (car 342 > 310), puis 4 (car 360 > 342).

  2. 2

    À la fin, im = 4 et V[4] = 360.

  3. 3

    L'indice 4 correspond au cinquième mois : le meilleur mois est mai, avec 360.

Réponse : im = 4 : mai (360).
14

Exercice 14 — Un tableau croisé

Type contrôle

Dix salariés ont choisi une activité pour le comité d'entreprise ; chaque réponse est une liste [genre, activité] : F sport, H culture, F culture, F sport, H sport, H sport, F culture, H culture, F sport, H sport.

  1. 1.Écris l'instruction qui compte les femmes ayant choisi le sport, la liste s'appelant d.
  2. 2.Dresse le tableau croisé genre × activité. Le choix dépend-il du genre ?
Voir la correction

Correction détaillée

  1. 1

    On compte les réponses qui vérifient les deux critères : len([r for r in d if r[0] == "F" and r[1] == "sport"]) qui vaut 3.

  2. 2

    En répétant pour chaque couple : femmes, 3 sport et 2 culture ; hommes, 3 sport et 2 culture.

  3. 3

    Dans les deux groupes, la fréquence du sport vaut 3/5 = 0,6, égale à la fréquence globale 6/10 : dans cet échantillon, le choix ne dépend pas du genre.

Réponse : 3 · F : 3 et 2 ; H : 3 et 2 ; pas de lien avec le genre.
15

Exercice 15 — Simuler une épreuve de Bernoulli

Type contrôle

Un client accepte une offre avec la probabilité 0,25.def accepte():return random() < 0.25

  1. 1.Pourquoi cette fonction simule-t-elle la décision d'un client ?
  2. 2.Sur 1000 clients simulés, un élève compte 257 acceptations. Commente.
Voir la correction

Correction détaillée

  1. 1

    random() renvoie un nombre au hasard dans [0 ;1[.

    La condition random() < 0.25 est vraie quand ce nombre tombe dans [0 ;0,25[, ce qui arrive avec la probabilité 0,25 : la fonction renvoie True (acceptation) avec la probabilité voulue.

  2. 2

    La fréquence observée est 257/1000 = 0,257, proche de 0,25.

  3. 3

    L'écart de 0,007 est dû à la fluctuation d'échantillonnage : sur un grand nombre de clients simulés, la fréquence se rapproche de la probabilité.

Réponse : Condition vraie avec la probabilité 0,25 · 0,257, proche de 0,25.
16

Exercice 16 — Une boucle qui ne s'arrête pas

Type contrôle

Une machine perd 10 % de sa valeur chaque année ; elle vaut 200 (milliers d'euros).

Pour savoir quand elle vaudra 100 ou moins, un élève écrit :u = 200n = 0while u > 100:u = u * 1.1n = n + 1

  1. 1.Pourquoi le programme ne s'arrête-t-il jamais ?
  2. 2.Corrige-le et donne le résultat.
Voir la correction

Correction détaillée

  1. 1

    L'élève multiplie par 1,1 : la valeur augmente (220, 242…) et reste toujours supérieure à 100.

    La condition du while n'est jamais fausse : c'est une boucle infinie.

  2. 2

    Perdre 10 %, c'est multiplier par 0,9.

    On remplace la quatrième ligne par u = u * 0.9.

  3. 3

    Le programme s'arrête avec n = 7 : 200 × 0,9⁶ ≈ 106,29 et 200 × 0,9⁷ ≈ 95,66.

    La machine vaut 100 milliers d'euros ou moins au bout de 7 ans.

Réponse : La valeur augmente au lieu de baisser · avec u = u * 0.9, n = 7.

Rappel de cours : Dans une boucle while, le corps doit faire évoluer la variable testée vers la sortie.

17

Exercice 17 — Deux offres d'abonnement

Type bac / défi

Un abonnement A coûte 30 € le premier mois puis augmente de 2 € par mois ; un abonnement B coûte 25 € puis augmente de 5 % par mois.A = 30B = 25m = 0while B <= A:A = A + 2B = B * 1.05m = m + 1

  1. 1.Quelles suites modélisent les prix mensuels ?
  2. 2.Le programme affiche m = 23. Interprète.
Voir la correction

Correction détaillée

  1. 1

    A est une suite arithmétique : a_m = 30 + 2m.

    B est une suite géométrique : b_m = 25 × 1,05^(m).

  2. 2

    La boucle avance d'un mois tant que B reste moins cher ou au même prix que A.

    Elle s'arrête au premier mois où B devient plus cher.

  3. 3

    Au bout de 23 mois, A coûte 30 + 2 × 23 = 76 € et B environ 25 × 1,05²³ ≈ 76,79 € : B est devenu plus cher.

    Pour un engagement de moins de 23 mois, B est plus avantageux chaque mois ; ensuite, sa hausse en pourcentage le rend plus cher.

Réponse : A arithmétique, B géométrique · B devient plus cher que A à partir du 23^(e) mois.
18

Exercice 18 — Un programme modulaire

Type bac / défi

Une entreprise vend chaque article 120 € ; le coût de production de q articles est 2q² + 20q + 800 euros.def benefice(q):return 120*q - (2*q**2 + 20*q + 800)best = 0for q in range(51):if benefice(q) > benefice(best):best = q

  1. 1.Que contient best à la fin ?
  2. 2.Le programme trouve best = 25. Vérifie par le calcul.
Voir la correction

Correction détaillée

  1. 1

    La boucle teste les quantités entières de 0 à 50 et garde dans best celle qui donne le plus grand bénéfice : c'est un balayage.

  2. 2

    Le bénéfice s'écrit B(q) = -2q² + 100q - 800 = -2(q - 10)(q - 40).

  3. 3

    Ses racines sont 10 et 40 ; le sommet est au milieu, en q = 25, et B(25) = -2 × 15 × (-15) = 450 €.

    Le programme et le calcul concordent : 25 articles, 450 € de bénéfice.

Réponse : best = 25 : bénéfice maximal de 450 €.
19

Exercice 19 — Total par catégorie

Type bac / défi

Des commandes sont enregistrées sous la forme [catégorie, montant] : textile 45, chaussures 80, textile 30, accessoires 15, chaussures 65, textile 55.

  1. 1.Écris l'instruction qui calcule le total du textile, la liste s'appelant cmd.
  2. 2.Calcule le total de chaque catégorie et sa part du chiffre d'affaires.
Voir la correction

Correction détaillée

  1. 1

    On cumule les montants des commandes de la catégorie : sum(c[1] for c in cmd if c[0] == "textile") qui vaut 45 + 30 + 55 = 130.

  2. 2

    De même : chaussures 80 + 65 = 145, accessoires 15.

    Le total général vaut 130 + 145 + 15 = 290 €.

  3. 3

    Parts : textile 130/290 ≈ 44,8 %, chaussures 145/290 = 50 %, accessoires 15/290 ≈ 5,2 %.

    Les chaussures font la moitié du chiffre d'affaires avec seulement deux commandes sur six.

Réponse : Textile 130 € (44,8 %), chaussures 145 € (50 %), accessoires 15 € (5,2 %).
20

Exercice 20 — Synthèse : estimer un risque par simulation

Type bac / défi

Trois machines tombent chacune en panne dans la journée avec la probabilité 0,1, indépendamment.def journee():for k in range(3):if random() < 0.1:return 1return 0

  1. 1.Que renvoie journee() ?
  2. 2.Sur 10 000 journées simulées, la fréquence obtenue est 0,2683. Calcule la probabilité exacte et compare.
Voir la correction

Correction détaillée

  1. 1

    La fonction simule les trois machines une à une : dès qu'une panne survient, elle renvoie 1 ; si aucune ne tombe en panne, elle renvoie 0.

    Elle simule l'événement « au moins une panne dans la journée ».

  2. 2

    Par l'événement contraire, « aucune panne » : P = 1 - 0,9³ = 1 - 0,729 = 0,271.

  3. 3

    La fréquence simulée, 0,2683, est très proche de 0,271 : l'écart de 0,0027 s'explique par la fluctuation d'échantillonnage.

    Il y a au moins une panne un peu plus d'une journée sur quatre.

Réponse : 1 s'il y a au moins une panne · probabilité exacte 0,271, proche de 0,2683.

Autres exercices corrigés en Première STMG

Tous les chapitres →

Besoin de revoir le cours ou de t'entraîner autrement ?