Listes - Boucle for#

Sur cette page, il est également possible d'utiliser Python avec la base de données de la pizzeria dont le schéma relationnel est donné ci-dessous.

Schéma pizzeria

Parcourir chaque élément d'une liste#

Quand on traite les éléments d'une liste, il est courant de vouloir exécuter la même opération pour chacun de ses éléments. Par exemple, si l'on récupère la liste de tous les noms d'utilisateur de notre plateforme, on pourrait vouloir écrire un message personnalisé pour chaque personne dans cette liste. En français, l'algorithme serait le suivant :

Récupérer la liste des noms d'utilisateurs dans la liste *noms*
Pour chaque nom dans la liste *noms*:
    Afficher "Bonjour" suivi du nom

En Python, l'instruction Pour chaque ... dans ... se traduit avec les mots-clefs for ... in ... comme dans l'exemple ci-dessous.

noms = execute_sql("SELECT nom FROM Utilisateur")
print(noms)

#Pour chaque nom dans la liste des noms
for nom in noms:
    print("Bonjour", nom)

Avec la boucle for ... in ..., les instructions indentées en dessous sont exécutées en boucle les unes après les autres pour chaque élément de la liste. La nouvelle variable définie après le for prend tour à tour la valeur de chaque élément de la liste placée après le in.

Ce concept s'illustre dans l'exemple ci-dessous où une liste de notes est définie, puis où le programme compte le nombre de notes insuffisantes.

notes = [4.5, 5.75, 3.5, 4.25, 3, 5, 3.75, 4.5]
nb_insuffisantes = 0

#Pour chaque note dans la liste des notes
for note in notes:
    if note < 4:
        print(note, ": Tu peux faire mieux !")
        nb_insuffisantes = nb_insuffisantes + 1
    else:
        print(note, ": Bravo !")

print("Au total il y a", nb_insuffisantes, "notes insuffisantes")

Comme dernier exemple, lisez attentivement le programme ci-dessous. Celui-ci permet de calculer la quantité de pizzas "Margherita" commandées.

nb_marga = execute_sql("SELECT quantite FROM Pizza JOIN Commande ON Commande.id_pizza = Pizza.id_pizza WHERE nom = 'Margherita'")
print("Quantités commandées :", nb_marga)

total = 0

#Pour chaque quantité dans la liste des quantités
for n in nb_marga:
    total += n

print(total, "pizza Margherita ont été commandées au total")

Exercices#

Exercice 13#

Chacun des programmes suivant comporte au moins une erreur. Parfois, cette erreur fait directement buguer le programme avec un message d'erreur rouge. D'autres fois, le programme s'exécute correctement, mais son résultat n'est pas logique.

Corrigez chacun de ces codes de manière à ce qu'ils s'exécutent correctement et affichent un résultat logique.

  1. #Affiche la liste des tâches à faire avec le texte TODO avant chaque tâche
    todo = ["Réviser math", "Devoir de français", "Apprendre Scedryk par coeur"]
    for tâche in todo:
        print("TODO :", todo)
    
  2. #Affiche et numérote la liste des sources pour un travail
    sources = ["wikipedia.org", "universalis.fr", "cnrtl.fr", "rts.ch"]
    
    num_source = 0
    
    for source in sources:
        print(num_source, ":", source)
    
    print("Au total il y a", num_source, "sources")
    
  3. #Calcule le prix total de toutes les pizzas avec champignons
    prix = execute_sql("SELECT prix FROM Pizza WHERE description LIKE '%champignons%'")
    
    total = 0
    
    for prix:
        total = total + prix
    print("Prix total des pizzas avec champignons :", total, "CHF")
    
  4. votes = ["oui", "non", "non", "oui", "oui", "non", "non", "oui", "non", "oui", "oui"]
    oui = 0
    non = 0
    for v in votes:
        if v == "oui":
            oui += 1
        elif v == "non":
            non += 1
    
        if oui > non:
            print("Les OUI l'emporte")
        elif non > oui:
            print("Les NON l'emporte")
        else:
            print("Egalité")
    

Exercice 14#

Complétez le programme ci-dessous afin qu'il affiche correctement l'itinéraire de la manière suivante:

Début de l'itinéraire
Vas à Bulle
Vas à Riaz
Vas à Marsens
Vas à Echarlens
Vas à Charmey
Tu es arrivé!
itineraire = ["Bulle", "Riaz", "Marsens", "Echarlens", "Charmey"]

# Complétez le programme à partir de là

Exercice 15#

Le programme ci-dessous définit deux listes contenant des gains et des pertes en CHF. Complétez-le avec 2 boucles for ... in ... de sorte qu'il affiche le solde final.

gains = [100, 50, 200.25, 90.50, 80, 200]
pertes = [40, 59.95, 145]

# Complétez le programme à partir de là

Exercice 16#

Le programme ci-dessous récupère toutes les quantités de pizzas commandées. Sans toucher à la requête SQL, complétez le programme de sorte qu'il trouve la plus grosse commande. Pour cela, l'algorithme en français est le suivant :

Récupérer la liste des quantités commandées
Définir une variable commande_maximum avec une valeur négative
Pour chaque quantité dans la liste
    Si cette quantité est plus grande que commande_maximum
        commande_maximum prend la valeur de cette quantité
Afficher commande_maximum
quantités = execute_sql("SELECT quantite FROM Commande")

# Complétez le programme à partir de là

Exercice 17#

Le programme ci-dessous récupère le statut des commandes de pizza (livrée, en livraison, ou en préparation). Sans toucher à la requête SQL, complétez le programme Python de sorte qu'il affiche le nombre de commandes qui ont été livrées.

statuts = execute_sql("SELECT statut FROM Commande")

# Complétez le programme à partir de là

Exercice 18#

Pour cet exercice, une mini-base de données contient quelques notes stockées dans une table Bulletin. On peut les récupérer de la manière suivante :

notes = execute_sql("SELECT note FROM Bulletin")
print("Liste de notes :", notes)

Avec cette liste, calculez les valeurs suivantes :

  1. Le nombre de bonnes notes (4.5 et plus).

  2. La moyenne. On calcule une moyenne en additionnant toutes les valeurs, puis en les divisant par leur nombre.

  3. La meilleure note obtenue.

notes = execute_sql("SELECT note FROM Bulletin")

# Complétez le progamme à partir de là
nb_bonnes_notes =
moyenne =
meilleure_note =

print("Il y a ", nb_bonnes_notes, "bonnes notes.")
print("La moyenne est de", moyenne)
print("La meilleure note obtenue est", meilleure_note)