IV. Les dictionnaires▲
IV-A. Les dictionnaires▲
Ce sont des structures de données qui ne sont pas séquentielles : un élément n'est plus repéré à l'aide d'un indice, mais à l'aide d'un nom (sa clef). C'est un champ : couple d'une clef et de sa valeur. La valeur peut être de type quelconque, la clef un nombre, une chaîne ou un t-uplet.
Cette structure de données s'appelle en Python un « dictionnaire » et dans d'autres langages un enregistrement.
Un dictionnaire se définit entre accolades {…}, par la suite des champs (la clef suivie de la valeur, séparées par un deux-points ':').
France =
{'Capitale'
: 'Paris'
, 'Superficie'
: 674800
, 'Population'
: 65000000
, 'Langue'
: 'Français'
}
C'est identique à :
France =
{}
France['Capitale'
] =
'Paris'
France['Superficie'
] =
674800
France['Population'
] =
65000000
France['Langue'
] =
'Français'
L'accès à un élément se fait à l'aide de sa clef :
>>>
France['Capitale'
]
'Paris'
Pour ajouter un champ, affectez une valeur à une nouvelle clef. Pour supprimer un champ, utilisez la fonction del
(
).
>>>
France['Continent'
] =
'Europe'
# ajout d'un champ
>>>
del
(
France['Capitale'
]) # suppression d'un champ
>>>
print
France
{'Continent'
: 'Europe'
, 'Superficie'
: 674800
, 'Population'
: 65000000
, 'Langue'
: 'Français'
}
IV-B. Opérations sur les dictionnaires▲
Les dictionnaires admettent les méthodes suivantes :
IV-C. Exemples▲
IV-C-1. Exemple 1 : liste constituée d'un dictionnaire▲
Pour enregistrer une liste constituée d'un dictionnaire pour chaque élève d'une classe d'effectif 47 élèves, chaque dictionnaire comportant des champs pour les nom, prénom, âge et seconde langue :
eleves =
[]
for
i in
range(
47
):
dico =
{}
dico['Nom'
] =
raw_input(
'Nom ? '
)
dico['Prénom'
] =
raw_input(
'Prénom ? '
)
dico['Age'
] =
int(
raw_input(
'Age ? '
))
dico['LV2'
] =
raw_input(
'Seconde Langue ?'
)
eleves.append
(
dico)
Remarque : le dictionnaire dico est une variable locale, une nouvelle est créée à chaque passage dans la boucle for
qui n'a plus rien à voir avec les définitions de dico précédentes. Écrivons maintenant une fonction qui recherche si un élève de nom donné est dans la classe et si oui, retourne son dictionnaire.
def
search
(
nom):
for
e in
eleves : # pour chaque élément de la liste
if
e['Nom'
] ==
nom :
return
e
return
False
IV-C-2. Exemple 2 : conversion majuscules▲
Écrire une fonction qui convertit une chaîne de caractères de minuscule à majuscule.
On utilisera la table de caractères ASCII : des caractères codés par un nombre entre 0 et 255 (0x00 et 0xFF, un octet) :
- chr
(
n) retourne le caractère ASCII de code n ; - ord
(
'a'
) renvoie le code ASCII du caractère 'a' ; - Les lettres minuscules (et majuscules) sont rangées dans l'ordre alphabétique.
À partir du code ASCII ord(
'x'
) d'un caractère 'x', le code ASCII du caractère converti en majuscule est : ord(
'x'
)+
ord(
'A'
)-
ord(
'a'
).
Réponse : cliquez sur l'icône .
Exemple d'appel de la fonction majuscule() :
>>>
majuscule
(
"Bonjour l'Univers"
)
"BONJOUR L'UNIVERS"
Encore une fois, nous réinventons la roue à titre d'exercice puisque le module standard string nous propose une méthode upper
(
s):
>>>
from
string import
upper
>>>
upper
(
"Bonjour l'Univers"
)
"BONJOUR L'UNIVERS"
IV-C-3. Exemple 3 : découpage en mots▲
Écrire une fonction qui prend en paramètre une chaîne de caractères et retourne la liste de ces mots. Les mots sont délimités par les limites de la liste et par les espaces.
Réponse : cliquez sur l'icône .
Exemple :
>>>
tranche
(
'Quels sont les mots de cette longue phrase?'
)
['Quels'
, 'sont'
, 'les'
, 'mots'
, 'de'
, 'cette'
, 'longue'
, 'phrase?'
]
Depuis le temps, Python a aussi la méthode split() en magasin, beaucoup plus élaborée :
>>>
"Quels sont les mots de cette longue phrase?"
.split
(
)
['Quels'
, 'sont'
, 'les'
, 'mots'
, 'de'
, 'cette'
, 'longue'
, 'phrase?'
]
IV-C-4. Exemple 4 : conversion de dates▲
Écrire un programme qui convertit une date saisie sous la forme « 3 décembre 2013 » en « 3/12/2013 ». On utilisera les fonctions que l'on vient d'écrire.
Réponse : cliquez sur l'icône .
un backslash permet d'écrire une instruction sur plusieurs lignes.
Exemple :
>>>
conversion_date
(
'3 janvier 2013'
)
'3/01/2013'
fonctionne même en présence de plusieurs espaces successifs (voir tranche()) ou de différentes casses.
Pour la manipulation des dates, vous trouverez de nombreuses fonctions et méthodes dans les modules standards datetime et calendar.
IV-C-5. Exemple 5 : le crible d'Ératosthène▲
Écrire une fonction qui prend en paramètre un entier positif n et retourne la liste des nombres premiers inférieurs ou égaux à n en appliquant le crible d'Ératosthène.
Ératosthène, philosophe, géographe, astronome et mathématicien grec du IIIe siècle avant J.C. est célèbre pour son calcul de la circonférence de la Terre, ainsi que pour son crible, un des premiers tests de primalité.
Le crible d'Ératosthène commence à barrer dans la liste des entiers de 2 à n tous les multiples stricts des nombres non barrés qui sont successivement lus. À la fin, tous les nombres non barrés sont premiers.
Réponse : cliquez sur l'icône .
Exemple :
>>>
erathostene
(
100
)
[2
, 3
, 5
, 7
, 11
, 13
, 17
, 19
, 23
, 29
, 31
, 37
, 41
, 43
, 47
, 53
, 59
, 61
, 67
, 71
, 73
, 79
, 83
, 89
, 97
]