Les boucles en Python

Apprends à faire répéter des actions à un programme Python. Écris des boucles while qui s’exécutent jusqu’à ce qu’une condition change et des boucles for qui parcourent des chaînes, des listes et des suites de nombres. Utilise break, continue et le bloc else d’une boucle pour les contrôler. Applique les schémas classiques pour compter, calculer un total ou une moyenne, trouver la plus grande valeur et effectuer une recherche. Construis des boucles imbriquées pour traiter des grilles et des combinaisons, et suis les boucles à la main pour repérer les erreurs de décalage d’une unité et les boucles qui ne s’arrêtent jamais.

DébutantUnité 3 sur 10 de la formation Formation : Python : variables, boucles, fonctions et fichiers

Ce que tu vas apprendre

  1. Écrire des boucles while qui répètent un bloc de code tant qu’une condition est vraie, s’assurer que chaque boucle s’arrête et utiliser des boucles pour lire des saisies jusqu’à ce que l’utilisateur ait terminé.
    • Écrire une boucle while qui compte et met à jour des variables
      Lire et écrire les trois éléments qui font fonctionner une boucle while : une valeur initiale, une condition testée avant chaque passage et une mise à jour dans le corps indenté.
    • S’assurer qu’une boucle while s’arrête
      Reconnaître les boucles infinies, expliquer leurs causes, les corriger et arrêter un programme bloqué dans une telle boucle.
    • Lire des saisies jusqu’à ce que l’utilisateur ait terminé
      Utiliser des boucles while pour continuer à lire des valeurs jusqu’à l’apparition d’une valeur d’arrêt et pour redemander une réponse jusqu’à ce que l’utilisateur en donne une acceptable.
  2. Utiliser des boucles for pour parcourir chaque élément d’une chaîne ou d’une liste et chaque nombre d’un range, et décider quand une boucle for ou while convient le mieux à une tâche.
    • Parcourir les éléments d’une séquence
      Écrire des boucles for qui parcourent dans l’ordre chaque caractère d’une chaîne ou chaque valeur d’une courte liste, et utiliser correctement la variable de boucle.
    • Générer des suites de nombres avec range
      Utiliser range avec un, deux ou trois arguments pour répéter une action un nombre fixé de fois ou parcourir des entiers régulièrement espacés, notamment en comptant à rebours.
    • Choisir entre une boucle for et une boucle while
      Décider quel type de boucle convient à une tâche et réécrire une boucle de comptage d’une forme à l’autre.
  3. Modifier le déroulement normal d’une boucle : en sortir plus tôt, sauter le reste d’une itération et exécuter du code uniquement lorsqu’une boucle s’est terminée sans être arrêtée.
    • Sortir plus tôt d’une boucle avec break
      Utiliser break pour terminer une boucle dès que sa tâche est accomplie, notamment avec le schéma while True pour les boucles de saisie.
    • Passer à l’itération suivante avec continue
      Utiliser continue pour sauter le reste d’une itération, éviter son piège dans les boucles while et distinguer continue, break et pass.
    • Exécuter du code quand une boucle se termine sans break
      Associer un bloc else à une boucle for ou while pour indiquer le cas où aucun break ne s’est produit, et utiliser une variable drapeau pour accomplir la même tâche.
  4. Utiliser les schémas de boucle classiques pour compter des valeurs, calculer leur total et leur moyenne, trouver la plus grande et la plus petite valeur et rechercher des éléments qui vérifient une condition.
    • Compter et accumuler des valeurs
      Utiliser des compteurs et des accumulateurs pour construire un dénombrement, un total, un produit, une moyenne ou un texte au fil des itérations d’une boucle.
    • Trouver la plus grande et la plus petite valeur
      Suivre la meilleure valeur rencontrée jusqu’ici pour trouver un maximum ou un minimum, choisir une valeur initiale sûre et enregistrer aussi sa position.
    • Rechercher des éléments qui vérifient une condition
      Vérifier les éléments un par un pour trouver une correspondance, conclure « non trouvé » seulement après avoir tout vérifié, et répondre aux questions « y en a-t-il au moins un ? » et « est-ce le cas pour tous ? ».
  5. Placer une boucle dans une autre pour manipuler des lignes et des colonnes, des combinaisons et des formes, prévoir combien de fois le corps interne s’exécute et contrôler les deux boucles.
    • Construire une boucle dans une boucle
      Écrire des boucles imbriquées pour des grilles, des tableaux, des combinaisons et des motifs qui s’agrandissent, et compter le nombre d’exécutions du corps interne.
    • Contrôler le déroulement de boucles imbriquées
      Utiliser des conditions, break, continue et des drapeaux dans des boucles imbriquées, en sachant que chaque instruction n’agit que sur sa propre boucle.
  6. Prévoir exactement ce que fait une boucle en suivant son exécution à la main, compter ses itérations, puis trouver et corriger les erreurs de décalage d’une unité et d’autres bugs courants dans les boucles.
    • Suivre une boucle avec un tableau de suivi
      Exécuter une boucle à la main dans un tableau de suivi pour prévoir sa sortie, ses valeurs finales et son nombre d’itérations, et utiliser des appels à print pour suivre automatiquement son exécution.
    • Trouver et corriger les erreurs de décalage d’une unité
      Repérer les boucles qui s’exécutent une fois de trop ou pas assez, utiliser des règles exactes pour compter les itérations et corriger les bornes.

Boucles en Python : cours

6 chapitres

1

Répéter des actions avec des boucles while

Un programme peut continuer à demander des saisies ou répéter un calcul jusqu’à atteindre un objectif. Une boucle while le permet en vérifiant une condition avant chaque passage dans son corps. Tu relieras la valeur initiale, le test et la mise à jour, puis tu utiliseras cette structure pour la saisie et la validation. Suivre l’évolution des valeurs montre aussi pourquoi une boucle s’arrête, saute entièrement son corps ou continue sans atteindre de sortie.

1.1 Comment une boucle while répète des actions

Une boucle répète un bloc de code. Chaque passage dans le bloc est une itération. Une boucle while vérifie une condition avant chaque passage et exécute son corps tant que cette condition est vraie. Cela convient à une tâche comme « continuer à additionner jusqu’à ce que le total atteigne 100 ».

Initialiser, tester et mettre à jour

Une boucle de comptage comporte une valeur initiale, une condition et une mise à jour. L’en-tête se termine par deux-points. Indente le corps de quatre espaces :

n = 3
while n > 0:
    print(n)
    n = n - 1
print("Liftoff!")

La sortie est :

3
2
1
Liftoff!

Lors de la première vérification, n > 0 est vrai car n vaut 3. Python affiche 3, soustrait 1 et revient à l’en-tête. Il recommence avec 2, puis 1. La mise à jour donne à n la valeur 0, donc la vérification suivante est fausse. Python saute le corps et exécute le dernier print.

L’indentation détermine ce qui se répète. Les deux lignes indentées appartiennent au corps. La dernière ligne est alignée sur while, donc elle s’exécute une fois après la boucle. Un if vérifie sa condition une fois ; while revient la vérifier après chaque exécution complète du corps.

La vérification a lieu au début

Modifier une variable n’interrompt pas le reste du corps en cours :

n = 1
while n > 0:
    n -= 1
    print("Still in this pass")
print(n)

Ce code affiche Still in this pass, puis 0, sur des lignes séparées. La mise à jour rend la condition fausse, mais Python ne la vérifie qu’à son retour à l’en-tête. En partant de n = 0, il sauterait tout le corps : une boucle while peut ne s’exécuter aucune fois.

Mises à jour courtes et changements de valeurs

n -= 1 signifie n = n - 1. De même, count += 1 ajoute 1, balance *= 1.07 multiplie par 1,07 et n //= 10 remplace n par son quotient entier par 10. Python n’a pas d’opérateur d’incrémentation : count++ est une erreur de syntaxe. Écrire ++count applique deux fois le plus unaire et laisse l’entier inchangé.

Ici, une boucle retire un chiffre à chaque passage :

n = 472
total = 0
while n > 0:
    total += n % 10
    n //= 10
print(total)

Le reste n % 10 est le dernier chiffre. D’abord, 2 est ajouté et n devient 47. Ensuite, 7 est ajouté et n devient 4. Enfin, 4 est ajouté et n devient 0. La sortie est 13. La mise à jour prépare le passage suivant tout en rapprochant la boucle de sa sortie.

Une boucle qui vise un objectif n’a pas nécessairement un nombre d’itérations connu à l’avance. En partant d’un solde de 1 000, le multiplier par 1,07 et augmenter un compteur d’années jusqu’à ce que le solde atteigne 2 000 prend 11 passages. Après 10 passages, le solde est d’environ 1 967,15 ; après 11, il est d’environ 2 104,85.

Les conditions peuvent combiner des comparaisons avec and, or et not. La valeur de vérité fonctionne aussi : pour un entier, while n: répète la boucle tant que n est non nul. Utilise une condition dont le sens est facile à suivre. Indente de manière cohérente avec des espaces ; des niveaux mal alignés peuvent lever IndentationError, et un mélange de tabulations et d’espaces peut lever TabError.

Points clés

  • Une boucle while vérifie sa condition avant chaque itération : son corps peut donc ne s’exécuter aucune fois.
  • Initialise avant la boucle et mets à jour dans celle-ci pour te rapprocher de la sortie.
  • Les lignes après une mise à jour s’exécutent quand même avant que la condition soit vérifiée à nouveau.
  • L’indentation détermine quelles instructions se répètent.
  • Utilise += et -= pour les mises à jour ; Python n’a pas d’opérateur d’incrémentation ++.

1.2 Pourquoi une boucle continue de s’exécuter

Une boucle infinie continue de se répéter sans atteindre de sortie. Tu peux voir la même sortie défiler ou un programme sembler ne rien faire. Pour trouver la cause, suis les valeurs utilisées dans la condition et cherche une sortie qui peut être atteinte.

Trouver la mise à jour

Cette boucle continue d’afficher 3 :

n = 3
while n > 0:
    print(n)

Le test reste vrai car rien ne modifie n. Ajoute n -= 1 dans le corps pour que les valeurs 3, 2 et 1 s’affichent avant l’arrêt de la boucle. Placer cette mise à jour après la boucle ne sert à rien : le programme ne peut pas l’atteindre tant que la boucle s’exécute.

Le sens compte aussi. Avec while n > 0:, une mise à jour n += 1 fait augmenter une valeur positive. Les entiers Python ne rebasculent pas à une valeur négative à partir d’un maximum fixe qui permettrait une sortie accidentelle. Nomme le changement attendu, par exemple « une tentative de moins restante », et vérifie que le code effectue ce changement sur chaque chemin dans le corps.

Une cible peut être manquée

Une mise à jour peut modifier la valeur à chaque passage sans jamais atteindre une valeur cible :

n = 1
while n != 10:
    print(n)
    n += 2

Les valeurs sont 1, 3, 5, 7, 9, 11, et ainsi de suite. Elles sont toujours impaires, donc aucune n’est égale à 10. Pour la tâche « afficher les valeurs impaires inférieures à 10 », utilise while n < 10:. Dès que n vaut 11, cette condition est fausse. Le choix de la comparaison doit correspondre à la tâche : se termine-t-elle à une valeur donnée ou lorsqu’une borne est franchie ?

Pas décimaux et égalité exacte

De nombreuses fractions décimales sont stockées approximativement sous forme de flottants. Ajouter 0.1 à 0.0 dix fois de suite donne 0.9999999999999999. Une boucle qui attend une égalité exacte avec 1.0 manque donc l’arrêt prévu.

Lorsque la tâche consiste à parcourir un ensemble fixé de dixièmes, compte avec des entiers et calcule chaque nombre décimal :

for i in range(11):
    x = i / 10
    print(x)

Ce code parcourt 11 valeurs de 0.0 à 1.0. Le comptage entier contrôle les répétitions ; ce n’est pas le nombre décimal stocké qui décide si la boucle doit s’arrêter.

Vérifier chaque chemin dans le corps

Avant d’exécuter une boucle while, repère ses valeurs initiales, sa condition et chaque instruction qui modifie ces valeurs. Vérifie que le changement peut rendre la condition fausse. Si un if saute une mise à jour, suis aussi ce chemin. Une ligne temporaire comme print("n =", n) dans le corps peut montrer une valeur qui reste bloquée ou qui s’éloigne de la borne.

Pour interrompre un programme en cours d’exécution, appuie sur Ctrl+C dans un terminal ou utilise le bouton d’arrêt ou d’interruption de l’éditeur. Dans un terminal, Python affiche normalement KeyboardInterrupt avec une trace d’appels.

Répétition intentionnelle

while True: maintient volontairement la condition de son en-tête vraie. Son corps utilise break pour quitter la boucle lorsqu’un événement se produit, par exemple lorsque l’utilisateur saisit « quit ». La sortie doit pouvoir être atteinte. Une boucle de saisie peut continuer à attendre parce que l’utilisateur n’a pas demandé à sortir ; il y a un bug lorsque la logique de la boucle rend la sortie prévue impossible.

Points clés

  • Vérifie que chaque chemin qui se répète peut atteindre une sortie.
  • Une mise à jour manquante, mal placée ou effectuée dans le mauvais sens peut empêcher une boucle while de s’arrêter.
  • La taille du pas peut faire sauter une valeur cible.
  • Utilise un compteur entier pour un nombre fixé de pas décimaux.
  • Ctrl+C ou une interruption depuis l’éditeur arrête un programme en cours d’exécution.
  • Une boucle while True intentionnelle se termine par un break qui peut être atteint.

1.3 Boucles de saisie et réponses acceptables

Une boucle de saisie peut recueillir une quantité inconnue de données ou continuer à poser une question jusqu’à obtenir une réponse acceptable. Dans les deux cas, la nouvelle saisie doit influer sur la décision de répéter.

S’arrêter à une sentinelle

Une sentinelle est une saisie particulière qui signifie « plus de données ». Choisis une valeur qui ne peut pas être une véritable donnée. Pour des nombres strictement positifs, 0 peut convenir ; si 0 est une mesure valide, choisis un autre signal d’arrêt.

La lecture initiale obtient la première valeur avant que la condition soit vérifiée :

