1. Types de séquences et mutabilité
Avant de commencer à parler de tuples et de dictionnaires, nous devons introduire deux concepts importants: les types de séquence et la mutabilité.
Les types de séquences
Un type de séquence est un type de données en Python qui est capable de stocker plus d’une valeur (ou moins d’une, car une séquence peut être vide), et ces valeurs peuvent être parcourues séquentiellement (d’où le nom), élément par élément. La boucle Une séquence est une donnée qui peut être parcourue par la boucle |
Vous avez rencontré jusqu’à présent un type de séquence Python : la liste.
La liste est un exemple classique d’une séquence Python, bien qu’il existe d’autres séquences qui méritent d’être mentionnées, et nous allons vous les présenter maintenant.
La mutabilité
C’est une propriété de toutes les données de Python qui décrit sa disponibilité à être librement modifiée pendant l’exécution du programme. Il existe deux types de données Python:
|
2. Qu’est-ce qu’un tuple ?
2.1. Définition
Un tuple est un type de séquence non mutable. Il peut se comporter comme une liste, mais ne peut pas être modifié. On ne peut ni lui ajouter, lui modifier ou lui supprimer un élément. Cela signifie que l’ajout d’un élément à la fin de la liste nécessiterait la recréation de la liste à partir de zéro. En mathématiques, on parle de p-uplet. |
2.2. Représentation
On le représente avec des parenthèses ou simplement en séparant les données qu’il contient avec des virgules :
# tuple1 contient des entiers
tuple1 = (1, 2, 4, 8)
# tuple2 contient des flottants (réels)
tuple2 = 1., .5, .25, .125
print(tuple1)
print(tuple2)
La sortie d’un tel code donne :
(1, 2, 4, 8)
(1.0, 0.5, 0.25, 0.125)
2.3. Comment créer un tuple?
Il est possible de créer un tuple vide, des parenthèses sont alors nécessaires :
empty_tuple = ()
Si vous souhaitez créer un tuple de un seul élément, vous devez terminer la valeur par une virgule :
Un tuple doit être distingué d’une valeur simple ordinaire, ce qui ne serait pas possible sans cette virgule, on obtiendrait à la place de simples variables. |
2.4. Comment utiliser un tuple ?
Si vous souhaitez obtenir les éléments d’un tuple afin de les relire, vous pouvez utiliser les mêmes conventions auxquelles vous êtes habitué lors de l’utilisation des listes.
myTuple = (1, 10, 100, 1000)
print(myTuple[0])
print(myTuple[-1])
print(myTuple[1:])
print(myTuple[:-2])
for elem in myTuple:
print(elem)
Exécutez-le et vérifiez que le programme produit bien la sortie suivante :
1
1000
(10, 100, 1000)
(1, 10)
1
10
100
1000
2.5. Travail à faire : Créer un tuple à partir d’une liste
-
Créer la liste
une_liste
qui contient les éléments suivant :1, 2, 3, 4
-
Créer un tuple
un_tuple
à partir de la listeune_liste
-
Afficher le contenu du tuple
un_tuple
-
Ajouter l’élément
5
à la listeune_liste
-
Afficher le contenu de la liste
une_liste
-
Ajouter l’élément
5
au tupleun_tuple
. -
Afficher le contenu du tuple
un_tuple
. Celui-ci doit contenir(1, 2, 3, 4, 5)
On ne peut pas ajouter d’élément dans un tuple. Il faut donc supprimer le tuple et le recréer à partir de la liste. |
2.6. Les opérateurs des tuples
-
la fonction
len()
accepte les tuples en argument et retourne le nombre d’éléments qu’il contient. -
l’opérateur
+
permet de joindre des tuples ensemble -
l’opérateur
*
peut multiplier les tuples, tout comme les listes; -
l’opérateur
=
peut affecter à un tuple un autre tuple -
les opérateurs
in
etnot
in fonctionnent de la même manière que dans les listes.
myTuple = (1, 10, 100)
t1 = myTuple + (1000, 10000)
t2 = myTuple * 3
print(len(t2))
print(t1)
print(t2)
print(10 in myTuple)
print(-10 not in myTuple)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
9
(1, 10, 100, 1000, 10000)
(1, 10, 100, 1, 10, 100, 1, 10, 100)
True
True
L’utilisation de l’opérateur d’affectation peut se révéler utile pour échanger des valeurs de tuples :
var = 123
t1 = (1, )
t2 = (2, )
t3 = (3, var)
t1, t2, t3 = t2, t3, t1
print(t1, t2, t3)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
(2,) (3, 123) (1,)
3. Qu’est-ce qu’un dictionnaire?
Le dictionnaire est une autre structure de données Python. Ce n’est pas un type de séquence (mais peut être facilement adapté au traitement de séquence) et il est modifiable. |
Depuis Python 3.6x, les dictionnaires sont devenus des collections ordonnées par défaut. |
Pour expliquer ce qu’est réellement le dictionnaire Python, il est important de comprendre qu’il s’agit littéralement d’un dictionnaire.
Le dictionnaire Python fonctionne de la même manière qu’un dictionnaire bilingue. Par exemple, vous avez un mot anglais (par exemple, *cat*) et avez besoin de son équivalent français. Vous parcourez le dictionnaire afin de trouver sa traduction en français et c’est (très probablement) le mot *chat*.
-
Le mot recherché est nommé clé
-
Le mot retourné est nommé valeur
Un dictionnaire est un ensemble de paires clé-valeur :
|
4. Déclaration
La déclaration d’un dictionnaire se fait de la même manière que pour n’importe quelle variable. On lui donne un nom et on l’affecte d’une collection de clés-valeurs entre accolades {}
et séparées par des virgules ,
. Les clés et les valeurs sont séparés par :
:
Soit une variable appelée
de type dict
`dict
`et remplie d’une collection clés-valeurs :
>>> dictionnary = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
>>> type(dictionnary)
<class 'dict'>
5. Comment utiliser un dictionnaire ?
Pour obtenir une des valeurs, il faut fournir une valeur de clé valide :
print (dict ['cat'])
Obtenir la valeur d’un dictionnaire ressemble à l’indexation pour les liste, en particulier grâce aux crochets entourant la valeur de la clé.
|
5.1. Travail à faire : Créer un dictionnaire
-
Créer un dictionnaire vide
empty_dictionnary
. -
Afficher son contenu.
-
Créer le dictionnaire
phone_number
qui contient les numéros de téléphones des personnes suivantes :-
boss : 5551234567
-
Suzy : 22657854310
-
Andy : 34546676535
-
-
Afficher le contenu du dictionnaire
phone_number
-
Rechercher et afficher le numéro de téléphone de Suzy
-
Rechercher et afficher le numéro de téléphone de John
5.2. Travail à faire : Rechercher dans un dictionnaire
-
Créer le dictionnaire suivant :
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
-
Créer la liste suivante :
words = ['cat', 'lion', 'horse']
-
Parcourir la liste
words
et afficher la valeur correspondante à chaque clé du dictionnaire qu’elle contient.
Utiliser l’opérateur |
# Déclaration du dictionnaire dict
# Déclaration de la liste words
# parcours de la liste
for word in words:
#si word est dans le dictionnaire dict
if ??? in ???:
#Affiche clé->valeur
print(word, "->", ???)
else:
print(word, "is not in dictionary")
5.3. Utiliser les clés
La méthode keys()
renvoie la liste des clés utilisées dans un dictionnaire. On peut itérer cette liste avec une boucle for
.
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
for key in dict.keys():
print(key, "->", dict[key])
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
horse -> cheval
dog -> chien
cat -> chat
5.4. Trier les clés
-
Utiliser la fonction
sorted()
pour trier les clés.
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
for key in sorted(dict.keys()):
print(key, "->", dict[key])
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
cat -> chat
dog -> chien
horse -> cheval
5.5. Utiliser les valeurs
Il existe également une méthode nommée values()
, qui fonctionne de manière similaire à keys()
, mais renvoie une liste de valeurs.
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
for french in dict.values():
print(french)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
chat
chien
cheval
Les dictionnaires n’étant pas en mesure de trouver automatiquement une clé pour une valeur donnée, le rôle de cette méthode est plutôt limité. |
5.6. Utiliser les items
Une autre méthode pour accéder aux clés et aux valeurs consiste à utiliser la méthode Cette méthode renvoie une liste de tuples où chaque tuple est une paire clé-valeur. |
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
for english, french in dict.items():
print(english, "->", french)
Notez la manière dont le tuple a été utilisé comme variable de boucle |
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
cat -> chat
dog -> chien
horse -> cheval
5.7. Modifier une valeur
Attribuer une nouvelle valeur à une clé existante est simple. Comme les dictionnaires sont mutables, il n’y a aucun obstacle à les modifier.
Nous allons remplacer la valeur *chat* par *minou*.
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
dict['cat'] = 'minou'
print(dict)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
{'dog': 'chien', 'horse': 'cheval', 'cat': 'minou'}
5.8. Travail à faire : Modifier une valeur
-
Modifier la valeur qui correspond à la clé
dog
encabot
-
Modifier la valeur qui correspond à la clé
horse
encanasson
5.9. Ajouter un item clé-valeur
L’ajout d’une nouvel item clé-valeur à un dictionnaire est aussi simple que de changer une valeur, il suffit d’affecter une valeur à une nouvelle clé, auparavant inexistante.
Cette affectation est très différente de celle des listes : Les listes ne permettent pas d’attribuer des valeurs à des indices inexistants. |
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
dict['swan'] = 'cygne'
print(dict)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
{'swan': 'cygne', 'horse': 'cheval', 'dog': 'chien', 'cat': 'chat'}
Vous pouvez également insérer un élément dans un dictionnaire en utilisant la méthode |
dict = {"cat": "chat", "dog": "chien", "horse": "cheval"}
dict.update ({"duck": "canard"})
print(dict)
5.10. Travail à faire : Ajouter des items
Ajouter les items suivants :
* pig
: cochon
.
* fish
: poisson
.
* cow
: vache
.
* sheep
: mouton
.
5.11. Supprimer des items
Pour supprimer un item, on utilise l’instruction del
:
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
del dict['dog']
print(dict)
Exécutez le code ci-dessus et vérifiez qu’il produit bien la sortie suivante :
{'cat': 'chat', 'horse': 'cheval'}
Pour supprimer le dernier élément d’un dictionnaire, vous pouvez utiliser la méthode |
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"}
dict.popitem() print(dict) # outputs: {'cat' : 'chat', 'dog' : 'chien'}
Dans les versions de Python antérieures à 3.6.7, la méthode |
6. Travail à faire : Dictionnaire et tuple
Nous avons besoin d’un programme pour évaluer les notes moyennes des élèves :
-
le programme doit demander le nom de l’élève, suivi de sa note unique
-
les noms peuvent être entrés dans n’importe quel ordre
-
la saisie de
Q
termine la saisie des données -
une liste de tous les noms, avec le score moyen évalué, doit ensuite être fournie.
Complétez et évaluer le programme suivant :
# créer le dictionnaire vide schoolClass
while True:
name = input("Entrez le nom de l'élève (ou 'Q' pour stopper): ")
#Si Q est saisie on arrête
if name == ???:
break
note = int(input("Entrez la note de l'élève (0-20): "))
#Si l'élève existe dans le dictionnaire
if ??? in ???:
#Ajouter la note à l'élève sous la forme d'un tuple
schoolClass[???] += ???
else:
#Affecter la note à l'élève sous la forme d'un tuple
schoolClass[???] = ???
#Parcourir la liste des clés triées du dictionnaire
for name in ???:
#Variables pour préparer le calcul de la moyenne
sum = 0
counter = 0
#Parcour du tuple des notes de l'élève en cours
for note in ???:
#sum contient la somme des notes de l'élève en cours
sum ???
#incrémentation de counter : counter contient le nombre de notes de l'élève en cours
counter ???
#Affichage du nom de l'élève et de sa moyenne
print(name, ":", ???)
7. Point clés à retenir : les tuples
Un tuple est un type de données
Les tuples sont des collections de données ordonnées et non mutables (immuables). Ils peuvent être considérés comme des listes immuables. Ils sont écrits entre parenthèses :
Chaque élément d’un tuple peut être d’un type différent (entiers, chaînes, booléens, etc…). De plus, les tuples peuvent contenir d’autres tuples ou listes (et inversement). |
Creation d’un tuple
ATTENTION : Si vous supprimez la virgule, vous direz à Python de créer une variable, pas un tuple :
|
Accéder aux éléments d’un tuple
Vous pouvez accéder aux éléments de tuple en les indexant :
|
Les éléments d’un tuple sont immuables
Les tuples sont immuables, ce qui signifie que vous ne pouvez pas modifier leurs éléments (vous ne pouvez pas ajouter de tuples, ni modifier ou supprimer des éléments de tuple). L’extrait de code suivant provoquera une exception :
Cependant, vous pouvez supprimer un tuple dans son ensemble :
|
Opérations sur un tuple
|
Execices autocorrigés
-
Quelle est la sortie de cet extrait de code :
tup = 1, 2, 3
a, b, c = tup
print(a * b * c)
-
Complétez le code ci-dessous pour compter le nombre de 2 présents dans le tuple :
tup = 1, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9
duplicates = # your code
print(duplicates) # outputs: 4
8. Point clés à retenir : les dictionnaires
Un dictionnaire est un type de données
|
Accès aux éléments dans un dictionnaire
Si vous souhaitez accéder à un élément du dictionnaire, vous pouvez le faire en faisant référence à sa clé à l’intérieur d’une paire de crochets ou en utilisant la méthode
|
Modifier un élément d’un dictionnaire
Si vous souhaitez modifier la valeur associée à une clé spécifique, vous pouvez le faire en vous référant au nom de la clé de l’élément de la manière suivante :
|
Ajouter un élément à un dictionnaire
Si vous souhaitez ajouter un élément (item) à un dictionnaire, vous pouvez le faire en utilisant la méthode
|
Parcourir les éléments d’un dictionnaire
Vous pouvez utiliser la boucle
|
Parcourir les clés d’un dictionnaire
Si vous souhaitez parcourir les clés et les valeurs d’un dictionnaire, vous pouvez utiliser la méthode
|
Vérifier la présence d’une clé dans un dictionnaire
pour vérifier si une clé donnée existe dans un dictionnaire, vous pouvez utiliser le mot clé
|
Supprimer un élément ou un dictionnaire
Vous pouvez utiliser le mot clé
|
Copier un dictionnaire
Pour copier un dictionnaire, utilisez la méthode
|
Execices autocorrigés
-
Compélétez le programme ci-dessous qui convertira le tuple de couleurs en dictionnaire. :
colors = (("green", "#008000"), ("blue", "#0000FF"))
# your code
print(colDict)
- colDict[colors[0]]=colors[1]
- colDict = dict(colors)
- colDict.update(colors)
-
Quelle est la sortie du programme suivant :
colors = {
"white" : (255, 255, 255),
"grey" : (128, 128, 128),
"red" : (255, 0, 0),
"green" : (0, 128, 0)
}
for col, rgb in colors.items():
print(col, ":", rgb)
-
"white" : 255, 255, 255
"grey" : 128, 128, 128,
"red" : 255, 0, 0,
"green" : 0, 128, 0 -
"white" : "255, 255, 255"
"grey" : "128, 128, 128",
"red" : "255, 0, 0",
"green" : "0, 128, 0" -
"white" : (255, 255, 255)
"grey" : (128, 128, 128),
"red" : (255, 0, 0),
"green" : (0, 128, 0)
9. Projet : La météo dans ma ville
Le but du projet est de réaliser une application qui fournie les principales données météorologiques d’une ville de France (ou du monde pourquoi pas !). On s’appui pour cela sur une API (Application Pargrammable Interface) qui offre la possibilité d’obtenir les informations de la base de données ouverte OpenWeather : https://openweathermap.org
9.1. Récupération des données météo
Les données météos sont obtenues depuis l’API de https://openweathermap.org/current grace à une clé d’API. Cette clé est personnelle et gratuite. Vous pouvez utiliser la mienne ou vous créer un compte pour obtenir votre propre clé :
Les données récupérées sont au format JSON :
{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":300,"main":"Drizzle","description":"light intensity drizzle","icon":"09d"}],"base":"stations","main":{"temp":280.32,"pressure":1012,"humidity":81,"temp_min":279.15,"temp_max":281.15},"visibility":10000,"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,"message":0.0103,"country":"GB","sunrise":1485762037,"sunset":1485794875},"id":2643743,"name":"London","cod":200}
9.2. Code de bases
Récupérer le code de base sur github.classroom pour démarrer le Projet
9.3. Accéder au données :
Compléter le code python pour :
-
Afficher le nom et les coordonnées de la ville
-
Afficher la température en °C
-
Afficher l’humidité relative
-
Afficher la pression atmosphérique en hpa
-
Afficher la vitesse du vent et son orientation
9.4. Interroger l’API
Compléter le code pour qu’un utilisateur puisse interroger l’API pour la ville de son choix. On se limitera à la France.