Exercices mélangés — if / while / fonctions
Exercices mélangés — if / while / fonctions
Objectifs cantonaux : O1.6.
Cette page combine tout ce que vous avez appris depuis le début de l’année : fonctions, conditions if/elif/else, boucles for/while. Les exercices suivants sont volontairement plus proches d’une synthèse que d’une découverte.
Priorité des opérations — rappel
▷ Rappel — Ordre d’évaluation
Comme en mathématiques, Python évalue les expressions dans cet ordre :
- Parenthèses
- Substitution des variables
- Évaluation des fonctions (
sqrt(...), …) - Puissances (
**) - Multiplication / division (
*,/,//,%) - Addition / soustraction (
+,-)
3 * 10 ** 2 + 20 - 5 / 10 * 9 ** 3 s’évalue ainsi :
3 * 100 + 20 - 5 / 10 * 729
300 + 20 - 0.5 * 729
320 - 364.5
= -44.5
Exercice 1 — simplifier avec elif
Le programme suivant fonctionne mais empile les if ... else ... de manière peu lisible. Réécrivez-le avec une structure if ... elif ... else.
from gturtle import *
def polygone(nb_cotes, couleur):
setPenColor(couleur)
for _ in range(nb_cotes):
forward(100)
right(360 / nb_cotes)
couleur = input("Couleur du stylo : ")
if couleur == "Jaune":
couleur = "yellow"
else:
if couleur == "Rouge":
couleur = "red"
else:
if couleur == "Bleu":
couleur = "blue"
else:
print("Couleur inconnue")
polygone(6, couleur)! Pourquoi elif est préférable
Avec des if ... else ... imbriqués, même si le premier test est vrai, Python doit quand même descendre dans l’imbrication pour trouver la bonne branche. Avec elif, dès qu’une condition est vraie, les branches suivantes ne sont même pas testées — le code est aussi plus lisible.
Exercice 2 — nombre premier (fonctions + while)
Modifiez la fonction est_premier(n) ci-dessous, écrite avec un nombre fixe de répétitions, pour qu’elle utilise une boucle while au lieu d’une boucle for :
def est_premier(n):
k = 1
count_diviseurs = 0
for _ in range(n):
if n % k == 0:
count_diviseurs += 1
k += 1
if count_diviseurs == 2:
print(n, "est premier")
else:
print(n, "n'est pas premier")
est_premier(12)
est_premier(17)! Indication
Il suffit de continuer à répéter la boucle tant que le nombre candidat \(k \leq n\).
Exercice 3 — synthèse : équation du 2e degré
Vous savez résoudre une équation du deuxième degré \(a x^2 + b x + c = 0\) avec le discriminant \(\Delta = b^2 - 4ac\) :
- Si \(\Delta > 0\) : deux solutions \(x_1 = \dfrac{-b - \sqrt{\Delta}}{2a}\) et \(x_2 = \dfrac{-b + \sqrt{\Delta}}{2a}\)
- Si \(\Delta = 0\) : une seule solution \(x = \dfrac{-b}{2a}\)
- Si \(\Delta < 0\) : aucune solution réelle
Développez une fonction solve_quadratic_eq(a, b, c) qui affiche les solutions selon ces trois cas (utilisez if/elif/else et sqrt du module math). Gérez aussi le cas particulier \(a = 0\) (ce n’est alors pas une équation du 2e degré).
◈ Exemples attendus
>>> solve_quadratic_eq(0, 4, 10)
Ceci n'est pas une équation du 2e degré, car a=0
>>> solve_quadratic_eq(1, 0, -4)
Delta = 16
Il y a deux solutions : x1 = -2 et x2 = 2
>>> solve_quadratic_eq(1, 4, 4)
Delta = 0
Il n'y a qu'une seule solution : x = -2
>>> solve_quadratic_eq(1, 4, 5)
Delta < 0
Il n'y a aucune solution réelle à cette équation
Devoir donné par Cédric
Terminer les exercices de synthèse (elif, nombre premier, équation du 2e degré) en vue de la synthèse de mai.