total = 0
number = int(input("Number (0 to stop): "))
while number != 0:
    total += number
    number = int(input("Number (0 to stop): "))
print("Total:", total)

Pour les saisies 4, 7 et 0, le corps ajoute d’abord 4, puis 7. La lecture de 0 rend la condition suivante fausse. Le programme affiche Total: 11 ; il ne traite jamais la sentinelle. Si la première saisie est 0, le corps ne s’exécute aucune fois et le total reste égal à 0.

La dernière lecture dans le corps est essentielle. Sans elle, la même première valeur est traitée indéfiniment. Le test doit aussi avoir lieu avant le traitement d’une valeur nouvellement lue : sinon, une sentinelle peut être comptée comme une donnée.

Garder des types cohérents

input() renvoie du texte. La chaîne "0" n’est pas égale à l’entier 0. Convertis une saisie numérique avec int() avant de la comparer à une sentinelle numérique, ou garde la saisie sous forme de texte et compare-la à une chaîne comme "done". Une conversion numérique attend une chaîne numérique valide ; une vérification d’intervalle teste le nombre obtenu.

Pour calculer une moyenne, garde un compteur à côté du total. Avec la sentinelle -1 et les saisies 8, 6, 10 et -1, le total est 24 et le nombre de valeurs est 3. Divise après la boucle pour obtenir 8.0. Si la première saisie est -1, le nombre de valeurs reste égal à 0 : utilise donc if count > 0: avant la division. Cela permet de traiter un ensemble de données vide sans ZeroDivisionError.

Reposer la question tant qu’une réponse est invalide

Une boucle de validation décrit les réponses inacceptables dans sa condition :

age = int(input("Age (0-120): "))
while age < 0 or age > 120:
    print("Please enter an age from 0 to 120.")
    age = int(input("Age (0-120): "))
print("Thank you.")

Avec 150, -2 et 34, l’avertissement apparaît deux fois. La valeur 34 rend les deux comparaisons fausses, donc la boucle se termine. Les bornes 0 et 120 sont aussi acceptées.

Le mot or compte : un âge est invalide s’il est inférieur au minimum ou supérieur au maximum. Écrire age < 0 and age > 120 ne rejetterait rien, car un nombre ne peut pas être les deux à la fois.

Pour une réponse oui ou non, le test d’invalidité est answer != "y" and answer != "n". Une réponse doit différer des deux chaînes acceptées pour être rejetée. Avec or, même "y" provoquerait une répétition car cette réponse diffère de "n". Suis une réponse acceptable et une réponse inacceptable pour vérifier une telle condition.

Les mêmes tâches peuvent utiliser while True avec une seule lecture dans le corps, suivie d’un test de sortie et de break. La décision est ainsi placée immédiatement après la saisie et la lecture n’a pas besoin d’être écrite deux fois.

Points clés

  • Une sentinelle marque la fin des données et doit être testée avant le traitement.
  • Une boucle avec lecture initiale lit une valeur avant la boucle, puis à nouveau à la fin du corps.
  • Compare des types compatibles : input renvoie une chaîne.
  • La validation se répète tant que la réponse actuelle est invalide.
  • Vérifie que le nombre de valeurs est positif avant de calculer une moyenne.
2

Parcourir des séquences avec des boucles for et range

Lorsqu’une tâche parcourt chaque caractère, chaque valeur d’une liste ou une suite connue de nombres, une boucle for gère le passage d’un élément au suivant. Tu peux te concentrer sur l’action à effectuer pour chaque élément. Un range fournit des entiers espacés régulièrement sans qu’il soit nécessaire d’écrire une longue liste. Son début, sa fin exclue et son pas expliquent les valeurs parcourues comme les cas où il est vide. Comparer cette structure aux boucles while t’aidera à choisir une façon claire d’exprimer une tâche.

2.1 Parcourir des caractères et des valeurs de liste

Une boucle for parcourt les éléments d’une séquence dans l’ordre. À chaque passage, Python affecte l’élément suivant à la variable de boucle et exécute le corps indenté. Une boucle sur une séquence est souvent appelée boucle bornée car les éléments définissent le travail à accomplir.

Un élément à la fois

Une chaîne est une séquence de caractères :

for ch in "cat":
    print(ch)

Ce code affiche c, a et t sur des lignes séparées. Les espaces et les signes de ponctuation comptent aussi comme caractères. La chaîne "hi there" comporte huit caractères, dont son espace ; parcourir chaque caractère prend donc huit passages.

Une liste contient une séquence de valeurs. Sa forme littérale utilise des crochets et des virgules :

scores = [3, 41, 12]
for score in scores:
    print(score * 2)

La sortie est 6, 82 et 24, chaque valeur sur sa propre ligne. score contient un nombre à la fois, pas toute la liste ni sa position. Aucune mise à jour manuelle d’un compteur n’est nécessaire pour passer de 3 à 41 puis à 12.

Utilise un nom qui décrit un élément : name dans names, ou score dans scores. Si le corps n’a jamais besoin de la valeur actuelle, _ est un nom courant pour cette variable de boucle inutilisée.

Une affectation ne remplace pas un élément

La variable de boucle est une variable ordinaire. Lui affecter un autre nombre ne remplace pas le nombre dans la liste :

numbers = [1, 2, 3]
for n in numbers:
    n = n * 10
    print(n)
print(numbers)

Le corps affiche 10, 20 et 30. À chaque nouvelle itération, l’élément suivant de la liste d’origine est affecté à n. La dernière ligne de sortie est [1, 2, 3] : la liste elle-même n’a pas changé. Après la boucle, n garde 30, la dernière valeur qui lui a été affectée dans le corps.

Une séquence vide ne donne aucun travail au corps. Avec for ch in "":, il n’y a aucun passage et la boucle n’affecte aucune valeur à ch. Ne compte pas sur la boucle pour créer sa variable lorsqu’il peut n’y avoir aucun élément.

Appartenance dans une boucle

Dans un en-tête for, in introduit la séquence à parcourir. Dans une condition, il teste l’appartenance et produit True ou False. Ces utilisations peuvent fonctionner ensemble :

vowels = 0
for ch in "education":
    if ch in "aeiou":
        vowels += 1
print(vowels)

Chaque caractère est parcouru, mais le compteur ne change que pour e, u, a, i et o. La sortie est 5. Le if est indenté dans la boucle, et la mise à jour du compteur est indentée dans le if.

Cette boucle montre aussi pourquoi une variable de boucle et un compteur ont des rôles différents. ch contient le caractère actuel ; vowels indique combien de caractères ont vérifié la condition jusqu’ici. Le compteur est initialisé avant la boucle afin de conserver son résultat entre les passages.

Un entier seul ne peut pas fournir d’éléments : for i in 5: lève TypeError. Pour répéter une action cinq fois, écris for _ in range(5):. Le range fournit les étapes, même lorsque le corps n’utilise pas leurs valeurs.

Points clés

  • Une boucle for affecte dans l’ordre chaque élément de la séquence à sa variable de boucle.
  • Les espaces et les signes de ponctuation sont des caractères dans une chaîne.
  • Réaffecter une variable de boucle numérique laisse la liste d’origine inchangée.
  • Une séquence vide entraîne zéro exécution du corps et aucune affectation à la variable de boucle.
  • Dans une condition, in teste l’appartenance ; dans un en-tête for, il introduit les éléments à parcourir.
  • Utilise range(5), et non l’entier 5, pour fournir cinq répétitions.

2.2 Choisir le début, la fin et le pas d’un range

Un range décrit des entiers régulièrement espacés. Il sert à répéter une action un nombre fixé de fois, à compter en montant ou en descendant et à sélectionner des pas réguliers. Sa valeur de fin est toujours exclue.

Trois formes
FormeSignificationValeurs
range(5)Début à 0 ; pas de 10, 1, 2, 3, 4
range(2, 6)Début à 2 ; pas de 12, 3, 4, 5
range(1, 10, 2)Début à 1 ; pas de 21, 3, 5, 7, 9

Avec un argument, celui-ci est la fin. Avec deux arguments, ce sont le début et la fin. Avec trois, le dernier argument est le pas ajouté après chaque valeur. range(0, 10, 3) parcourt 0, 3, 6 et 9 ; le pas suivant atteindrait 12, qui n’est donc pas fourni.

La fin reste exclue même lorsqu’un pas pourrait tomber exactement dessus. range(0, 10, 5) ne fournit que 0 et 5. Avec le pas positif par défaut de 1 et une fin supérieure au début, le nombre de valeurs fournies est la fin moins le début.

Compter à rebours avec un pas négatif

range(5, 0, -1) fournit 5, 4, 3, 2 et 1. Pour inclure 0, place la fin en dessous : range(5, -1, -1) fournit six valeurs, qui se terminent à 0.

Le sens doit correspondre aux bornes. range(5, 0) est vide car son pas par défaut est positif. range(1, 5, -1) est aussi vide car il commence sous la fin mais descend. Les ranges vides sont valides et entraînent zéro itération ; un pas nul, en revanche, lève ValueError.

Placer la dernière valeur nécessaire à l’intérieur de la borne

Pour additionner les entiers pairs de 2 à 20 inclus :

total = 0
for n in range(2, 21, 2):
    total += n
print(total)

La fin fixée à 21 permet de parcourir 20. Les dix valeurs totalisent 110, donc le programme affiche 110. Utiliser 20 comme fin exclurait 20 et donnerait 90.

Pour une table de multiplication, laisse le range fournir les facteurs :

for i in range(1, 11):
    print(7, "x", i, "=", 7 * i)

La première ligne de sortie est 7 x 1 = 7, et la dixième est 7 x 10 = 70. Si le nombre lui-même n’est pas utilisé, for _ in range(3): peut répéter un message trois fois.

Examiner un range et vérifier ses arguments

list(range(2, 6)) produit [2, 3, 4, 5], ce qui est utile pour vérifier les bornes. len(range(0, 10, 3)) vaut 4. Un range stocke les bornes et le pas qui le définissent au lieu de construire une liste contenant chaque entier.

Les arguments sont des entiers, y compris zéro et les entiers négatifs : range(-3, 3) parcourt les nombres de -3 à 2. Un flottant comme 3.0 est rejeté avec TypeError, même s’il n’a pas de partie fractionnaire. Un nombre de répétitions saisi sous forme de texte peut d’abord être converti avec n = int(input("How many? ")), puis utilisé dans range(n).

Points clés

  • La fin d’un range est exclue dans toutes ses formes.
  • Un début omis vaut 0 par défaut ; un pas omis vaut 1 par défaut.
  • Compte à rebours avec un pas négatif et une fin inférieure au début.
  • Des bornes incompatibles avec le sens du pas produisent un range vide.
  • Les arguments de range doivent être des entiers et son pas ne peut pas être nul.
  • Examine les valeurs fournies avec list() et leur nombre avec len().

2.3 Choisir une boucle adaptée à la tâche

Choisis une boucle en te demandant ce qui contrôle la répétition. S’il y a une séquence d’éléments à parcourir ou un nombre de répétitions, for exprime généralement le travail directement. Si la répétition suivante dépend d’une condition qui change ou d’une saisie future, while place cette décision dans son en-tête.

Éléments définis ou condition changeante
TâcheBoucle adaptéeRaison
Afficher chaque nom d’une listefor name in names:La liste fournit les éléments.
Répéter un message un nombre de fois choisi par l’utilisateurfor _ in range(n):Le nombre saisi fournit un nombre de répétitions.
Lire des messages jusqu’à « quit »whileLe point d’arrêt dépend d’une saisie future.
Faire croître un solde jusqu’à un objectifwhile balance < target:Le solde actuel détermine s’il faut répéter.

Un nombre de répétitions n’a pas besoin d’être écrit sous forme de littéral dans le programme. Après la saisie de n, range(n) donne tout de même un ensemble défini d’étapes. Une boucle non bornée dépend d’une condition dont le point d’arrêt n’est pas précisé sous forme d’un nombre de répétitions.

Deviner un grand nombre de répétitions convient mal à une tâche à poursuivre « jusqu’à ce qu’elle soit terminée ». Une boucle sur range(1000) peut épuiser ses tentatives avant que l’utilisateur ait terminé, et une version sans test de sortie continuera après la fin du travail.

Réécrire une boucle de comptage

Ces deux boucles affichent les nombres de 1 à 5, chacun sur sa propre ligne :

for i in range(1, 6):
    print(i)
i = 1
while i < 6:
    print(i)
    i += 1

Dans la version while, le début du range devient l’initialisation, la fin exclue devient la comparaison < et le pas devient la mise à jour. Le corps utilise i avant cette mise à jour. Déplacer la mise à jour avant print(i) décalerait les valeurs affichées.

Un compte à rebours modifie à la fois la comparaison et la mise à jour :

i = 10
while i > 0:
    print(i)
    i -= 2

Ce code affiche 10, 8, 6, 4 et 2, comme le ferait for i in range(10, 0, -2):. Le range décroissant exclut sa fin, donc la condition while correspondante est i > 0.

Les deux formes conviennent à la tâche qui consiste à afficher ces nombres, mais les valeurs finales de leur variable de boucle diffèrent. La version while effectue sa dernière mise à jour jusqu’à 0 avant de s’arrêter. La version for se termine après avoir affecté sa dernière valeur fournie, 2.

Un range garde les bornes qui lui ont été données
n = 3
for i in range(n):
    n = 10
    print(i)

Ce code affiche toujours 0, 1 et 2. Le range a été créé avec 3 ; affecter 10 à n ne le reconstruit pas. Un break peut terminer la boucle plus tôt, mais modifier cette variable distincte ne change pas les nombres fournis par le range.

Un en-tête while, en revanche, évalue à nouveau son expression à chaque retour. Si cette expression utilise n, modifier n dans le corps peut changer le moment où la boucle se termine. Lorsque les deux formes expriment clairement une tâche de comptage, la version for gère le passage d’une valeur à la suivante sans mise à jour manuelle que l’on pourrait oublier.

Points clés

  • Utilise for pour parcourir des éléments fournis ou effectuer un nombre connu de répétitions, même si ce nombre est lu à l’exécution.
  • Utilise while lorsqu’une condition changeante ou une saisie future contrôle la répétition.
  • La conversion d’une boucle de comptage doit préserver le début, la borne, le pas et l’ordre des opérations.
  • Modifier une variable utilisée pour créer un range ne modifie pas ce range.
