Leçon 12 / 20

Répéter une saisie contrôlée

12 min Python — bases du langage Gratuit

Objectif : Répéter le traitement des dépenses jusqu’à la rencontre d’une commande d’arrêt choisie.

Une boucle for convient quand vous voulez parcourir les éléments d’une collection, comme dans la leçon précédente. Pour un traitement qui doit continuer jusqu’à ce qu’une commande d’arrêt soit rencontrée, vous avez besoin d’un autre mécanisme : une boucle qui vérifie une condition à chaque répétition.

Dans cette leçon, vous allez simuler une suite de commandes pour le suivi de dépenses. Cette simulation vous permet de comprendre la répétition et l’arrêt sans encore utiliser la saisie au clavier, qui sera abordée dans une leçon ultérieure. Vous verrez ainsi le comportement du programme avant d’ajouter une véritable saisie interactive.

Répéter tant qu’une condition est vraie

La boucle while exécute son bloc tant que la condition placée après le mot-clé est vraie. Il faut donc prévoir comment cette condition changera, ou comment le programme quittera la boucle. Sans évolution de la condition ni arrêt explicite, le bloc peut se répéter sans fin.

Vous allez parcourir une liste de commandes préparées à l’avance. Les commandes ajouter déclenchent l’affichage d’une dépense, tandis que la commande arreter met fin au traitement. La variable index_commande indique quelle commande examiner.

Fichier complet : suivi_depenses.pyTexte
# Présentation du suivi de dépenses
print("Suivi de dépenses")
print("Les dépenses sont classées et récapitulées.")

# Exemples de montants et d'opérations
montant = 18.50
montant_secondaire = 7.25
montant_total = montant + montant_secondaire
print(f"Total de l'exemple : {montant_total:.2f} €")

# Liste de montants
montants = [montant, montant_secondaire]
montants.append(12.00)
print(f"Nombre de montants : {len(montants)}")

# Dépense structurée
premiere_depense = {
    "montant": 18.50,
    "categorie": "transport",
    "description": "Ticket de train",
}
premiere_depense["description"] = "Billet de train"

# Comparaisons et classement
seuil = 20.00
depasse_seuil = premiere_depense["montant"] > seuil
print(f"La dépense dépasse le seuil : {depasse_seuil}")

if premiere_depense["montant"] < 10:
    classement = "petite dépense"
elif premiere_depense["montant"] < 50:
    classement = "dépense moyenne"
else:
    classement = "dépense importante"
print(f"Classement : {classement}")

if premiere_depense["categorie"] == "transport" and depasse_seuil:
    print("Transport au-dessus du seuil")
elif premiere_depense["categorie"] == "transport" or depasse_seuil:
    print("Transport ou dépassement du seuil")

# Liste de dépenses structurées
depenses = [
    premiere_depense,
    {
        "montant": 7.25,
        "categorie": "repas",
        "description": "Déjeuner",
    },
    {
        "montant": 12.00,
        "categorie": "loisirs",
        "description": "Entrée de musée",
    },
]

for depense in depenses:
    print(
        f"{depense['description']} : "
        f"{depense['montant']:.2f} € "
        f"({depense['categorie']})"
    )

# Simulation d'une saisie répétée jusqu'à la commande d'arrêt
commandes = ["ajouter", "ajouter", "arreter", "ajouter"]
index_commande = 0
index_depense = 0

while index_commande < len(commandes):
    commande = commandes[index_commande]
    index_commande += 1

    if commande == "arreter":
        print("Arrêt demandé : fin du suivi.")
        break

    depense = depenses[index_depense]
    index_depense += 1
    print(
        f"Dépense traitée : {depense['description']} — "
        f"{depense['montant']:.2f} €"
    )

print("Traitement terminé.")
Résultat attendu
Suivi de dépenses
Les dépenses sont classées et récapitulées.
Total de l'exemple : 25.75 €
Nombre de montants : 3
La dépense dépasse le seuil : False
Classement : dépense moyenne
Transport ou dépassement du seuil
Billet de train : 18.50 € (transport)
Déjeuner : 7.25 € (repas)
Entrée de musée : 12.00 € (loisirs)
Dépense traitée : Billet de train — 18.50 €
Dépense traitée : Déjeuner — 7.25 €
Arrêt demandé : fin du suivi.
Traitement terminé.

La condition de la boucle vérifie que l’index de commande reste inférieur au nombre de commandes. À chaque tour, le script lit la commande correspondante puis augmente l’index : la boucle progresse donc dans la liste. Quand il rencontre arreter, break quitte immédiatement la boucle, même s’il reste une commande après cette instruction.

L’ordre des commandes est volontaire : les deux premières dépensent les deux premières entrées de la liste, puis la troisième arrête la boucle. La quatrième commande, placée après l’arrêt, n’est pas traitée. Pour vérifier un autre scénario, modifiez la liste commandes et relancez le fichier.

À retenir

  • Une boucle while répète un bloc tant que sa condition est vraie.
  • La condition d’arrêt doit être atteignable ; sinon, la répétition peut continuer sans fin.
  • break quitte immédiatement la boucle.
  • La simulation par liste de commandes permet de tester le déroulement avant d’ajouter la saisie au clavier.

Dans la prochaine leçon, vous commencerez à regrouper un traitement réutilisable dans une fonction.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.