IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Programmation Python pour les scientifiques

Listes et autres structures de données - Cours avec exercices corrigés


précédentsommairesuivant

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 ':').

 
Sélectionnez
France = {'Capitale' : 'Paris', 'Superficie' : 674800, 'Population' : 65000000, 'Langue' : 'Français'}

C'est identique à :

 
Sélectionnez
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 :

 
Sélectionnez
>>> France['Capitale']
'Paris'

Pour ajouter un champ, affectez une valeur à une nouvelle clef. Pour supprimer un champ, utilisez la fonction del().

 
Sélectionnez
>>> 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 :

dict.keys()

retourne la liste des clefs du dictionnaire dict

dict.values()

retourne la liste des valeurs du dictionnaire dict

dict.items()

retourne la liste des champs (key, value) de dict

dict.copy()

retourne une copie du dictionnaire

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 :

 
Sélectionnez
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.

 
Sélectionnez
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 Image non disponible.

 
Cacher/Afficher le codeSélectionnez

Exemple d'appel de la fonction majuscule() :

 
Sélectionnez
>>> 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):

 
Sélectionnez
>>> 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 Image non disponible.

 
Cacher/Afficher le codeSélectionnez

Exemple :

 
Sélectionnez
>>> 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 :

 
Sélectionnez
>>> "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 Image non disponible.

 
Cacher/Afficher le codeSélectionnez

un backslash permet d'écrire une instruction sur plusieurs lignes.

Exemple :

 
Sélectionnez
>>> 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 Image non disponible.

 
Cacher/Afficher le codeSélectionnez

Exemple :

 
Sélectionnez
>>> 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]

précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Jean-Philippe PREAUX. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.