3

Contrôler une boucle avec break, continue et else

Une boucle exécute normalement tout son corps et revient pour un nouveau passage. Parfois, elle doit s’arrêter dès qu’un résultat apparaît, ou sauter l’élément actuel et continuer. Break et continue expriment ces décisions. Une boucle peut aussi avoir un bloc else pour sa fin normale. Suivre le saut exact effectué par chaque instruction t’aidera à lire les recherches, les boucles de saisie et les tentatives limitées sans confondre une sortie anticipée avec une fin normale.

3.1 S’arrêter plus tôt avec break

break termine immédiatement la boucle la plus interne qui le contient. Python saute le reste de ce corps et toutes les itérations restantes, puis continue après la boucle. Une condition dans le corps détermine quand cette sortie anticipée doit avoir lieu.

S’arrêter dès que le premier résultat est trouvé

Recherche le premier multiple de 7 supérieur à 50 :

for n in range(51, 100):
    if n % 7 == 0:
        print(n)
        break

La boucle vérifie 51, 52, 53, 54, 55 et 56. Le reste est nul à 56, donc Python affiche 56 et quitte la boucle. Cela prend six itérations, même si le range peut fournir 49 nombres. Sans break, la boucle afficherait aussi les multiples de 7 suivants.

break est indenté dans le if, donc il ne s’exécute que pour une correspondance. S’il était aligné sur if, il s’exécuterait dès la toute première itération, quel que soit le test. Un break dans un if termine la boucle qui contient ce if ; il ne termine pas seulement le bloc conditionnel.

Lire une fois, puis décider s’il faut traiter

Une boucle while True place la décision de sortie après la lecture d’une saisie :

while True:
    line = input("> ")
    if line == "done":
        break
    print(line)
print("Done!")

Pour les saisies « hello », « there » et « done », les lignes de réponse sont :

hello
there
Done!

La sentinelle est testée avant la ligne de traitement. Lorsqu’elle apparaît, break saute print(line). Le dernier print, sans indentation, s’exécute quand même après la boucle. Il n’y a qu’une seule instruction de saisie, car chaque passage commence par la lecture d’une nouvelle ligne.

Un total numérique suit le même ordre : initialise total = 0 avant la boucle ; lis et convertis un nombre ; quitte la boucle s’il vaut 0 ; sinon, ajoute-le. Pour 4, 7 et 0, le total est 11. Traiter la valeur avant le test de sortie laisserait la sentinelle atteindre le calcul, ce qui compte lorsque la valeur d’arrêt pourrait modifier un comptage, un produit ou une moyenne.

Valider au moment de la saisie
while True:
    age = int(input("Age: "))
    if 0 <= age <= 120:
        break
    print("Please enter an age from 0 to 120.")
print("Accepted:", age)

La comparaison chaînée accepte un âge de 0 à 120 inclus. Elle signifie 0 <= age and age <= 120. Un nombre accepté entraîne la sortie avant l’avertissement ; un nombre hors de cet intervalle atteint l’avertissement, puis une nouvelle saisie. Sous cette forme, le if décrit une réponse valide, tandis qu’une boucle de validation contrôlée par son en-tête décrit une réponse invalide.

Suivre le saut à la lettre

Une instruction après break dans le même bloc ne peut pas s’exécuter. Place un message ou un résultat mémorisé avant le break lorsqu’il appartient au cas de réussite. Place le code après la boucle lorsqu’il doit s’exécuter aussi bien après une sortie anticipée qu’après une fin normale.

break doit se trouver dans une boucle ; sinon, Python lève SyntaxError. Plusieurs points de sortie distincts peuvent rendre une boucle plus difficile à suivre. Lorsqu’une seule condition décrit naturellement la règle d’arrêt de la tâche, la garder dans l’en-tête peut rendre le chemin plus facile à suivre.

Points clés

  • Break termine immédiatement la boucle la plus interne qui le contient.
  • Place le break dans la condition qui doit provoquer la sortie.
  • Une boucle de saisie while True lit une valeur, teste la sentinelle, puis traite les données.
  • Les instructions après break dans le même bloc sont inaccessibles.

3.2 Sauter un élément avec continue

continue saute le reste de l’itération en cours. La boucle reste active : une boucle for prend son élément suivant et une boucle while revient à sa condition. Cette instruction est utile lorsqu’un élément ne doit recevoir aucun des traitements qui suivent une vérification.

Sauter certaines valeurs
total = 0
for n in range(1, 11):
    if n % 3 == 0:
        continue
    total += n
print(total)

Le range fournit les dix entiers de 1 à 10 inclus. Pour 3, 6 et 9, continue saute l’addition. La somme des dix nombres est 55 ; retirer ces trois valeurs enlève 18, donc le programme affiche 37.

Continue ne retire pas une itération du range. Le corps commence quand même avec chaque valeur, y compris celles qui sont sautées. L’instruction change les lignes suivantes qui s’exécutent pendant ce passage.

Un filtre positif peut exprimer le même travail. Dans une boucle sur [5, -2, 8, -7, 3], if n < 0: continue suivi de print(n) affiche 5, 8 et 3. Placer le print dans if n >= 0: donne la même sortie. Continue est souvent utile lorsque plusieurs lignes de traitement suivent, car les éléments rejetés peuvent immédiatement quitter cette partie du corps.

Ne pas sauter une mise à jour de while
i = 0
while i < 5:
    if i == 2:
        continue
    print(i)
    i += 1

Ce code affiche 0 et 1, puis reste bloqué à 2. À 2, continue revient à la condition sans atteindre la mise à jour. La condition reste vraie et la même branche est empruntée à nouveau.

Pour ne pas afficher 2 tout en continuant à avancer, effectue aussi la mise à jour dans cette branche :

i = 0
while i < 5:
    if i == 2:
        i += 1
        continue
    print(i)
    i += 1

La sortie est maintenant 0, 1, 3 et 4 sur des lignes séparées. Le chemin qui saute l’affichage avance de 2 à 3. Chaque chemin dans ce corps effectue exactement une mise à jour.

Break, continue et pass
InstructionEffet lorsqu’elle est atteinte
breakTermine immédiatement la boucle qui la contient.
continueSaute le reste de ce passage et commence la vérification ou l’élément suivant de la boucle.
passNe fait rien ; poursuit normalement avec l’instruction suivante.

Pour une boucle sur [1, 2, 3, 4], supposons qu’un if n == 2: contienne l’une de ces instructions et que print(n) suive le if. Break affiche seulement 1. Continue affiche 1, 3 et 4. Pass affiche les quatre valeurs car il ne saute pas le print.

pass peut remplir un corps où Python exige une instruction pendant le développement du code. Il ne fournit ni mise à jour ni sortie : while True: pass continue de s’exécuter. Break et continue doivent se trouver dans une boucle et n’agissent que sur la boucle la plus interne qui les contient.

Points clés

  • Continue saute les instructions restantes du passage en cours, puis la boucle se poursuit.
  • Un élément sauté compte quand même comme une itération.
  • Chaque chemin qui se répète dans un corps while doit continuer à progresser vers une sortie.
  • Pass ne fait rien et ne saute pas les instructions suivantes.
  • Break termine la boucle ; continue la maintient active.

3.3 Que signifie le else d’une boucle ?

Un bloc else peut appartenir à une boucle for ou while. Il s’exécute une fois lorsque la boucle se termine normalement : une boucle for épuise ses éléments ou une condition while devient fausse. Il est sauté lorsque cette boucle se termine par break. Lis-le comme le cas sans break.

Signaler une recherche sans correspondance
for n in [4, 9, 15, 22]:
    if n % 5 == 0:
        print("First multiple of 5:", n)
        break
else:
    print("No multiple of 5")

La boucle atteint 15, affiche First multiple of 5: 15 et s’interrompt. Le else est sauté. Avec [4, 9, 22], la boucle utilise tous les éléments sans interruption et affiche No multiple of 5 une fois.

L’alignement est décisif. Le else est aligné sur for, donc il appartient à la boucle. Un else aligné sur le if interne s’exécuterait pour chaque élément sans correspondance, annonçant un échec avant la fin de la recherche.

Une liste vide atteint aussi le else de la boucle. Il n’y a aucun élément, donc le corps ne s’exécute aucune fois et aucun break ne se produit. De même, une boucle while dont la condition est fausse dès la première vérification exécute immédiatement son else.

Chercher un diviseur

Un nombre premier est un entier supérieur ou égal à 2 dont les seuls diviseurs positifs sont 1 et lui-même. Cherche un diviseur entre ces deux bornes :

n = 29
if n < 2:
    print("Not prime")
else:
    for d in range(2, n):
        if n % d == 0:
            print(n, "is divisible by", d)
            break
    else:
        print(n, "is prime")

Pour 29, tous les restes sont non nuls et le else de la boucle affiche 29 is prime. Pour 21, le premier diviseur est 3 et le break saute le else de la boucle. La vérification externe traite les nombres inférieurs à 2. Sans elle, le range vide pour 1 atteindrait le else et qualifierait à tort 1 de nombre premier. Pour 2, le range est aussi vide, mais la conclusion « premier » est correcte.

Limiter les tentatives avec while et else
attempts = 0
while attempts < 3:
    guess = input("Password: ")
    if guess == "open sesame":
        print("Welcome!")
        break
    attempts += 1
else:
    print("Too many attempts.")

Une réponse correcte déclenche le break, même à la troisième tentative. Trois réponses incorrectes portent le compteur à 3 ; la condition devient fausse et le else affiche le message d’échec. Une instruction ordinaire après la boucle s’exécuterait dans les deux cas et ne les distinguerait donc pas.

Enregistrer le résultat avec un drapeau

Un drapeau est une variable booléenne qui indique si quelque chose s’est produit. Commence avec found = False, passe à True lorsqu’une correspondance apparaît, puis quitte la boucle avec break. Après la boucle, if not found: traite l’échec. Cela donne le même résultat de recherche que le else de la boucle, en conservant explicitement la trace de l’événement. Choisis une forme dont tu peux expliquer clairement l’indentation et le chemin de sortie.

Points clés

  • Le else d’une boucle s’exécute à sa fin normale et est sauté si un break interrompt cette boucle.
  • Un else aligné sur un if interne a un sens différent.
  • Même sans aucune itération, le else de la boucle est atteint.
  • Une recherche peut signaler l’échec une seule fois, après que tous les éléments ont échoué au test.
  • Un drapeau booléen peut enregistrer un résultat à utiliser après la boucle.
  • Une recherche de diviseur vide exige la règle distincte selon laquelle les nombres premiers sont supérieurs ou égaux à 2.
4

Utiliser les schémas de boucle classiques

De nombreuses tâches utilisant des boucles suivent un petit ensemble de schémas réutilisables. Un compteur indique combien de fois un test réussit, un accumulateur construit un résultat et une variable garde le maximum ou le minimum rencontré jusqu’ici. Les recherches utilisent un suivi semblable pour mémoriser une correspondance. La valeur initiale et l’endroit où elle change déterminent le sens du résultat final. Tu traiteras aussi les données vides et les ex aequo, pour lesquels un petit choix peut changer la réponse.

4.1 Construire des dénombrements, des totaux, des produits et du texte

Un accumulateur conserve un résultat entre les itérations. Un compteur est un accumulateur particulier qui augmente de 1 chaque fois qu’un événement se produit. Fixe la valeur initiale avant la boucle, mets-la à jour dans celle-ci et utilise ensuite le résultat final.

Compter des événements ou additionner des valeurs
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        count += 1
print(count)

Le test réussit pour 15, 22 et 11, donc la sortie est 3. La mise à jour ajoute 1 pour un élément qui vérifie la condition ; ajouter n ferait plutôt la somme des valeurs correspondantes.

Pour additionner tous les éléments, initialise total = 0, retire le test if, ajoute total += n directement dans le corps et affiche ensuite total. Les cinq valeurs totalisent 60. Leur moyenne est 60 / 5, ce qui donne 12.0 ; la division avec / renvoie un flottant pour ces opérandes entiers.

Pour une moyenne filtrée, mets à jour le total et le compteur sous la même condition :

total = 0
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        total += n
        count += 1
if count > 0:
    print(total / count)
else:
    print("No matching values")

Ici, le total des valeurs sélectionnées est 48 et leur nombre est 3, donc la sortie est 16.0. Diviser par la longueur de toute la liste utiliserait le mauvais groupe. La vérification du compteur traite aussi le cas d’une liste vide ou sans correspondance.

Choisir une valeur initiale adaptée à l’opération
RésultatValeur initialeMise à jour
Dénombrement0Ajouter 1 pour un événement.
Somme0Ajouter chaque valeur sélectionnée.
Produit1Multiplier par chaque valeur sélectionnée.
Texte""Joindre chaque nouveau morceau au texte accumulé.

Un produit des entiers de 1 à 5 commence à 1 et se termine à 120. En partant de 0, tous les produits resteraient égaux à 0.

L’accumulation de texte dépend aussi de l’ordre :

rev = ""
for ch in "stressed":
    rev = ch + rev
print(rev)

Chaque nouveau caractère est placé devant le texte mémorisé, ce qui produit desserts. Remplacer la mise à jour par rev = rev + ch ajoute les caractères à la fin et reconstruit stressed.

Conserver le résultat entre les itérations

Déplacer total = 0 dans une boucle de somme efface le travail précédent à chaque passage. Avec [4, 15, 22, 8, 11], réinitialiser avant chaque addition ne laisse que 11 à la fin. Initialise hors de la boucle pour que l’addition suivante utilise le sous-total précédent.

Un print dans le corps affiche le total cumulé après chaque mise à jour : 4, 19, 41, 49 et 60 dans cet exemple. Un print après la boucle n’affiche que 60. Choisis son emplacement en fonction de la sortie demandée.

Pour une simple liste stockée, sum(values) donne son total et len(values) donne son nombre d’éléments. Une boucle explicite permet de filtrer les valeurs, de suivre plusieurs résultats ensemble ou de traiter les valeurs au fur et à mesure de leur saisie.

