#!/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))