Python

Dictionnaires
Exercices pour débuter

Consignes communes à chaque partie

Dans ce TP, les différents exercices sont indépendants.
Enregistrez chaque fichier dans le dossier [Dictionnaires] sous le nom donné à l'exercice : Titanic.py, Scrabble.py, Occurence.py..

Dans les exercices 3 et suivants, le programme principal contient un appel au module doctest :


				##----- Programme principal et tests -----##
				if __name__ == '__main__':
					import doctest
					doctest.testmod()
				
				

Dans le « main », il faudra penser à élaborer un plan de test (avec des affichages console). Pensez à demander au professeur de valider ce plan de test...

Dictionnaire Français / Anglais

On souhaite réaliser un dictionnaire Français / Anglais, afin que l'utilisateur demande un mot en français et l'ordinateur répond par la traduction anglaise du mot.

Question 1 : les données

Définir un dictionnaire dico_fr_en de 10 élements permettant cette traduction

Question 2

Faire une fonction traduction() qui prend comme argument le terme français et nous renvoie le terme anglais.

Question 3

Enrichir votre programme avec une demande de question à l'utilisateur

Titanic

Exercice extrait de cette page

Le Titanic appareille de Southampton (Angleterre) le mercredi 10 avril à 12 h 15 .
Six heures plus tard, à 18 h 15, il fait escale dans la rade de Cherbourg. Il y débarque 24 passagers et en embarque 274, amenés par les transbordeurs Nomadic et Traffic. Il appareille à 20 h 10.
Le Titanic fait route vers l'Irlande. Il arrive à Queenstown (aujourdhui Cobh) le 11 avril à 11 h 30. Il débarque 7 passagers et en embarque 120. À 13 h 30, le paquebot appareille et entame sa traversée de l'Atlantique vers New York.
Le 14 avril, à 23 h 40 (heure locale, GMT-3), il percute un iceberg au large de Terre-Neuve. Il sombre le 15 avril à 2 h 20, causant la mort de 1 524 personnes.
(source wikimanche)

Question 1 : des données

Ce fichier titanic.csv donne des informations sur un certain nombre de passagers du Titanic.
Il s'agit d'un fichier de données avec la virgule comme séparateur et la première ligne comme descripteurs.

  1. Ouvrez ce fichier avec LibreOffice Calc
  2. Identifier les descripteurs :
    • Classe (il y en avait 3, voir ici)
    • Survivant
    • Lieu d'embarquement

Question 2 : import du fichier avec Python

Le script ci-dessous, ouvre le fichier 'titanic.csv' et stocke chaque ligne sous forme de dictionnaire (avec les descripteurs comme clés) dans une liste.

					
import csv
reader = csv.DictReader(open('titanic.csv', 'r'))
titanic = []
for row in reader:
    titanic.append(dict(row))
					
				
  1. Exécutez ce code
  2. Rajoutez ce qu'il faut pour :
    • Connaître le nombre de passager de ce fichier
    • Vérifier que le passager 54 est :
      Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson) agée de 29 ans, embarquée à Southampton en classe 2 et a survécu au naufrage
  • Une piste ?
  • Solution
Connaître le nombre de passager correspond à quoi concernant le dictionnaire ?

import csv
reader = csv.DictReader(open('titanic.csv', 'r'))
titanic = []
for row in reader:
    titanic.append(dict(row))

print(len(titanic))
print(titanic[53])						

Ce qui nous donne cela :
891
{'PassengerId': '54', 'Survived': '1', 'Pclass': '2', 'Name': 'Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)', 'Sex': 'female', 'Age': '29', 'SibSp': '1', 'Parch': '0', 'Ticket': '2926', 'Fare': '26', 'Cabin': '', 'Embarked': 'S'}

Question 3 : déterminer le nombre de survivant

  1. Écrire un script qui détermine le nombre de survivant
Attention...
  • La valeur de la clé 'Survived' est de type string
  • Pour l'atteindre on utilise l'instruction : titanic[n° de ligne]['Survived']
  • Une piste ?
  • Solution 1
  • Solution 2
On pourra utiliser une variable compteur qui ajoute 1 si on trouve un survivant...
En parcourant la liste ( indice )et en testant la clé 'Survived' avec un compteur on trouve 342 :

import csv
reader = csv.DictReader(open('titanic.csv', 'r'))
titanic = []
for row in reader:
    titanic.append(dict(row))
compteur=0    
for i in range(0,len(titanic),1):
  if titanic[i]['Survived']=='1':
    compteur=compteur+1
    
print(compteur)
Via un simple parcours de liste

import csv
reader = csv.DictReader(open('titanic.csv', 'r'))
titanic = []
for row in reader:
    titanic.append(dict(row))
compteur=0    
for ligne in titanic:
  if ligne['Survived']=='1':
    compteur=compteur+1
    
print(compteur)

Question 4 : en complément...

  1. Écrire un programme qui affiche le pourcentage de survivants par classe
  2. Écrire un programme qui donne le nombre de survivants embarqués à Cherbourg

Scrabble

Vous pouvez télécharger ici le fichier à compléter pour cette partie.
On dispose du dictionnaire suivant, dans lequel chaque lettre de l'alphabet (en majuscules) est associé au nombre de points qui lui est attribué au scrabble :


scrabble = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4,
            'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1,
            'P': 3, 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4,
            'W': 10, 'X': 10, 'Y': 10, 'Z': 10}

				
				

Question 1

Complétez la définition de la fonction valeur_mot() qui prend en paramètre une chaîne de caractères constituée de lettres majuscules et qui renvoie le nombre de points que rapporterait ce mot au scrabble.


def valeur_mot(chaine):
    """
    chaine – str, une chaîne de caractères constituées de lettres majuscules
    Sortie: int – nombre de points de ce mot au scrabble
    >>> valeur_mot("PYTHON")
    20
    >>> valeur_mot("JAVASCRIPT")
    24
    """
    # TODO
				
				

Question 2

Complétez la définition de la fonction meilleure_lettre() qui prend en paramètre un tableau dont les éléments sont des lettres majuscules et qui renvoie celle ayant la plus forte valeur au scrabble.
En cas d'égalité, c'est la lettre ayant l'indice le plus élevé dans le tableau qui est renvoyée.

					
def meilleure_lettre(tab):
    """
    tab – list, tableau NON VIDE de caractères 
    Sortie: str – caractère de tab ayant la plus forte valeur au scrabble
            En cas d'égalité, caractère ayant l'indice le plus grand dans tab
    >>> meilleure_lettre(['B', 'A', 'K', 'D'])
    'K'
    >>> meilleure_lettre(['A', 'E', 'I'])
    'I's
    """
    # TODO