Points clés

  • Initialise un accumulateur avant la boucle pour qu’il conserve le travail précédent.
  • Un compteur ajoute 1 par événement ; un total ajoute la valeur elle-même.
  • Commence les sommes à 0, les produits à 1 et le texte par une chaîne vide.
  • Pour une moyenne filtrée, compte et additionne les mêmes valeurs sélectionnées.
  • Vérifie que le nombre de valeurs est non nul avant de diviser.
  • Affiche dans la boucle pour obtenir les résultats cumulés et après la boucle pour obtenir le résultat final.
  • Ajouter un caractère avant ou après le texte mémorisé change son ordre.

4.2 Conserver la meilleure valeur rencontrée jusqu’ici

Pour trouver un maximum, conserve la plus grande valeur rencontrée jusqu’ici. Compare chaque nouvel élément à cette valeur mémorisée et ne la remplace que si le nouvel élément est plus grand. Le schéma du minimum fonctionne de la même façon avec la comparaison inversée.

Commencer sans inventer de valeur de donnée

None est la valeur Python qui signifie « rien pour le moment ». Elle donne au premier élément un moyen clair de devenir la meilleure valeur actuelle :

largest = None
for n in [12, -3, 25, 7]:
    if largest is None or n > largest:
        largest = n
print(largest)

Les valeurs mémorisées après chaque élément sont 12, 12, 25 et 25. Le programme affiche 25. Pour le premier élément, largest is None est vrai. Le or de Python s’arrête là, donc il ne tente pas la comparaison invalide d’un nombre avec None. Aux passages suivants, la valeur mémorisée est un nombre et la deuxième comparaison est utilisée.

Pour un minimum, commence avec smallest = None et utilise smallest is None or n < smallest. La même liste produit -3.

Commencer la recherche d’un maximum à 0 peut conduire à indiquer une valeur qui n’est jamais apparue. Pour -5, -2 et -9, aucune valeur ne dépasse 0, donc cette version garderait 0 à tort. Le maximum est -2. Commencer la recherche d’un minimum à 0 pose le problème correspondant lorsque tous les éléments sont positifs.

Si l’on sait que les données contiennent un élément, utiliser cette première valeur comme meilleure valeur initiale fonctionne aussi. Les fonctions natives traitent les listes stockées simples : max([12, -3, 25, 7]) donne 25 et min([12, -3, 25, 7]) donne -3. Une boucle personnalisée peut conserver des informations associées, comme l’endroit où la valeur est apparue.

Mémoriser la position lorsque la meilleure valeur change
largest = None
best_day = None
day = 0
for temperature in [18, 23, 21, 26, 24]:
    day += 1
    if largest is None or temperature > largest:
        largest = temperature
        best_day = day
print(largest, best_day)

Le compteur de jours avance pour chaque élément. Le meilleur jour ne change que lorsqu’un nouveau maximum apparaît. La sortie finale est 26 4, ce qui signifie une température de 26 au jour 4. Mémoriser le jour après la boucle ne ferait que conserver le dernier jour examiné.

Décider quoi faire en cas d’ex aequo

Pour [5, 8, 8, 3], le test n > largest conserve le premier 8 et sa position, 2 en comptant à partir de 1. Remplacer > par >= effectue aussi une mise à jour en cas d’égalité et conserve le dernier 8 à la position 3. Le plus grand nombre reste inchangé ; la position mémorisée diffère.

Une liste vide laisse inchangée la meilleure valeur initialisée à None. Vérifie cet état avant d’annoncer un nombre ou de l’utiliser dans un calcul. Il signifie qu’aucun élément n’a fourni de meilleure valeur.

La comparaison peut utiliser une propriété d’un élément. Pour conserver le mot le plus long parmi « poire », « banane » et « figue », compare len(word) à la longueur du mot mémorisé. « Banane » a six caractères, donc il l’emporte. Mémorise le mot lui-même lorsqu’il devient le meilleur pour que le résultat désigne l’élément, et pas seulement sa longueur.

Points clés

  • Compare chaque nouvel élément à la meilleure valeur rencontrée jusqu’ici et remplace celle-ci lorsqu’une meilleure valeur apparaît.
  • None indique qu’aucun premier élément n’a été rencontré.
  • L’évaluation en court-circuit de or évite de comparer le premier nombre à None.
  • Zéro n’est pas une valeur initiale sûre dans tous les cas pour les maximums ou les minimums.
  • Mémorise une position en même temps que la meilleure valeur correspondante.
  • Une comparaison stricte conserve la première meilleure valeur ex aequo ; accepter l’égalité conserve la dernière.

4.3 Rechercher et mémoriser une correspondance

Une recherche séquentielle vérifie les éléments dans l’ordre jusqu’à trouver une correspondance ou à épuiser les éléments. Une correspondance peut être une valeur exacte, le premier élément qui vérifie une condition ou un élément de réponse à une question d’existence ou universelle.

Mémoriser une réussite
names = ["Ana", "Ben", "Chen"]
found = False
for name in names:
    if name == "Ben":
        found = True
        break
if found:
    print("Ben is on the list")
else:
    print("Ben is not on the list")

Le drapeau commence à faux car rien n’a encore été trouvé. La première vérification, Ana, le laisse inchangé. La deuxième trouve Ben, met le drapeau à vrai et quitte la boucle. La sortie est Ben is on the list.

Le drapeau enregistre un événement sur toute la durée de la recherche. Ne le réinitialise pas à chaque élément sans correspondance. Si une boucle continue après avoir trouvé Ben et affecte found = False lorsqu’elle atteint Chen, le résultat positif est perdu. De même, « non trouvé » doit apparaître après l’échec de toutes les vérifications, pas dans un else propre à chaque élément qui annoncerait un échec pour Ana avant l’examen de Ben.

Première ou dernière correspondance

Pour [7, 4, 9, 10], le premier nombre pair est 4 et le dernier est 10. Cette boucle mémorise le premier :

match = None
for n in [7, 4, 9, 10]:
    if n % 2 == 0:
        match = n
        break
print(match)

La sortie est 4. Retire le break et chaque nouvelle correspondance écrase la précédente, laissant 10. Si rien ne correspond, la valeur mémorisée reste None. Détermine si la tâche demande l’existence, le premier élément, le dernier élément ou une position avant de décider quoi stocker.

Pour indiquer une position, maintiens un compteur qui avance pour chaque élément examiné et mémorise-le lors d’une correspondance. Précise comment les positions sont numérotées : en comptant à partir de 1, Chen est en position 3 dans la liste des noms ; la numérotation habituelle des positions en Python commence à 0.

Une réussite suffit pour l’existence ; un échec suffit pour le test universel

Une recherche d’existence commence à faux et devient vraie au premier élément qui vérifie la condition. Elle peut s’arrêter là car une réussite répond à la question.

Une recherche universelle commence à vrai et devient fausse au premier échec :

all_positive = True
for n in [3, 8, -1, 5]:
    if n <= 0:
        all_positive = False
        break
print(all_positive)

La troisième valeur, -1, réfute « toutes les valeurs sont positives », donc la sortie est False. Il n’est pas nécessaire d’examiner 5. Zéro échouerait aussi car positif signifie supérieur à zéro. S’il n’y a aucun élément, le drapeau reste vrai : aucun contre-exemple n’est apparu.

Appartenance exacte et conditions personnalisées

Pour une simple égalité, "Ben" in names donne directement True ou False. Une boucle rend visible l’évolution de l’état de la recherche et permet au test d’exprimer une condition personnalisée, comme « le premier mot de plus de cinq caractères ».

Les comparaisons de chaînes sont exactes. "ben" diffère de "Ben", et "Ben " comprend un espace final. Une recherche portant sur l’une de ces chaînes ne doit pas considérer les autres comme égales.

Points clés

  • Une recherche séquentielle examine les éléments dans l’ordre jusqu’à ce que sa règle d’arrêt soit satisfaite.
  • Initialise une fois un drapeau de recherche et conserve la réussite enregistrée.
  • N’indique « non trouvé » qu’après l’échec de la recherche complète.
  • Break conserve la première correspondance ; écraser la valeur à chaque correspondance conserve la dernière.
  • Le test d’existence s’arrête à une réussite ; le test universel s’arrête à un contre-exemple.
  • L’égalité des chaînes distingue la casse et les espaces.
5

Écrire des boucles imbriquées

Une boucle dans une autre boucle peut construire des lignes, tester des combinaisons ou répéter un travail pour chaque groupe. La boucle externe choisit un groupe ; la boucle interne effectue son travail pour ce groupe avant que la boucle externe avance. Dans cette structure, l’indentation et le placement des réinitialisations sont particulièrement importants. Tu compteras les exécutions internes, construiras une petite grille et une forme qui s’agrandit, puis suivras des sorties anticipées qui agissent sur une boucle ou sur les deux.

5.1 Lignes, combinaisons et motifs qui s’agrandissent

Une boucle imbriquée est une boucle placée dans le corps d’une autre boucle. À chaque itération externe, la boucle interne démarre et effectue son travail. La variable externe reste fixe pendant que la variable interne change.

Construire une ligne à la fois
for row in range(1, 4):
    for col in range(1, 5):
        print(row * col, end=" ")
    print()

La sortie comporte ces trois lignes, chacune avec un espace après son dernier nombre :

1 2 3 4 
2 4 6 8 
3 6 9 12 

D’abord, row vaut 1 tandis que col prend les valeurs de 1 à 4. Puis row devient 2 et la boucle interne recommence à la colonne 1. Enfin, la ligne 3 obtient les mêmes quatre colonnes. Le corps interne s’exécute douze fois.

end=" " remplace le saut de ligne habituel de print par un espace. Le print() vide termine la ligne. Il se trouve dans le corps externe mais hors du corps interne, donc il s’exécute trois fois. L’indenter d’un niveau supplémentaire placerait chaque nombre sur sa propre ligne. Supprimer son indentation ne terminerait une ligne qu’une fois, après les deux boucles.

Donne des noms distincts aux variables de boucle, comme row et col. Réutiliser le nom externe dans la boucle interne écrase la valeur nécessaire pour identifier la ligne actuelle.

Compter le travail

Lorsque chaque passage externe comporte le même nombre de passages internes, multiplie ces nombres. Trois lignes et quatre colonnes donnent douze exécutions internes. Deux boucles de 100 passages chacune donnent 10 000 exécutions internes ; trois niveaux en donnent 1 000 000. Une petite augmentation de chaque borne peut donc créer beaucoup plus de travail répété.

Si la borne interne change avec la variable externe, additionne les nombres obtenus séparément :

for row in range(1, 5):
    for _ in range(row):
        print("*", end="")
    print()

Ce code affiche :

*
**
***
****

Les longueurs des lignes sont 1, 2, 3 et 4, soit dix étoiles au total. Pour un motif de n lignes de ce type, le total est n(n+1)/2. Multiplier quatre par quatre supposerait à tort que chaque ligne comporte quatre étoiles.

Réinitialiser un résultat pour chaque groupe

Pour totaliser chaque ligne de la grille de multiplication, fixe row_total = 0 dans la boucle externe, juste avant la boucle interne. Ajoute row * col dans le corps interne et affiche row_total après la boucle interne. Les sorties sont 10, 20 et 30.

Initialiser une seule fois, avant les deux boucles, conserve aussi les totaux des lignes précédentes. Afficher après chaque ligne donne alors 10, 30 et 60. Les deux placements conservent un résultat, mais l’un conserve un résultat par ligne et l’autre un total cumulé pour toute la grille.

Parcourir des combinaisons

Deux boucles sur range(1, 7) parcourent les 36 résultats ordonnés possibles pour deux dés. La première boucle fournit le premier dé et la seconde fournit le second. Une condition dans le corps interne peut compter les couples dont la somme est 7. Six vérifient la condition : (1 ; 6), (2 ; 5), (3 ; 4), (4 ; 3), (5 ; 2) et (6 ; 1). Inverser un couple décrit un résultat ordonné différent.

Points clés

  • La boucle interne recommence à chaque itération externe.
  • Multiplie les nombres d’itérations uniquement lorsque la longueur interne reste fixe.
  • Additionne les longueurs des lignes lorsque la borne interne dépend de la ligne.
  • L’indentation détermine si une action se produit par élément, par ligne ou une seule fois au total.
  • Réinitialise un accumulateur par ligne dans la boucle externe, avant la boucle interne.
  • Des noms distincts pour les variables de boucle permettent de garder disponibles les valeurs de ligne et de colonne.

5.2 Sauter et arrêter dans des boucles imbriquées

Break et continue agissent sur la boucle la plus interne qui les contient. Dans du code imbriqué, repère cette boucle avant de prévoir la suite. Un break dans le corps interne n’arrête pas à lui seul la boucle externe.

Suivre un break interne
for a in range(1, 4):
    for b in range(1, 4):
        if b > a:
            break
        print(a, b)

Pour a = 1, le couple 1 1 s’affiche. Lorsque b devient égal à 2, le break termine cette boucle interne. La boucle externe passe à a = 2 et démarre une nouvelle boucle interne avec b égal à 1. Elle affiche 2 1 et 2 2, puis s’interrompt lorsque b vaut 3. Pour a égal à 3, toutes les valeurs de b passent. Les six lignes de sortie sont :

1 1
2 1
2 2
3 1
3 2
3 3
Arrêter les deux boucles avec un résultat enregistré

Une recherche de combinaison peut utiliser un drapeau et un break à chaque niveau :

found = False
for a in range(1, 6):
    for b in range(1, 6):
        if a * b == 12:
            found = True
            break
    if found:
        break
if found:
    print(a, b)
else:
    print("No matching pair")

Les lignes où a vaut 1 et 2 ne contiennent aucune correspondance. À la ligne 3, b atteint 4 et le produit est 12. Le break interne termine la boucle sur b ; le drapeau déclenche ensuite le break externe. La sortie finale est 3 4.

Le drapeau est initialisé avant les deux boucles, car il enregistre un résultat pour toute la recherche. Le if found: externe se place après la boucle interne mais dans le corps externe. Son indentation entraîne une vérification par ligne terminée ou interrompue.

Conserver les valeurs lorsque la recherche continue

