Listes - Notions de base#
Lecture d'une base de données en Python#
Une base de données est particulièrement utile quand elle connectée à une application. Avec Python, cela est par exemple possible grâce au module sqlite3. Sur cette page, ce module a déjà été chargé. De plus, la base de données de l'application de commande d'une pizzeria a été créée. Son schéma relationnel est donné ci-dessous.
import pathlib
import sqlite3
path = pathlib.Path('database.sqlite')
exists = path.exists()
db = sqlite3.connect(path)
if not exists:
db.executescript(pathlib.Path('pizzeria.sql').read_text())
def execute_sql(request):
results = db.execute(request).fetchall()
if results == None :
return
if len(results[0]) == 1:
return [x[0] for x in results]
return results
On peut dès lors utiliser la fonction execute_sql() prenant en paramètre la requête SQL que l'on souhaite exécuter sur cette base de données. On peut récupérer le résultat de cette requête en faisant précéder la fonction d'une variable (de manière analogue à un input()).
Ainsi, le code ci-dessous permet de récupérer tous les noms de pizzas, et de les stocker dans la variable noms avant de les afficher.
noms = execute_sql('select nom from Pizza')
print(noms)
De manière similaire, en modifiant la requête SQL, on pourrait récupérer et afficher tous les prix des pizzas :
résultats = execute_sql('select prix from Pizza')
print("Prix des pizzas : ", résultats)
Evidemment, les requêtes SQL peuvent contenir toutes les instructions vues dans le précédent chapitre, comme, par exemple, des WHERE :
cheap_pizzas = execute_sql('select nom from Pizza WHERE prix <= 15')
print("Les pizzas les moins chères sont :", cheap_pizzas)
Qu'est-ce qu'une liste ?#
Comme vous pouvez le constater dans les exemples ci-dessus, le code Python contient à chaque fois une seule variable (noms, résultats, cheap_pizzas). Cependant, lorsqu'on affiche cette variable, de nombreuses valeures sont affichées. C'est parce que ces variables sont des listes.
Là où une variable de type int, float, str, ou bool ne pouvait contenir qu'une seule valeur, une list peut en contenir plusieurs. Celles-ci sont très pratiques quand un programme contient une grande quantité de données, afin de toutes les enregistrer dans une seule variable.
Les listes précédentes ont été créées via la base de données, mais il est également possible de les créer sois-même. Une liste est entourée de crochets [] et les valeurs sont séparées par des virgules ,.
panier = ["Poires", "Champignons", "Raviolis", "Pêches"]
print("Dans le panier il y a :", panier)
notes_math = [3.5, 4.8, 5.7, 4.1, 4.5, 5, 3.8, 5.9, 3.2, 4.4, 6]
print("Mes notes en math sont :", notes_math)
Astuce
Pour écrire des crochets sur :
Windows :
[AltGr+ è ou]AltGr+ !Mac :
[Option+ 5 ou]Option+ 6
Indexation#
L'indexation permet d'accéder à un élément précis d'une liste. Pour ce faire, on peut faire suivre une liste d'une paire de crochets [] entre lesquelles on écrit l'index de l'élément souhaité. L'index correspond à la position de l'élément dans la liste, sachant que le premier élément à l'index 0, le deuxième l'index 1, etc.
utilisateurs = execute_sql("SELECT nom FROM Utilisateur")
print("Liste complète :", utilisateurs)
print("Premier utilisateur", utilisateurs[0])
print("5ème utilisateur :", utilisateurs[4])
Avec l'exemple suivant, on peut sélectionné n'importe quel utilisateur grâce à son index.
utilisateurs = execute_sql("SELECT nom FROM Utilisateur")
index = int(input("Quel index sélectionnes-tu ?"))
utilisateur_sélectionné = utilisateurs[index]
print("Tu as sélectionné :", utilisateur_sélectionné)
Important
Le premier élément d'une liste est toujours à l'index 0.
Dans une liste de n éléments, le dernier élément sera à l'index n-1.
Fonctions sur les listes#
En Python, il existe de nombreuses fonctions très pratiques pouvant être utilisées sur les listes. En voici quelques unes qui seront utiles dans le cadre de ce cours.
len(ma_liste): retourne le nombre (=la longueur) d'éléments dansma_listelettres = ["S", "A", "L", "U", "T"] print(len(lettres))
ma_liste.append(element): ajoute un élément à la fin dema_listeoutils = ["tournevis", "vis", "vis", "vis", "clous", "marteau"] outils.append("scie") outils.append("hache") print(outils)
ma_liste.remove(element): retire 1x l'élément àma_listeoutils = ["tournevis", "vis", "vis", "vis", "clous", "marteau"] outils.remove("clous") outils.remove("vis") print(outils)
Exercices#
Exercice 1#
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.
couleurs_arc_en_ciel = "rouge" "orange" "jaune" "vert" "bleu" "indigo" "violet" print(couleurs_arc_en_ciel)
profs_d_informatique = [Canvel, Marro, Dutoit, Blank, Lehmann, Jan] print(profs_d_informatique)
ordre_d_arrivée = ["Isaac", "Victor", "Pascal", "Lucien", "Bruno", "Aurélien"] print("Gagnant de la course :", ordre_d_arrivée[1])
pizzas = execute_sql("SELECT nom FROM Pizza") n_pizzas = pizzas.len() print("Il y a", n_pizzas, "pizzas différentes")
sac = [] #Définit une liste vide objet = input("Quel objet veux-tu mettre dans ton sac ?") while objet != "STOP": append(sac.objet) objet = input("Quel autre objet veux-tu mettre dans ton sac ?") print("Contenu du sac", sac)
#Retire tous les 0 de la liste bits = [1, 0, 1, 1, 0, 1, 0] #Ne pas toucher à cette ligne bits.remove(0) print(bits)
Solution
1couleurs_arc_en_ciel = ["rouge", "orange", "jaune", "vert", "bleu", "indigo", "violet"] 2print(couleurs_arc_en_ciel)
1profs_d_informatique = ["Canvel", "Marro", "Dutoit", "Blank", "Lehmann", "Jan"] 2print(profs_d_informatique)
1#La 1ère personne est la 1ère arrivée à la fin de la course 2ordre_d_arrivée = ["Isaac", "Victor", "Pascal", "Lucien", "Bruno", "Aurélien"] 3print("Gagnant de la course :", ordre_d_arrivée[0])
1pizzas = execute_sql("SELECT nom FROM Pizza") 2 3n_pizzas = len(pizzas) 4print("Il y a", n_pizzas, "pizzas différentes")
1sac = [] #Définit une liste vide 2objet = input("Quel objet veux-tu mettre dans ton sac ?") 3while objet != "STOP": 4 sac.append(objet) 5 objet = input("Quel autre objet veux-tu mettre dans ton sac ?") 6print("Contenu du sac", sac)
1#Retire tous les 0 de la liste 2bits = [1, 0, 1, 1, 0, 1, 0] #Ne pas toucher à cette ligne 3bits.remove(0) 4bits.remove(0) 5bits.remove(0) 6print(bits)
Exercice 2#
Ecrivez un programme qui recherche toutes les adresses emails des utilisateurs de l'application de la pizzeria, les stocke dans une variables
emails, puis les affiche.
Ecrivez un programme qui recherche tous les numéros de téléphone commençant par
078puis les affiche.
Exercice 3#
Complétez le programme suivant en utilisant l'indexation de manière à ce que le programme affiche le texte suivant:
rouge
noir
brun
bleu
couleurs = ["noir", "blanc", "brun", "gris", "rouge", "jaune", "bleu"]
#Complétez les index corrects
print(couleurs[...])
print(couleurs[...])
print(couleurs[...])
print(couleurs[...])
Solution
1couleurs = ["noir", "blanc", "brun", "gris", "rouge", "jaune", "bleu"]
2print(couleurs[4])
3print(couleurs[0])
4print(couleurs[2])
5print(couleurs[6])
Exercice 4#
Le programme ci-dessous recherche tous les prix des pizzas et, avec le ORDER BY, les trie du plus petit au plus grand. Complétez ce programme de manière qu'il affiche uniquement le prix le plus bas et le plus élevée. Souvenez-vous que :
Le 1er élément d'une liste est toujours à l'index 0
Le dernier élément d'une liste de longueur n est à l'index n-1
La longueur d'une liste est donnée avec la fonction
len()
prix = execute_sql("SELECT prix FROM Pizza ORDER BY prix")
print("Prix le plus bas :")
print("Prix le plus haut:")
Exercice 5#
Créez une liste, nommée
sportsavec les éléments suivants:kayak,escrimeetescalade.Affichez la liste et son nombre d'éléments.
Demandez un sport à l'utilisateur et ajoutez-le à la liste
sports.Afficher la liste et son nombre d'éléments.
Effacez l'élément
escalade.Affichez la liste et son nombre d'éléments.
# Écrivez le programme ici
Solution
1sports = ["kayak", "escrime", "escalade"]
2print(sports, len(sports))
3sport = input("Entrer un sport: ")
4sports.append(sport)
5print(sports, len(sports))
6sports.remove("escalade")
7print(sports, len(sports))
Exercice 6#
Dans la base de données de la pizzeria, la colonne description de la table Pizza contient les ingrédients. Le programme ci-dessous doit alors permettre de sélectionner toutes les descriptions possédant respectivement l'ingrédient jambon et champignon, puis d'afficher leur nombre. Finalement, le programme affichera quel ingrédient est le plus utilisé.
Complétez le programme ci-dessous de manière qu'il fonctionne correctement.
pizza_avec_jambon = execute_sql("SELECT nom FROM Pizza WHERE description ...")
pizza_avec_champignons = execute_sql("SELECT nom FROM Pizza WHERE description ...")
print("Nombre de pizzas avec du jambon :", ...)
print("Nombre de pizzas avec des champignons :", ...)
if ... :
print("Il y a plus de pizzas avec champignons")
else:
print("Il y a plus de pizzas avec du jambon")
Exercice 7#
Dans l'application de la pizzeria, on souhaite ajouter une fonctionnalité permettant aux utilisateurs de composer leur propre pizza avec les ingrédients de leur choix. Ainsi, le programme ci-dessous doit continuellement demander à l'utilisateur un ingrédient à rajouter, jusqu'à ce qu'il écrive "STOP".
Un exemple d'exécution pourrait être le suivant :
Quel ingrédient voulez-vous ajouter ? <--- [ananas]
Quel ingrédient voulez-vous ajouter ? <--- [jambon]
Quel ingrédient voulez-vous ajouter ? <--- [ananas]
Quel ingrédient voulez-vous ajouter ? <--- [ananas]
Quel ingrédient voulez-vous ajouter ? <--- [STOP]
Votre pizza sera faite de : ['ananas', 'jambon', 'ananas', 'ananas']
L'algorithme de ce programme est le suivant
Définir une liste contenant les ingrédients de base d'une pizza (sauce tomate et mozzarella)
Demander à l'utilisateur un nouvel ingrédient à ajouter et le stocker dans la variable choix
Tant que choix est différent de "STOP"
Ajouter le choix à la liste des ingrédients
Redemander un ingrédient à ajouter et le stocker dans la variable choix
Afficher la liste des ingrédients finale
Ecrivez ce programme au complet ci-dessous
#Ecrivez votre code ici