#!/usr/bin/env python # coding: utf-8 #
#
TP 5 (dictionnaires) : éléments de correction
# # 2. Exercices d'applications #
# Exercice 1 : Morse #
# In[1]: from morse import * # **(a)** On peut par exemple écrire, si on connaît la méthode ```split()``` : # In[2]: def trad_to_morse(message): traduction = '' # chaine vide L = message.split() # séparation des mots for mot in L: # on parcourt la liste des mots for lettre in mot: # on parcourt chaque lettre du mot traduction += dict_morse[lettre] # ajout de la lettre traduction += ' ' # espace entre chaque lettre de morse traduction += ' ' # triple espace return traduction[:-4] # on enleve les dernieres espaces # In[3]: trad_to_morse('HELLO WORLD') # Sinon, on peut construire le message codé en Morse lettre par lettre, en gérant les espaces : # In[4]: def trad_to_morse(message): traduction = '' # chaine vide for lettre in message: if lettre == " ": traduction += " " else: traduction += dict_morse[lettre] traduction += ' ' # espace return traduction[:-1] # In[5]: trad_to_morse('HELLO WORLD') # **(b)** On peut par exemple écrire : # In[6]: def inverser_dict(dico): inverse = dict() # nouveau dictionnaire for cle in dico: valeur = dico[cle] inverse[valeur] = cle return inverse # In[7]: dict_morse_inverse = inverser_dict(dict_morse) # On peut également utiliser un dictionnaire défini par compréhension ; l'exemple suivant retrouve le dictionnaire original : # In[8]: {valeur:cle for (cle,valeur) in dict_morse_inverse.items()} # **(c)** On peut alors décoder le Morse : # In[9]: def trad_from_morse(message): traduction = '' # chaine vide L = message.split(' ') #séparation des mots for mot in L: M = mot.split() # séparation des lettres for lettre in M: traduction += dict_morse_inverse[lettre] traduction += ' ' # espace après chaque mot return traduction[:-1] # sauf la dernière espace # In[10]: trad_from_morse(message_mystere) #
# Exercice 2 : occurrences #
# In[11]: mot = "abracadabra" dico = dict() for lettre in mot: if lettre in dico: dico[lettre] += 1 else: dico[lettre] = 1 print(dico) #
# Exercice 4 : Analyse d'un fichier texte #
#
# # - Placer le fichier LaFontaine.txt dans le même répertoire que votre fichier python # # - Exécuter une fois votre fichier python avec "Démarrer le script" # # - Vous aurez dès lors accès à votre fichier sans avoir besoin de saisir son chemin d'accès complet #
# **(a)** # In[12]: def occurrences(a, s): c = 0 for l in s: if l == a: c += 1 return c # **(b)** # In[13]: montxt = open('LaFontaine.txt', 'r') s = montxt.read() montxt.close() s = s.lower() # en minuscules # In[14]: print(s) # **(c)** # In[15]: alphabet = 'abcdefghijklmnopqrstuvwxyz' dict_occurences = dict() for lettre in alphabet: dict_occurences[lettre] = occurrences(lettre, s) print(dict_occurences) # On peut également procéder par compréhension : # In[16]: dict_occurences = {lettre:occurrences(lettre, s) for lettre in alphabet} # In[17]: print(dict_occurences) # **(d)** # In[18]: def pourcentages(dico): pourcent = dict() total = 0 for cle in dico: total += dico[cle] for cle in dico: pourcent[cle] = round(dico[cle] / total * 100, 2) return pourcent # In[19]: dico_pourcent=pourcentages(dict_occurences) print(dico_pourcent) # On vérifie que l'on a bien 100% au total, aux erreurs d'arrondi près : # In[20]: round(sum(pourcent for pourcent in dico_pourcent.values()), 2) # On peut même faire un histogramme des fréquences (exprimées en pourcentages) : # In[21]: import matplotlib.pyplot as plt plt.bar(dico_pourcent.keys(), dico_pourcent.values(), width=0.7, color='g') plt.show() #
# Exercice 4 : base de données des pays #
# **(a)** On complète le code donné dans l'énoncé : # In[22]: capitale = {} fichier = open('countries.csv', 'r') fichier.readline() # on passe la première ligne, qui contient les titres des colonnes for ligne in fichier: ligne = ligne.split(",") capitale[ligne[1]] = ligne[2] fichier.close() # In[23]: print(capitale["France"]) # **(b)** On crée maintenant le dictionnaire des continents : # In[24]: continent = {} monnaie = {} fichier = open('countries.csv', 'r') fichier.readline() for ligne in fichier: ligne = ligne.split(",") continent[ligne[1]] = ligne[5] monnaie[ligne[1]] = ligne[7].strip() fichier.close() # In[25]: monnaie # **(c)** $\bullet$ **Noms des pays d’Océanie :** # In[26]: for pays in continent: if continent[pays] == 'OC': print(pays) # **$\bullet$ Pays dont la monnaie est l’euro :** # In[27]: for pays in monnaie: if monnaie[pays] == 'Euro': print(pays) # **(d)** **Pays non-européens dont la monnaie est l’euro :** # In[27]: for pays in monnaie: if monnaie[pays] == 'Euro' and continent[pays] != 'EU': print(pays) # **(e)** **Dictionnaire** ```{continent:liste des monnaies}``` **:** # In[28]: continent_monnaies = dict() for pays in monnaie: cont = continent[pays] if cont not in continent_monnaies: continent_monnaies[cont] = [monnaie[pays]] else: if monnaie[pays] not in continent_monnaies[cont]: continent_monnaies[cont].append(monnaie[pays]) # In[29]: print(continent_monnaies) #
# Exercice 5 : Quizz des capitales #
# In[30]: import random as rd # In[31]: essai = 3 parties = 5 point = 0 for i in range(parties): pays = rd.choice(list(capitale.keys())) cap = capitale[pays] cpt = 0 reponse = '' print("Partie n°{} :".format(i + 1)) print("Pays : {} ; quelle est sa capitale ?".format(pays)) while cpt < essai and reponse != cap: cpt += 1 reponse = input("Essai n°{} : ".format(cpt)) if reponse != cap: print('Perdu ! La bonne réponse était : {}.'.format(cap), end='\n\n') else: print("Gagné !", end='\n\n') point += 1 print("Score final : {0} bonnes réponses sur {1} questions.".format(point, parties))