Retirer uniquement le break externe fait continuer la recherche sur les lignes suivantes. Dans cet exemple, une correspondance ultérieure est 4 3, mais la boucle finit par examiner la ligne 5 et se termine avec a = 5 et b = 5. Afficher alors les variables de boucle donne 5 5, et non une correspondance mémorisée.

Si la tâche demande le dernier couple correspondant, mémorise best_a = a et best_b = b chaque fois qu’une correspondance apparaît. Ces variables distinctes conservent une correspondance pendant que les variables de boucle continuent de changer. Vérifie le drapeau avant de les afficher lorsqu’il est possible qu’aucune correspondance n’existe.

Sauter un couple, puis poursuivre la ligne

Un continue dans la boucle interne passe à sa valeur interne suivante. Pour deux boucles parcourant les nombres de 1 à 4, if a == b: continue avant le traitement saute quatre couples de valeurs égales. Douze couples ordonnés restent sur les seize de départ.

Un if peut aussi sélectionner des couples sans saut. Deux dés ont trois couples ordonnés dont la somme est 10 : (4 ; 6), (5 ; 5) et (6 ; 4). Une condition dans le corps interne les repère.

Points clés

  • Un break interne ne termine que la boucle interne ; un continue interne ne saute que le passage interne en cours.
  • Un drapeau et un second break peuvent permettre une sortie anticipée des deux boucles.
  • Place la vérification externe du drapeau après la boucle interne et dans le corps externe.
  • Les variables de boucle continuent de changer après une correspondance, sauf si la recherche s’arrête ; mémorise les valeurs correspondantes si nécessaire.
6

Suivre l’exécution des boucles et les déboguer

Une boucle peut sembler correcte tout en parcourant une mauvaise dernière valeur, en ajoutant une valeur trop tôt ou en affichant un séparateur de trop. Le traçage rend son comportement réel visible : note chaque changement dans l’ordre d’exécution et compare-le au résultat attendu. Les tout petits exemples sont particulièrement utiles car tu peux vérifier chaque passage. Tu distingueras les exécutions du corps des vérifications de la condition, examineras les valeurs finales et corrigeras les bornes à partir des résultats d’un suivi.

6.1 Suivre les valeurs dans l’ordre d’exécution

Le traçage consiste à exécuter un programme à la main, une instruction à la fois, en notant ses valeurs et sa sortie. Un tableau de suivi donne une colonne à chaque variable pertinente. Indique si une valeur est notée avant ou après une mise à jour pour que les lignes aient un sens clair.

Suivre une boucle while
total = 0
i = 1
while i <= 4:
    total = total + i
    i = i + 1
print(total)

Commence avec total = 0 et i = 1. Vérifie la condition avant d’entrer dans le corps. À chaque vérification vraie, effectue l’addition avant l’incrémentation :

Passagei avanttotal aprèsi après
1112
2233
3364
44105

La vérification suivante est 5 <= 4, qui est fausse. Il n’y a pas de cinquième ligne pour le corps. Le corps s’exécute quatre fois, la condition est vérifiée cinq fois et le print après la boucle affiche 10 une fois. Les valeurs finales sont i = 5 et total = 10.

Distingue la vérification qui échoue d’une itération : elle termine la boucle sans exécuter son corps. Si la condition initiale est déjà fausse, il n’y a aucune ligne pour le corps et les variables gardent leurs valeurs initiales.

L’ordre des instructions change le résultat

Si l’incrémentation est déplacée avant l’addition, chaque passage utilise la nouvelle valeur de i. Les quatre additions deviennent 2, 3, 4 et 5, ce qui donne 14. La condition teste toujours i au début, avant cette incrémentation. Suivre seulement les valeurs à l’en-tête ne montrerait pas quelle valeur l’addition utilise réellement.

Lorsque le corps contient un break ou un continue, arrête de suivre ses lignes restantes dès que le saut se produit. Avec continue, reviens à l’en-tête ou à l’élément suivant ; avec break, poursuis après la boucle. Un suivi doit emprunter ces chemins et ne pas simplement copier toutes les instructions du corps dans chaque ligne.

Suivre les caractères et les boucles imbriquées

Une boucle for affecte l’élément suivant au début de son passage :

rev = ""
for ch in "abc":
    rev = ch + rev
print(rev)

Le texte mémorisé devient "a", puis "ba", puis "cba". La sortie est cba. Note le texte réel, y compris son ordre, au lieu d’écrire seulement qu’« un caractère a été ajouté ».

Pour des boucles imbriquées, utilise une ligne pour chaque itération interne. Note les deux variables de boucle pour que la valeur externe se répète sur les lignes qui lui correspondent. Dans une boucle à deux lignes et trois colonnes, les valeurs de ligne sont 1, 1, 1, 2, 2, 2 tandis que les valeurs de colonne sont 1, 2, 3, 1, 2, 3.

Produire un suivi avec print

Un print("i =", i, "total =", total) temporaire après les deux mises à jour dans la boucle de somme affiche i et total à la fin de chaque passage. Le placer avant les mises à jour montre un moment différent. Compare l’emplacement du print aux intitulés de colonnes de ton tableau. Supprime les affichages de diagnostic après avoir corrigé le code afin qu’ils ne deviennent pas une sortie supplémentaire du programme.

Pour une question « qu’est-ce qui s’affiche ? », ne note que les instructions qui affichent réellement quelque chose. Le changement d’une variable n’est pas en lui-même une sortie ; plusieurs mises à jour peuvent avoir lieu avant un seul affichage final.

Points clés

  • Suis les instructions dans l’ordre exact où Python les exécute.
  • Indique si les valeurs notées sont prises avant ou après la mise à jour concernée.
  • Une boucle while qui se termine normalement vérifie sa condition une fois de plus qu’elle n’exécute son corps.
  • Break et continue modifient les instructions qui apparaissent dans un suivi.
  • Suis la sortie séparément des changements de variables.

6.2 Corriger les bornes et les séparateurs

Une erreur de décalage d’une unité parcourt une valeur de trop ou pas assez, ou décale les valeurs parcourues d’une unité. Elle provient souvent de la fin exclue d’un range, d’un choix entre < et <=, ou de la valeur initiale d’un compteur.

Indiquer les bornes souhaitées

Pour additionner les nombres de 1 à 10 inclus, range(1, 10) est trop court. Il ne fournit que les nombres de 1 à 9, ce qui donne un total de 45. range(1, 11) inclut 10 et donne 55. Pour un range croissant d’entiers avec un pas de 1, utilise la fin n + 1 pour inclure la valeur finale n.

Avec un pas par défaut de 1, range(a, b) fournit b - a valeurs lorsque b est supérieur à a. Un break peut tout de même terminer la boucle avant qu’elles soient toutes utilisées. Avec d’autres tailles de pas, énumère les valeurs d’un petit cas ou utilise len(range(...)) pour vérifier leur nombre.

Le nombre d’itérations d’une boucle while dépend à la fois de son début, de sa comparaison et de sa mise à jour. Pour un entier positif ou nul n, avec i += 1 à la fin de chaque passage et sans sortie anticipée :

Début et conditionExécutions du corps
i = 0; while i < n:n
i = 1; while i <= n:n
i = 0; while i <= n:n + 1

Pour n égal à 0, les deux premières sautent le corps. La troisième s’exécute une fois avec i égal à 0. Ce tout petit cas révèle le passage supplémentaire sans suivre une longue boucle.

Bornes d’un compte à rebours

En partant de 5 et en affichant avant n -= 1, while n > 0: affiche cinq valeurs, en terminant à 1. Utiliser n >= 0 en affiche six, en terminant à 0. Les ranges décroissants correspondants sont range(5, 0, -1) et range(5, -1, -1).

Vérifie aussi l’ordre. Mettre à jour un compteur avant de l’utiliser peut décaler chaque valeur même lorsque la boucle effectue le nombre de passages attendu. Un suivi doit noter les première et dernière valeurs réellement utilisées par le calcul.

Les éléments et les espaces qui les séparent

Une erreur de l’intervalle confond le nombre d’éléments et le nombre d’espaces entre eux. Cinq sections de clôture nécessitent six poteaux. Cinq nombres affichés ne nécessitent que quatre séparateurs entre eux.

for i in range(1, 6):
    print(i, end="-")

Ce code affiche 1-2-3-4-5-, avec un tiret final non souhaité. Chaque print ajoute un tiret après un élément, même le dernier.

Une correction consiste à afficher le premier élément séparément, puis à afficher un séparateur avant chaque élément suivant :

print(1, end="")
for i in range(2, 6):
    print("-" + str(i), end="")
print()

La sortie est 1-2-3-4-5. La boucle affiche quatre morceaux composés d’un tiret et d’un nombre, et le print vide final termine la ligne. Cette version a un premier élément connu ; dans le cas général de données vides, il faut aussi sauter l’affichage de ce premier élément.

Vérifier la correction avec de petits cas

Note la première valeur, la dernière valeur et le nombre de passages attendus avant de modifier le code. Choisis les bornes et la comparaison en conséquence, puis suis une courte exécution. Vérifie aussi les cas de zéro et d’un élément ainsi qu’un cas ordinaire. Zéro révèle un travail qui devrait être sauté ; un révèle un séparateur inutile ou une mise à jour supplémentaire. Modifie la borne qui provoque l’erreur pour que les répétitions du code correspondent à la tâche.

Points clés

  • Vérifie ensemble le début, la dernière valeur nécessaire et le nombre de passages.
  • Un range croissant de pas un inclut n lorsque sa fin est n + 1.
  • La comparaison et la mise à jour d’une boucle while déterminent ensemble son nombre d’itérations.
  • Les ranges décroissants excluent eux aussi leur fin.
  • Le nombre d’éléments et le nombre de séparateurs diffèrent d’une unité pour une séquence non vide.
  • Suis de tout petits cas, en particulier zéro et un élément, après avoir corrigé une borne.

Boucles en Python : exemples

6 Leçons Interactives

1

Faire progresser et arrêter une boucle while

15 étapes
Suivre les changements de valeurs, corriger une cible inaccessible et recueillir des saisies sans compter le signal d’arrêt.
  1. 1
    IntroductionRépéter demande une décision

    Un programme qui continue à demander une réponse a besoin d’une règle pour décider d’une nouvelle tentative. Une boucle while place cette règle dans une condition vérifiée avant chaque passage.

    Tu suivras un compte à rebours, découvriras pourquoi une valeur qui change peut tout de même manquer sa sortie et construiras une boucle de saisie dont le signal d’arrêt n’atteint jamais les calculs.

  2. 2
    ExplicationPréparer le compte à rebours

    Une boucle while répète un corps indenté tant que sa condition est vraie. Donne une valeur initiale à la variable qui la contrôle avant l’en-tête :

    remaining = 4
    while remaining > 0:
        print(remaining)
        remaining -= 1
    

    Ici, la valeur initiale est 4, le test vérifie s’il en reste et la mise à jour soustrait 1. L’affichage a lieu avant cette soustraction.

  3. 3
    ExempleExécuter les deux premiers passages

    Le premier test utilise remaining égal à 4 et réussit. Le print affiche 4, puis la mise à jour fait passer remaining à 3. Python revient à l’en-tête.

    Le test suivant utilise 3 : le corps affiche donc 3 et fait passer la valeur à 2. La condition n’est pas vérifiée à nouveau entre le print et la mise à jour ; ces instructions s’exécutent dans l’ordre où elles sont écrites.

  4. 4
    ExempleAtteindre la vérification qui échoue

    Les deux passages suivants affichent 2 et 1. Après la dernière mise à jour, remaining vaut 0. Le test remaining > 0 est maintenant faux, donc le corps ne s’exécute pas à nouveau.

    Quatre valeurs ont été affichées, mais l’en-tête a été vérifié cinq fois : quatre vérifications vraies et une dernière vérification fausse. En partant de remaining égal à 0, le corps ne se serait exécuté aucune fois.

  5. 5
    DéfiChanger l’ordre

    Dans le compte à rebours, déplace remaining -= 1 avant print(remaining). Quelles sont les quatre valeurs affichées en partant de 4 ?

    ---reveal---

    La sortie est 3, 2, 1 et 0. Chaque test accepte toujours l’ancienne valeur positive, mais le print utilise la valeur mise à jour. Rendre la condition fausse pendant l’exécution du corps n’interrompt pas celui-ci ; l’en-tête la testera au retour suivant.

  6. 6
    ConseilTrouver pourquoi la boucle ne progresse pas

    Si un compte à rebours continue d’afficher 4, cherche la mise à jour et vérifie son indentation. Une mise à jour après la boucle ne peut pas aider celle-ci à se terminer, car elle n’a pas encore été atteinte.

    Si la mise à jour ajoute 1 sous while remaining > 0:, la valeur s’éloigne de la sortie. Un print temporaire après la mise à jour montre si la valeur change dans le sens prévu.

  7. 7
    ExempleUne valeur peut changer sans atteindre la cible
    n = 2
    while n != 7:
        print(n)
        n += 2
    

    Ce code parcourt 2, 4, 6, 8, puis les nombres pairs suivants. La variable change à chaque fois, mais aucune de ces valeurs n’est égale à 7. Si la tâche consiste à afficher les valeurs paires inférieures à 7, while n < 7: convient : la vérification suivante échoue après que n est devenu égal à 8.

  8. 8
    DéfiCorriger une cible sautée

    Une boucle commence à 5, affiche n tant que n != 12 et ajoute 2 à la fin. La tâche consiste à afficher ses valeurs impaires inférieures à 12. Pourquoi échoue-t-elle et quel en-tête la corrige ?

    ---reveal---

    Les valeurs restent impaires et ne sont jamais égales à 12. Utilise while n < 12:. La boucle affiche 5, 7, 9 et 11, puis s’arrête lorsque n atteint 13. Remplacer la mise à jour par 1 modifierait la suite de nombres impairs demandée.

  9. 9
    Point cléCompter les pas décimaux avec des entiers

    Des additions décimales répétées peuvent manquer une valeur cible : dix additions de 0.1 à 0.0 donnent 0.9999999999999999.

    Pour une suite fixée de dixièmes, laisse des entiers contrôler les passages :

    for i in range(11):
        x = i / 10
        print(x)
    

    Ce code calcule onze valeurs de 0,0 à 1,0 sans demander à un nombre décimal stocké d’atteindre une égalité exacte pour s’arrêter.

  10. 10
    ExplicationLire avant de tester

    Une sentinelle signifie « plus de données ». Pour une collecte de nombres strictement positifs, 0 peut marquer la fin. Une lecture initiale obtient le premier nombre avant la boucle afin que son en-tête ait une valeur à tester.

    total = 0
    number = int(input("Count (0 to stop): "))
    

    La conversion compte : input renvoie du texte, tandis que cette boucle comparera des nombres.

  11. 11
    ExempleTraiter puis lire la valeur suivante
    while number != 0:
        total += number
        number = int(input("Count (0 to stop): "))
    print(total)
    

    Ajoute ce code sous l’initialisation. Les saisies 6, 9 et 0 ajoutent 6 puis 9, ce qui laisse un total de 15. Le nouveau 0 échoue à la vérification suivante de l’en-tête avant d’être ajouté. Sans la dernière lecture dans le corps, la première valeur serait traitée à répétition.

  12. 12
    LienNe rejeter que les réponses inacceptables

    La collecte de saisies s’arrête à une valeur particulière. La validation, elle, se répète jusqu’à ce qu’une valeur soit acceptable. Pour accepter un entier de 1 à 5 inclus, répète tant que choice < 1 or choice > 5 et lis un nouveau choix dans le corps.

    La condition doit décrire l’une ou l’autre des violations. Utiliser and ne rejetterait rien : un nombre ne peut pas être à la fois inférieur à 1 et supérieur à 5.

  13. 13
    DéfiTraiter les données et le signal d’arrêt

    Les scores sont positifs ou nuls et -1 est la sentinelle. Pour les saisies 0, 9 et -1, quels total et nombre de valeurs une boucle de moyenne doit-elle utiliser ? Et si -1 arrive en premier ?

    ---reveal---

    Utilise le total 9 et le nombre de valeurs 2, ce qui donne une moyenne de 4,5. Zéro est une donnée, tandis que -1 est exclu. Si -1 est le premier, le nombre de valeurs reste égal à 0 ; indique qu’il n’y a pas de données au lieu de diviser. Le test de la sentinelle doit précéder les deux mises à jour.

  14. 14
    DéfiVérifier un parcours complet de saisie

    Une boucle avec lecture initiale se répète selon text != 0, mais text provient directement de input. Saisir 0 ne l’arrête pas. Explique le problème de type et donne deux corrections valides.

    ---reveal---

    Input fournit "0", une chaîne qui diffère de l’entier 0. Compare avec "0" pour garder une sentinelle textuelle, ou convertis la saisie avec int avant de la comparer à 0. La première lecture comme les lectures suivantes doivent respecter ce choix.

  15. 15
    RécapitulatifSuivre un chemin avant l’exécution

    Pour une nouvelle boucle while, suis un passage ordinaire, le passage d’arrêt prévu et un cas qui ne devrait s’exécuter aucune fois. Sur chaque chemin qui se répète, repère la prochaine saisie ou mise à jour qui permet de progresser.

    Pour un calcul sur des saisies, garde le test d’arrêt avant le traitement et décide comment signaler l’absence de données. Ces vérifications permettent de repérer à la fois une boucle bloquée et un résultat trompeur.

2

Laisser les éléments et les ranges guider la répétition

13 étapes
Parcourir directement des valeurs, construire des ranges croissants et décroissants et comparer une boucle de comptage for à while.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDonner un passage à chaque élément
  2. 2
    ExplicationLa variable contient l’élément actuel
  3. 3
    ExempleLes caractères comprennent les espaces
  4. 4
    DéfiRéaffecter la variable d’élément
  5. 5
    ExplicationCommencer à zéro lorsqu’une seule fin est donnée
  6. 6
    ExempleChoisir un pas et l’examiner
  7. 7
    ConseilLes valeurs décroissantes demandent un pas négatif
  8. 8
    DéfiInclure la dernière valeur demandée
  9. 9
    LienAdapter la règle d’arrêt à la tâche
  10. 10
    ExempleConvertir un compte à rebours
  11. 11
    DéfiUne affectation ultérieure ne reconstruit pas le range
  12. 12
    DéfiConvertir la borne et garder les données
  13. 13
    RécapitulatifVérifier d’abord les valeurs fournies
3

Décider de la suite après une correspondance ou un saut

14 étapes
Suivre break, continue et le else d’une boucle dans des recherches et des boucles de saisie.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionTrois suites différentes
  2. 2
    ExplicationBreak quitte la boucle qui le contient
  3. 3
    ExempleLire avant une sortie au milieu du corps
  4. 4
    DéfiRepérer la sortie
  5. 5
    ExplicationContinue ne quitte que ce passage
  6. 6
    ConseilUne mise à jour sautée peut bloquer while
  7. 7
    Point cléPass ne saute rien
  8. 8
    DéfiPrévoir trois versions
  9. 9
    ExplicationElse appartient à la boucle
  10. 10
    Point cléZéro passage se termine quand même normalement
  11. 11
    LienEnregistrer explicitement le même événement
  12. 12
    DéfiRéussir à la dernière tentative autorisée
  13. 13
    DéfiCombiner saut et fin normale
  14. 14
    RécapitulatifRepérer la destination d’un saut
4

Construire et conserver le résultat d’une boucle

14 étapes
Suivre une moyenne filtrée, une recherche de la meilleure valeur et des décisions d’existence et universelles.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionUn résultat survit au passage suivant
  2. 2
    ExplicationCompter et totaliser le même groupe
  3. 3
    ExempleTerminer le calcul de la moyenne après la collecte
  4. 4
    Point cléLes valeurs initiales correspondent à l’opération
  5. 5
    DéfiTrouver l’erreur de réinitialisation
  6. 6
    ExplicationPrendre le premier élément comme première meilleure valeur
  7. 7
    ExempleMémoriser la position de la meilleure valeur
  8. 8
    DéfiTraiter les ex aequo et les données vides
  9. 9
    ExplicationUn drapeau de recherche mémorise un événement
  10. 10
    ExempleLe test universel s’arrête à un contre-exemple
  11. 11
    DéfiConserver le premier ou le dernier
  12. 12
    LienChoisir l’état nécessaire à la tâche
  13. 13
    DéfiDécrire un résultat filtré vide
  14. 14
    RécapitulatifDéfinir le résultat avant de choisir les mises à jour
5

Construire des lignes et contrôler une recherche imbriquée

11 étapes
Suivre les redémarrages internes, le travail croissant, les résultats par ligne et une sortie des deux boucles.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionUne exécution interne complète par passage externe
  2. 2
    ExempleGarder la ligne fixe
  3. 3
    ExplicationTerminer chaque ligne au niveau externe
  4. 4
    Point cléCompter le travail interne fixe et croissant
  5. 5
    DéfiRéinitialiser un résultat par ligne
  6. 6
    ExplicationUn break interne n’arrête pas les lignes
  7. 7
    ExempleTransmettre la réussite à la décision externe
  8. 8
    ConseilNe pas confondre les variables finales avec une correspondance mémorisée
  9. 9
    DéfiRetirer une sortie
  10. 10
    DéfiCombiner un filtre et une borne croissante
  11. 11
    RécapitulatifSuivre une ligne avant de multiplier les nombres d’itérations
6

Remonter d’une erreur de borne à sa cause

10 étapes
Noter les mises à jour dans l’ordre, distinguer les vérifications des passages et corriger les séparateurs de sortie.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionRendre le travail réel visible
  2. 2
    ExplicationChoisir quand noter chaque valeur
  3. 3
    ExempleSuivre les trois mises à jour
  4. 4
    DéfiDéplacer l’incrémentation
  5. 5
    ConseilUtiliser un print comme point de suivi
  6. 6
    ExempleLaisser zéro révéler le passage supplémentaire
  7. 7
    DéfiVérifier les deux extrémités d’un compte à rebours
  8. 8
    ExplicationSéparer les éléments des espaces entre eux
  9. 9
    DéfiExaminer une correction complète
  10. 10
    RécapitulatifVérifier les extrémités prévues

Boucles en Python : QCM

50 Questions Pratiques en 5 séries

Série 1 : Garder le contrôle des saisies et des résultats10 Questions Pratiques

Question 1 sur 10

Qu’affiche ce programme ?

n = 1
while n > 0:
    n -= 1
    print("Inside")
print(n)
  1. Seulement 0
  2. Seulement Inside
  3. Inside, puis 0
  4. Inside à répétition
Afficher la réponseMasquer la réponse
Réponse : C
La condition est vraie lorsque le corps commence avec n égal à 1. Soustraire 1 n’interrompt pas le passage en cours, donc le corps affiche quand même « Inside » ; le test suivant est faux et le print final affiche 0. Sauter ce print interne demanderait une autre instruction de contrôle.

Question 2 sur 10

Une réponse textuelle doit être exactement « yes » ou « no ». Quelle condition while repose la question pour toute réponse inacceptable et s’arrête pour l’une ou l’autre des réponses acceptées ?
  1. answer != "yes" and answer != "no"
  2. answer != "yes" or answer != "no"
  3. answer == "yes" or answer == "no"
  4. answer == "yes" and answer == "no"
Afficher la réponseMasquer la réponse
Réponse : A
Une réponse inacceptable diffère des deux chaînes acceptées, donc les deux tests d’inégalité doivent être vrais pour répéter. Avec or entre eux, même « yes » entraîne une répétition car cette réponse diffère de « no ». La condition décrit les réponses à rejeter, pas celles à accepter.

Question 3 sur 10

Combien d’éléments range(7, 2) fournit-il ?
  1. 2
  2. 5
  3. 6
  4. 0
Afficher la réponseMasquer la réponse
Réponse : D
Avec deux arguments, range utilise le pas positif par défaut de 1. Partir de 7 et monter ne peut pas fournir une valeur inférieure à la fin exclue de 2, donc le range est vide. Un nombre de 5 conviendrait à un range décroissant avec un pas négatif explicite.

Question 4 sur 10

Qu’affiche ce programme ?

for n in [2, 5, 8]:
    if n == 5:
        continue
    print(n)
  1. Seulement 2
  2. 2, puis 8
  3. 2, puis 5, puis 8
  4. Seulement 8
Afficher la réponseMasquer la réponse
Réponse : B
Lorsque n vaut 5, continue saute le print et commence le passage suivant, où n devient égal à 8. La valeur précédente 2 a déjà été affichée, donc la sortie est 2 et 8. S’arrêter après 2 serait le comportement de break au même endroit, pas celui de continue.

Question 5 sur 10

Qu’affiche ce programme ?

for n in []:
    if n == 7:
        break
else:
    print("Absent")
  1. Absent une fois
  2. Absolument rien
  3. Absent sept fois
  4. Un message TypeError
Afficher la réponseMasquer la réponse
Réponse : A
La liste est vide, donc le corps ne s’exécute jamais et aucun break ne se produit. L’épuisement normal de la liste atteint le else de la boucle et affiche « Absent » une fois. Else ne nécessite pas au moins une exécution du corps ; la distinction décisive ici est de savoir si un break a terminé la boucle.

Question 6 sur 10

Quelle valeur initiale permet à cette boucle de multiplier correctement 2, 3 et 4 ?

product = ___
for n in [2, 3, 4]:
    product *= n
print(product)
  1. 0
  2. 2
  3. 1
  4. 24
Afficher la réponseMasquer la réponse
Réponse : C
Commencer à 1 laisse le premier facteur inchangé, puis la multiplication construit 2, 6 et 24. Commencer à 0 garderait le résultat à zéro à chaque passage. Commencer à 2 ajouterait un facteur supplémentaire de 2 avant le traitement des données indiquées, ce qui produirait 48.

Question 7 sur 10

Une recherche de maximum commence avec largest = 0 et ne remplace cette valeur que lorsqu’un élément est plus grand. Quelle valeur indique-t-elle à tort pour [-8, -3, -6] ?
  1. -8
  2. -6
  3. -3
  4. 0
Afficher la réponseMasquer la réponse
Réponse : D
Aucun des trois éléments négatifs n’est supérieur à la valeur initiale 0, donc la variable reste à 0 même si 0 ne figure pas dans les données. Le maximum réel est -3. Commencer avec None et accepter le premier élément évite d’inventer un candidat initial plus grand.

Question 8 sur 10

Cette recherche ne contient pas de break. Qu’affiche-t-elle et pourquoi ?

found = False
for label in ["East", "West", "North"]:
    if label == "West":
        found = True
    else:
        found = False
print(found)
  1. True, car un drapeau vrai ne peut plus changer.
  2. False, car le dernier élément remet le drapeau à faux.
  3. False, car West n’est pas le premier élément.
  4. True, car la boucle s’arrête à la valeur recherchée.
Afficher la réponseMasquer la réponse
Réponse : B
L’itération sur West met found à vrai, mais l’itération suivante sur North exécute le else et le remet à faux. Un drapeau de recherche doit conserver le fait qu’une correspondance s’est produite ; supprime cette réinitialisation ou utilise break en cas de réussite. Trouver une correspondance n’arrête pas une boucle si son code ne le prévoit pas.

Question 9 sur 10

Combien de couples sont affichés ?

for a in range(3):
    for b in range(4):
        if b == 2:
            break
        print(a, b)
  1. 2
  2. 9
  3. 6
  4. 12
Afficher la réponseMasquer la réponse
Réponse : C
Pour chaque valeur de a, les valeurs 0 et 1 de b s’affichent, tandis que b égal à 2 déclenche le break interne. La boucle externe s’exécute quand même pour les trois valeurs de a, ce qui donne deux affichages par ligne et six au total. Un nombre de deux appliquerait à tort le break interne aux deux boucles.

Question 10 sur 10

Un compteur commence avec i égal à 0. La boucle utilise while i <= n: et ajoute 1 à la fin de chaque passage, sans sortie anticipée. Pour tout entier positif ou nul n, combien d’exécutions du corps ont lieu ?
  1. n + 1
  2. n
  3. n - 1
  4. 2n
Afficher la réponseMasquer la réponse
Réponse : A
Le corps utilise les valeurs de i de 0 à n, les deux bornes incluses, donc il y a n + 1 passages. La boucle habituelle à n passages commence à 0 et teste i < n ; l’égalité supplémentaire ajoute le passage où i est égal à n. Pour n égal à 0, cette boucle s’exécute quand même une fois.
Série 2 : Suivre les premières étapes d’une boucle10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Qu’affiche ce programme ?

n = 0
while n > 0:
    print("Go")
    n -= 1
print("End")
  1. Go, puis End
  2. Seulement End
  3. Absolument rien
  4. Go à répétition
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Pourquoi cette boucle continue-t-elle d’afficher des valeurs ?

n = 2
while n != 9:
    print(n)
    n += 2
  1. Elle parcourt tous les entiers mais saute le test.
  2. Elle remet n à 2 avant chaque comparaison.
  3. Elle cesse de mettre n à jour après avoir dépassé 9.
  4. Elle parcourt des valeurs paires et n’atteint jamais 9.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une boucle lit des scores positifs ou nuls et utilise -1 pour s’arrêter. Les saisies sont 12, 0, 18, -1. Quelle moyenne doit-elle indiquer, sans la sentinelle ?
  1. 10.0
  2. 7.25
  3. 15.0
  4. 9.666666666666666
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Combien de fois le corps de cette boucle s’exécute-t-il ?

for ch in "up! ":
    print(ch)
  1. 2
  2. 3
  3. 4
  4. 5
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Quelles valeurs contient list(range(3, 12, 4)) ?
  1. [3, 7]
  2. [3, 7, 11]
  3. [3, 7, 11, 15]
  4. [4, 8, 12]
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un affichage doit montrer 8, 6, 4, 2, 0 dans cet ordre. Quel range fournit exactement ces valeurs ?
  1. range(8, -1, -2)
  2. range(8, 0, -2)
  3. range(8, -2, 2)
  4. range(8, 1, -2)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Qu’affiche ce programme ?

for n in [5, 11, 14, 18]:
    if n % 2 == 0:
        print(n)
        break
print("Finished")
  1. 14, puis 18, puis Finished
  2. 5, puis Finished
  3. Seulement 14
  4. 14, puis Finished
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Qu’affiche ce programme ?

count = 0
for amount in [6, 13, 9, 17]:
    if amount >= 10:
        count += 1
print(count)
  1. 4
  2. 30
  3. 2
  4. 17
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Combien de fois le print interne s’exécute-t-il ?

for row in range(2):
    for col in range(5):
        print("seat")
  1. 10
  2. 7
  3. 5
  4. 25
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Quelles sont les valeurs finales de i et de total ?

i = 1
total = 0
while i < 5:
    i += 1
    total += i
  1. i vaut 4 ; total vaut 10.
  2. i vaut 5 ; total vaut 14.
  3. i vaut 5 ; total vaut 10.
  4. i vaut 6 ; total vaut 20.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 3 : Choisir les bornes et conserver les résultats de recherche10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un programme doit afficher les dixièmes de 0,0 à 1,0 inclus. Quelle solution évite de contrôler la boucle avec des additions répétées en virgule flottante et une égalité exacte ?
  1. Initialiser x à 0,0 et répéter jusqu’à x == 1.0.
  2. Compter i de 0 à 10 inclus et afficher i / 10.
  3. Initialiser x à 0,0 et répéter tant que x != 1.0.
  4. Compter i de 0 à 9 inclus et afficher i / 10.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Quelle dernière ligne ce programme affiche-t-il ?

values = [4, 7]
for value in values:
    value *= 3
print(values)
  1. [12, 21]
  2. [21, 21]
  3. [4, 7, 21]
  4. [4, 7]
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Quel range fournit exactement les entiers multiples de 3, supérieurs à -6 et inférieurs ou égaux à 6, dans l’ordre décroissant ?
  1. range(6, -6, -3)
  2. range(6, -7, -3)
  3. range(3, -6, -3)
  4. range(6, -3, -3)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Combien de fois cette boucle affiche-t-elle une valeur ?

limit = 4
for i in range(limit):
    limit = 1
    print(i)
  1. 1
  2. 3
  3. 4
  4. 5
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Quel est le premier nombre affiché ?

for n in range(32, 50):
    if n % 6 == 0:
        print(n)
        break
  1. 32
  2. 42
  3. 36
  4. 48
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Que se passe-t-il à l’exécution de ce programme ?

n = 1
for divisor in range(2, n):
    if n % divisor == 0:
        break
else:
    print("Prime")
  1. Il n’affiche rien car le range est vide.
  2. Il affiche Prime et classe 1 à tort comme premier.
  3. Il lève une erreur car le début du range dépasse sa fin.
  4. Il trouve le diviseur 1 et saute le bloc else.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Le code utilise des positions numérotées à partir de 1. Qu’affiche-t-il ?

largest = None
best_position = None
position = 0
for n in [9, 14, 6, 14, 8]:
    position += 1
    if largest is None or n >= largest:
        largest = n
        best_position = position
print(best_position)
  1. 2
  2. 5
  3. 3
  4. 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un test vérifiant que toutes les valeurs sont strictement positives commence par all_positive = True, le met à False, puis quitte la boucle à la première valeur n <= 0. Pour [2, 7, 0, 9, -4], quels résultat et nombre d’éléments examinés donne-t-il ?
  1. False après 3 éléments
  2. False après 5 éléments
  3. True après 2 éléments
  4. True après 3 éléments
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Combien d’étoiles ce programme affiche-t-il au total ?

for row in range(1, 6):
    for _ in range(row):
        print("*", end="")
    print()
  1. 10
  2. 15
  3. 20
  4. 25
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une boucle doit additionner tous les entiers de 1 à 7 inclus. Quel range doit fournir ses valeurs ?
  1. range(1, 7)
  2. range(0, 7)
  3. range(2, 8)
  4. range(1, 8)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 4 : Suivre les mises à jour, les filtres et les sorties imbriquées10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Combien de fois le corps s’exécute-t-il et quelle est la valeur finale de amount ?

amount = 3
while amount < 40:
    amount *= 2
  1. 3 passages ; amount vaut 24.
  2. 4 passages ; amount vaut 40.
  3. 5 passages ; amount vaut 96.
  4. 4 passages ; amount vaut 48.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un entier positif ou nul est d’abord saisi. La boucle ci-dessous doit rejeter les valeurs hors de l’intervalle de 2 à 8, les deux bornes étant acceptées. Quel est le problème dans sa condition ?

value = int(input("Value: "))
while value < 2 and value > 8:
    value = int(input("Value: "))
  1. Elle n’accepte que les bornes ; remplace < par <=.
  2. Elle ne rejette rien ; remplace and par or.
  3. Elle rejette toute valeur ; remplace and par or.
  4. Elle omet la dernière lecture ; déplace input avant while.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Combien de voyelles cette boucle compte-t-elle ?

count = 0
for ch in "Orbit":
    if ch in "aeiou":
        count += 1
print(count)
  1. 1
  2. 2
  3. 0
  4. 5
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Les valeurs textuelles saisies sont « 6 », « 4 », « stop ». Qu’affiche ce programme après les invites ?

total = 0
while True:
    text = input("Amount or stop: ")
    if text == "stop":
        break
    total += int(text)
print(total)
  1. 4
  2. Un message ValueError
  3. 10
  4. 6
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Qu’affiche ce programme avant de rester bloqué ?

i = 0
while i < 4:
    if i == 1:
        continue
    print(i)
    i += 1
  1. 0, puis 1
  2. Seulement 0
  3. 0, puis 2, puis 3
  4. Absolument rien
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Qu’affiche ce programme ?

for n in [3, 8, 5]:
    total = 0
    total += n
print(total)
  1. 16
  2. 13
  3. 0
  4. 5
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Qu’affiche ce programme ?

match = None
for n in [9, 12, 7, 16, 5]:
    if n % 4 == 0:
        match = n
print(match)
  1. 12
  2. 5
  3. 16
  4. None
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Combien de couples sont affichés ?

for a in range(1, 4):
    for b in range(1, 4):
        if a == b:
            continue
        print(a, b)
  1. 6
  2. 3
  3. 9
  4. 2
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Quelle est la valeur finale de total ?

total = 0
for n in range(2, 7):
    if n == 4:
        continue
    total += n
    if total > 9:
        break
  1. 5
  2. 14
  3. 16
  4. 10
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un affichage comporte 6 valeurs sur une ligne, avec une virgule uniquement entre deux valeurs voisines. Combien de virgules doit-il afficher ?
  1. 6
  2. 5
  3. 7
  4. 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 5 : Combiner les schémas de boucle et tester les cas limites10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une tâche demande toutes les valeurs impaires inférieures à 20 à partir de 3. Ce code ne s’arrête jamais. Quelle correction conserve les valeurs à afficher demandées ?

n = 3
while n != 20:
    print(n)
    n += 2
  1. Utiliser while n <= 21:.
  2. Remplacer la valeur initiale par 2.
  3. Utiliser while n < 20:.
  4. Remplacer la mise à jour par n += 1.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un utilisateur saisit un entier n, puis un programme doit afficher « Ready » exactement n fois pour n positif ou nul. Quel en-tête de boucle exprime directement ce nombre ?
  1. for _ in range(n):
  2. while n >= 0:
  3. for _ in n:
  4. for _ in range(n + 1):
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Les deux boucles affichent 4, 2. Quelles valeurs finales ont leurs variables de boucle ?

for a in range(4, 0, -2):
    print(a)
b = 4
while b > 0:
    print(b)
    b -= 2
  1. a vaut 0 ; b vaut 0.
  2. a vaut 2 ; b vaut 2.
  3. a vaut 0 ; b vaut -2.
  4. a vaut 2 ; b vaut 0.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Dans cette boucle, qu’est-ce qui s’affiche ?

for n in [3, 6, 9]:
    if n == 6:
        pass
    print(n)
  1. 3, puis 9
  2. 3, puis 6, puis 9
  3. Seulement 3
  4. Seulement 6
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

L’utilisateur saisit « bad », « bad », puis « key ». Quel message s’affiche après ces invites ?

attempts = 0
while attempts < 3:
    guess = input("Code: ")
    if guess == "key":
        print("Open")
        break
    attempts += 1
else:
    print("Locked")
  1. Seulement Locked
  2. Open, puis Locked
  3. Absolument rien
  4. Seulement Open
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un programme doit conserver le premier jour où la température est la plus élevée. Les jours sont numérotés à partir de 1. Quelle comparaison doit remplacer le blanc ?

highest = None
best_day = None
day = 0
for temp in [-4, -1, -1, -3]:
    day += 1
    if highest is None or ___:
        highest = temp
        best_day = day
  1. temp > highest
  2. temp >= highest
  3. temp < highest
  4. temp <= highest
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Qu’affiche ce programme sur deux lignes ?

total = 0
for row in range(1, 3):
    for col in range(1, 4):
        total += row * col
    print(total)
  1. 6, puis 12
  2. 6, puis 18
  3. 18, puis 18
  4. 1, puis 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Qu’affiche cette recherche imbriquée ?

found = False
for a in range(1, 5):
    for b in range(1, 5):
        if a + b == 7:
            found = True
            break
    if found:
        break
print(a, b)
  1. 4 3
  2. 4 4
  3. 3 4
  4. 1 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Quel texte ce programme affiche-t-il ?

text = ""
for ch in "lamp":
    if ch == "a":
        continue
    text = ch + text
print(text)
  1. pml
  2. lmp
  3. pmal
  4. mlp
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Quelle moyenne ce programme affiche-t-il ?

total = 0
count = 0
for n in [3, 11, -1, 14, 6, 20]:
    if n <= 8:
        continue
    total += n
    count += 1
    if count == 2:
        break
if count > 0:
    print(total / count)
  1. 6.25
  2. 15.0
  3. 12.5
  4. 25.0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Tu bloques sur ton propre exercice ? Aide aux Devoirs

Mots-Clés

66 Mots-Clés, chacun avec sa définition

A

Accumulateur
Un accumulateur est une variable qui conserve et met à jour un résultat au fil des itérations, comme une somme, un produit ou un texte.
L’accumulateur total conserve les additions précédentes lorsque la mesure suivante arrive.
Accumulateur de produit
Un accumulateur de produit multiplie les facteurs sélectionnés dans un résultat mémorisé et commence normalement à un pour conserver le premier facteur.
Un accumulateur de produit qui commence à un donne 24 après multiplication par 2, 3 et 4.
Accumulateur par ligne
Un accumulateur par ligne construit un résultat pour une itération externe et se réinitialise avant le début du travail interne de cette itération.
L’accumulateur par ligne recommence à zéro pour la ligne 2 afin que sa somme n’inclue pas la ligne 1.
Affectation augmentée
Une affectation augmentée combine une opération et une affectation en remplaçant une variable par sa valeur mise à jour.
L’affectation augmentée total += n ajoute le nombre actuel au sous-total mémorisé.
Affichage de diagnostic
Un affichage de diagnostic est une instruction d’affichage temporaire utilisée pour examiner l’état du programme à un point d’exécution choisi.
Un affichage de diagnostic après les mises à jour montre le compteur et le total en fin de passage.
Approximation en virgule flottante
L’approximation en virgule flottante stocke de nombreuses fractions décimales sous forme de valeurs binaires proches, si bien que des additions répétées peuvent ne pas atteindre une cible exacte.
L’approximation en virgule flottante rend un arrêt sur égalité exacte peu fiable après des additions répétées de 0,1.

B

Boucle
Une boucle répète un bloc d’instructions selon une condition ou une séquence d’éléments qui fournit le travail à effectuer.
Une boucle de compte à rebours affiche une valeur et la diminue avant de décider s’il faut répéter.
Boucle à sentinelle
Une boucle à sentinelle répète le traitement des saisies jusqu’à rencontrer une valeur désignée qui signifie qu’il faut s’arrêter.
Une boucle à sentinelle peut recueillir un nombre inconnu de mesures positives.
Boucle bornée
Une boucle bornée possède une séquence définie d’éléments ou un nombre défini de répétitions, même lorsque ce nombre est calculé à l’exécution.
Une boucle bornée répète la salutation n fois après que n a été lu auprès de l’utilisateur.
Boucle de comptage
Une boucle de comptage parcourt des valeurs numériques successives à l’aide d’une valeur initiale, d’un test de borne et d’un pas.
Une boucle de comptage qui commence à 10 et avance par pas de -2 parcourt 10, 8, 6, 4 et 2, qu’elle soit exprimée avec for ou while.
Boucle de validation de saisie
Une boucle de validation de saisie répète une demande tant que la réponse fournie ne vérifie pas les conditions d’une valeur acceptable.
Une boucle de validation de saisie repose la question lorsqu’un numéro de menu saisi est hors de l’intervalle de 1 à 4.
Boucle externe
Une boucle externe entoure une autre boucle et contrôle le groupe ou la ligne que la boucle interne traite à chaque exécution.
La boucle externe garde row fixe pendant que la boucle interne parcourt chaque colonne de cette ligne.
Boucle for
Une boucle for affecte les éléments successifs d’une séquence à une variable et exécute son corps pour chaque élément fourni.
Une boucle for parcourt les scores enregistrés dans l’ordre et affiche le double de chaque valeur actuelle.
Boucle imbriquée
Une boucle imbriquée est une boucle placée dans le corps d’une autre boucle, permettant de répéter le travail interne pour chaque élément externe.
Une boucle imbriquée affiche un ensemble distinct de colonnes pour chaque ligne de la grille de multiplication.
Boucle infinie
Une boucle infinie se répète sans atteindre de sortie par sa condition ou par une autre instruction de contrôle.
Une boucle dont la mise à jour manque devient une boucle infinie qui continue d’afficher le même nombre positif.
Boucle interne
Une boucle interne se trouve dans le corps d’une autre boucle et commence une nouvelle exécution chaque fois que l’exécution atteint son en-tête.
La boucle interne recommence à la colonne 1 lorsque la grille de multiplication passe à une nouvelle ligne.
Boucle la plus interne
La boucle la plus interne est la boucle englobante la plus proche qui contient une instruction ; c’est celle sur laquelle break ou continue agit.
La boucle la plus interne passe à sa colonne suivante lorsque son corps exécute continue.
Boucle non bornée
Une boucle non bornée se répète selon une condition dont le point d’arrêt n’est pas donné sous forme d’un nombre fixé de répétitions.
Une boucle non bornée recueille des messages jusqu’à ce que l’utilisateur saisisse le mot d’arrêt choisi.
Boucle while
Une boucle while teste une condition avant chaque passage et répète son corps indenté tant que la condition est vraie.
Une boucle while peut continuer à doubler une quantité jusqu’à ce qu’elle atteigne un minimum requis.
Boucle while True
Une boucle while True possède un en-tête toujours vrai et dépend d’une instruction de contrôle dans son corps pour sortir lorsque c’est nécessaire.
Une boucle while True lit une ligne, teste la sentinelle et n’affiche en retour que les véritables données.
Break
Break est une instruction Python qui termine immédiatement la boucle la plus interne qui la contient et saute le reste de son corps et de ses itérations.
Break termine la recherche dès que la première valeur qui vérifie la condition a été affichée.

C

Cas limite
Un cas limite teste une extrémité du travail prévu d’une boucle, comme zéro élément, un élément ou sa dernière valeur incluse.
Le cas limite où n vaut zéro révèle le passage supplémentaire provoqué par le test i <= n.
Clause else de boucle
Une clause else de boucle est un bloc qui s’exécute après la fin normale d’une boucle et est sauté lorsque cette boucle se termine par break.
La clause else de boucle affiche un seul message d’échec après que chaque candidat a été vérifié sans trouver de correspondance.
Compteur
Un compteur est un accumulateur qui augmente de un chaque fois qu’un événement particulier se produit ou qu’un élément est accepté.
Le compteur n’augmente que pour les scores supérieurs au seuil choisi, pas pour chaque saisie.
Continue
Continue est une instruction Python qui saute les instructions restantes de l’itération en cours et passe à la suivante.
Continue saute l’addition pour une valeur négative tout en laissant les valeurs suivantes être examinées.
Conversion de type
La conversion de type transforme une valeur en une valeur d’un autre type, par exemple en convertissant une saisie numérique textuelle en entier avec int.
La conversion de type permet à la boucle de comparer la chaîne saisie « 0 » à une sentinelle entière.
Corps de la boucle
Le corps de la boucle est le bloc indenté d’instructions répété pour chaque élément ou chaque vérification de condition réussie.
Dans une boucle de compte à rebours, le corps contient à la fois le print et la mise à jour qui rapproche le décompte de zéro.
Correspondance
Une correspondance est un élément qui satisfait une condition de recherche, laquelle peut demander une égalité ou une autre propriété comme la divisibilité.
Lorsque 18 est le premier nombre fourni divisible par 6, la correspondance 18 est mémorisée.
Correspondance mémorisée
Une correspondance mémorisée est un enregistrement distinct d’un candidat qui convient et qui reste disponible pendant que les variables de boucle actuelles changent.
Une correspondance mémorisée de 3 et 4 conserve ces valeurs même après que la recherche continue à examiner les couples suivants.
Couple
Un couple enregistre deux valeurs ayant des rôles distincts de première et de seconde valeur, de sorte que les inverser peut décrire un autre résultat.
Le couple (2 ; 5) pour deux dés diffère de (5 ; 2) car la valeur du premier dé change.

D

Début
Le début d’un range est son premier entier candidat ; il vaut zéro par défaut lorsque seule la fin est fournie.
Un début à 3 fait commencer range(3, 8) à 3 au lieu du zéro par défaut.
Drapeau
Un drapeau est une variable booléenne qui indique si un événement s’est produit ou si une condition a été remplie, en vue de décisions ultérieures.
Le drapeau found reste à True après une correspondance afin que le programme puisse signaler la réussite après la recherche.

É

Évaluation en court-circuit
L’évaluation en court-circuit saute la partie ultérieure d’une expression booléenne dès que la partie précédente en détermine le résultat.
L’évaluation en court-circuit de or évite de comparer un premier élément numérique à None.

E

Erreur de décalage d’une unité
Une erreur de décalage d’une unité produit un passage de trop ou manquant, ou décale d’une unité une première ou une dernière valeur prévue.
Une erreur de décalage d’une unité omet 10 lorsqu’une somme utilise range(1, 10).
Erreur de l’intervalle
Une erreur de l’intervalle confond le nombre d’éléments avec le nombre de bornes ou d’espaces entre eux, comme les séparateurs entre des valeurs affichées.
Une erreur de l’intervalle affiche six virgules après six valeurs alors que seules cinq virgules internes sont nécessaires.
Ex aequo
Un ex aequo se produit lorsque plusieurs éléments ont la même meilleure valeur, de sorte qu’une recherche de position doit choisir la première ou la dernière.
Pour deux scores ex aequo de 12, un test strict « supérieur à » conserve la position la plus ancienne.

F

Filtrage
Le filtrage sélectionne les éléments qui vérifient une condition afin qu’eux seuls reçoivent un traitement particulier ou contribuent à un résultat.
Filtrer les valeurs négatives permet à la boucle de ne totaliser que les mesures acceptées.
Fin
La fin d’un range est sa borne exclue, qui limite les valeurs fournies dans le sens de son pas.
Une fin à 11 permet à range(1, 11) d’inclure 10 comme dernière valeur fournie.
Fin normale
La fin normale d’une boucle for se produit lorsque ses éléments sont épuisés, et celle d’une boucle while lorsque sa condition devient fausse, sans exécuter break.
La fin normale d’une boucle for vide atteint quand même son bloc else.

I

Initialisation
L’initialisation affecte à une variable sa valeur initiale avant qu’un calcul ou un processus répété l’utilise.
L’initialisation fixe le compteur à zéro avant que des valeurs correspondantes soient comptées.
Itération
Une itération est un passage dans le corps d’une boucle, pendant lequel les instructions du chemin emprunté s’exécutent dans l’ordre.
Chaque itération d’une boucle de compte à rebours affiche un nombre avant de mettre à jour le décompte restant.

K

KeyboardInterrupt
KeyboardInterrupt est l’interruption que Python signale normalement lorsqu’un utilisateur arrête l’exécution dans un terminal avec Ctrl+C.
Arrêter une boucle bloquée dans un terminal avec Ctrl+C produit KeyboardInterrupt et une trace d’appels.

L

Lecture initiale
Une lecture initiale obtient la première saisie avant une boucle afin que sa condition initiale ait une valeur à examiner.
La lecture initiale permet à une valeur d’arrêt immédiate de sauter entièrement le corps qui traite les données.

M

Maximum
Un maximum est la plus grande valeur d’un ensemble de données ; une boucle peut le trouver en conservant la plus grande valeur rencontrée jusqu’ici.
Le maximum de -8, -3 et -6 est -3, même si tous les candidats sont inférieurs à zéro.
Minimum
Un minimum est la plus petite valeur d’un ensemble de données ; une boucle remplace sa valeur mémorisée chaque fois qu’un élément plus petit apparaît.
La température minimale devient -7 lorsque cette mesure est inférieure à la meilleure valeur mémorisée.
Moyenne
Une moyenne désigne ici la moyenne arithmétique, obtenue en divisant la somme des valeurs sélectionnées par leur nombre.
La moyenne des scores correspondants utilise leur nombre, sans les saisies rejetées ni la sentinelle.

N

None
None est la valeur spéciale de Python qui indique l’absence de valeur, utilisée dans une boucle de recherche de la meilleure valeur pour marquer qu’aucun élément n’a encore été rencontré.
None reste la meilleure valeur mémorisée lorsque la boucle de recherche du maximum reçoit une liste vide.

P

Pas
Le pas d’un range est l’écart entier non nul entre les valeurs successives fournies ; il vaut par défaut un, valeur positive.
Un pas de -2 fait parcourir à range(8, 0, -2) des valeurs paires décroissantes.
Pass
Pass est une instruction Python qui n’effectue aucune action et peut occuper un bloc où une instruction est nécessaire.
Pass remplit un corps de if inachevé, mais le print après ce if s’exécute quand même.

R

Range
Un range décrit des entiers régulièrement espacés au moyen d’un début, d’une fin exclue et d’un pas non nul, sans construire une liste complète.
Le range range(2, 11, 2) fournit cinq valeurs paires de 2 à 10 inclus.
Range vide
Un range vide ne fournit aucune valeur car aucune valeur initiale ne satisfait sa borne dans le sens de son pas.
Le range vide range(5, 1) ne donne aucun travail au corps d’une boucle for et ne lève aucune erreur.
Recherche imbriquée
Une recherche imbriquée vérifie des combinaisons à l’aide d’une boucle dans une autre et peut utiliser un drapeau de recherche à travers les deux niveaux.
La recherche imbriquée utilise deux break pour arrêter les deux boucles au premier couple qui convient.
Recherche séquentielle
Une recherche séquentielle examine les éléments un par un dans l’ordre de leur séquence jusqu’à trouver la correspondance demandée ou à épuiser les éléments.
Une recherche séquentielle du premier nombre pair dans une liste mixte s’arrête dès qu’elle en atteint un, comme 8.

S

Sentinelle
Une sentinelle est une valeur de saisie particulière qui signale la fin des données et reste distincte des véritables données.
La sentinelle -1 termine la collecte des scores tout en laissant zéro comme score valide.
Séparateur
Un séparateur est un texte placé entre des éléments de sortie voisins ; une séquence non vide de n éléments comporte n - 1 espaces à remplir entre eux.
Afficher un séparateur avant chaque élément suivant évite de laisser un tiret supplémentaire après le dernier.
Séquence
Une séquence est une collection ordonnée d’éléments, comme les caractères d’une chaîne ou les valeurs d’une liste.
La séquence « a b » fournit trois caractères, dont l’espace entre les lettres.
Sortie anticipée
Une sortie anticipée quitte une boucle avant sa fin normale, par exemple lorsqu’une recherche exécute break après avoir trouvé une correspondance.
Dans une boucle qui cherche un multiple d’un nombre, une sortie anticipée évite d’examiner les nombres suivants une fois le premier multiple trouvé.

T

Tableau de suivi
Un tableau de suivi note les états des variables au fil des passages d’une boucle, avec des colonnes dont les intitulés indiquent quand les valeurs sont observées.
Le tableau de suivi distingue i avant le corps de i après l’incrémentation.
Terminaison
La terminaison est la fin de l’exécution d’une boucle, atteinte lorsque la répétition s’arrête à cause d’une condition fausse ou d’une instruction de sortie.
La terminaison d’une boucle de compte à rebours a lieu après que la mise à jour rend fausse la vérification suivante de sa condition.
Test d’appartenance
Un test d’appartenance vérifie si une valeur figure dans une séquence et produit un résultat booléen à l’aide de in.
Le test d’appartenance ch in "aeiou" détermine s’il faut augmenter un compteur de voyelles.
Test d’existence
Un test d’existence demande si au moins un élément vérifie une condition et peut se terminer avec succès dès qu’un élément la vérifie.
Le test d’existence met son drapeau à True dès le premier score supérieur au minimum requis.
Test universel
Un test universel demande si chaque élément vérifie une condition et peut se terminer par un échec dès le premier élément qui ne la vérifie pas.
Le test universel s’arrête à zéro lorsqu’il vérifie si toutes les valeurs enregistrées sont strictement positives.
Total cumulé
Un total cumulé est la somme accumulée à une étape donnée du traitement, avant ou au moment du dernier élément.
Afficher le total cumulé dans le corps montre comment chaque élément modifie le sous-total.
Traçage
Le traçage suit le code instruction par instruction en notant les changements et les chemins exécutés pour prévoir ses valeurs et sa sortie.
Le traçage montre qu’incrémenter avant l’addition décale chaque valeur utilisée dans la somme.

V

Valeur finale
Une valeur finale est la valeur qu’une variable contient après la fin de la boucle ; elle peut différer de la dernière valeur affichée.
Lorsqu’une boucle de comptage affiche i et s’arrête dès que i atteint 5, la valeur finale de i est 5, même si la dernière valeur affichée était 4.
Variable de boucle
Une variable de boucle contient l’élément actuel affecté par une boucle for et peut être utilisée par les instructions de son corps.
La variable de boucle score contient un score à la fois, tandis que scores désigne la liste complète.

À propos de cette unité

Par StudeliSignaler une erreur

Crée ton propre Matériel d'Étude

Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.

Commencer