TP 6 : éléments de correction
Exercice 1
In [1]:
jours_par_mois = {'janvier': 31, 'février': 28, 'mars': 31, 'avril': 30, 'mai': 31, 'juin': 30, 'juillet': 31, 'août': 31, 'septembre': 30, 'octobre': 31, 'novembre': 30, 'décembre': 31}
print(jours_par_mois)
{'janvier': 31, 'février': 28, 'mars': 31, 'avril': 30, 'mai': 31, 'juin': 30, 'juillet': 31, 'août': 31, 'septembre': 30, 'octobre': 31, 'novembre': 30, 'décembre': 31}
Exercice 2

1.

In [2]:
dict_morse={
    'A':'·-',
    'B':'-···',
    'C':'-·-·',
    'D':'-··',
    'E':'·',
    'F':'··-·',
    'G':'--·',
    'H':'····',
    'I':'··',
    'J':'·---',
    'K':'-·-',
    'L':'·-··',
    'M':'--',
    'N':'-·',
    'O':'---',
    'P':'·--·',
    'Q':'--·-',
    'R':'·-·',
    'S':'···',
    'T':'-',
    'U':'··-',
    'V':'···-',
    'W':'·--',
    'X':'-··-',
    'Y':'-·--',
    'Z':'--··',
    }

2.

In [3]:
def trad_to_morse(message) :
    trad = ''
    phrase = message.split()
    for mot in phrase :
        for caractere in mot :
            trad = trad + dict_morse[caractere] + ' '
        trad = trad + '  '
    return trad[:-3] # on enlève les derniers espaces
In [4]:
trad_to_morse('HELLO WORLD')
Out[4]:
'···· · ·-·· ·-·· ---   ·-- --- ·-· ·-·· -··'

3.a) et 3.b)

In [5]:
def inverser_dict(dico) :
    dico_inv = {}
    for cle in dico :
        valeur = dico[cle]
        dico_inv[valeur] = cle
    return dico_inv
In [6]:
inverser_dict(dict_morse)
Out[6]:
{'·-': 'A',
 '-···': 'B',
 '-·-·': 'C',
 '-··': 'D',
 '·': 'E',
 '··-·': 'F',
 '--·': 'G',
 '····': 'H',
 '··': 'I',
 '·---': 'J',
 '-·-': 'K',
 '·-··': 'L',
 '--': 'M',
 '-·': 'N',
 '---': 'O',
 '·--·': 'P',
 '--·-': 'Q',
 '·-·': 'R',
 '···': 'S',
 '-': 'T',
 '··-': 'U',
 '···-': 'V',
 '·--': 'W',
 '-··-': 'X',
 '-·--': 'Y',
 '--··': 'Z'}

On aurait pu également utiliser un dictionnaire défini par compréhension :

In [7]:
def inverser_dict(dico) :
    dico_inv = {v: c for (c,v) in dico.items()}
    return dico_inv
In [8]:
inverser_dict(dict_morse)
Out[8]:
{'·-': 'A',
 '-···': 'B',
 '-·-·': 'C',
 '-··': 'D',
 '·': 'E',
 '··-·': 'F',
 '--·': 'G',
 '····': 'H',
 '··': 'I',
 '·---': 'J',
 '-·-': 'K',
 '·-··': 'L',
 '--': 'M',
 '-·': 'N',
 '---': 'O',
 '·--·': 'P',
 '--·-': 'Q',
 '·-·': 'R',
 '···': 'S',
 '-': 'T',
 '··-': 'U',
 '···-': 'V',
 '·--': 'W',
 '-··-': 'X',
 '-·--': 'Y',
 '--··': 'Z'}

4.a)

In [9]:
def morse_to_alpha(message) :
    trad = ''
    phrase = message.split('  ')
    for mot in phrase :
        caracteres = mot.split()
        for lettre in caracteres :
            trad = trad + inverser_dict(dict_morse)[lettre]
        trad = trad + ' '
    return trad[:-1]

4.b)

In [10]:
message_mystere = '·-·· · ···    ··· ·- -· --· ·-·· --- - ···    ·-·· --- -· --· ···    -·· · ···    ···- ·· --- ·-·· --- -· ···    -·· ·    ·-··    ·- ··- - --- -- -· ·    -··· · ·-· -·-· · -· -    -- --- -·    -·-· --- · ··- ·-·    -··    ··- -· ·    ·-·· ·- -· --· ··- · ··- ·-·    -- --- -· --- - --- -· ·'
morse_to_alpha(message_mystere)
Out[10]:
'LES  SANGLOTS  LONGS  DES  VIOLONS  DE  L  AUTOMNE  BERCENT  MON  COEUR  D  UNE  LANGUEUR  MONOTONE'
Exercice 3
In [11]:
def occurrences_lettre(mot) :
    dico = {}
    for lettre in mot :
        if lettre in dico :
            dico[lettre] = dico[lettre] + 1
        else :
            dico[lettre] = 1
    return dico
In [12]:
occurrences_lettre('abracadabra')
Out[12]:
{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
Exercice 4

2.

In [13]:
def occurrences(a, s) :
    compteur = 0
    for caract in s :
        if caract == a :
            compteur += 1
    return compteur
In [14]:
occurrences('a', 'abracadabra')
Out[14]:
5

3.a)

In [15]:
texte_LaFontaine = open('LaFontaine_utf8.txt', 'r', encoding = 'utf-8')
texte = texte_LaFontaine.read()
texte_LaFontaine.close()

3.b)

In [16]:
texte = texte.lower()

4.

In [17]:
alphabet = 'abcdefghijklmnopqrstuvwxyz'

dico_LaFontaine = {}
for lettre in alphabet :
    dico_LaFontaine[lettre] = occurrences(lettre, texte)
print(dico_LaFontaine)
{'a': 77, 'b': 7, 'c': 23, 'd': 28, 'e': 156, 'f': 12, 'g': 16, 'h': 6, 'i': 83, 'j': 6, 'k': 0, 'l': 63, 'm': 18, 'n': 59, 'o': 57, 'p': 27, 'q': 17, 'r': 84, 's': 61, 't': 93, 'u': 69, 'v': 24, 'w': 0, 'x': 4, 'y': 2, 'z': 2}

On pouvait également définir ce dictionnaire par compréhension.

In [18]:
dico_LaFontaine = {lettre: occurrences(lettre, texte) for lettre in alphabet}
print(dico_LaFontaine)
{'a': 77, 'b': 7, 'c': 23, 'd': 28, 'e': 156, 'f': 12, 'g': 16, 'h': 6, 'i': 83, 'j': 6, 'k': 0, 'l': 63, 'm': 18, 'n': 59, 'o': 57, 'p': 27, 'q': 17, 'r': 84, 's': 61, 't': 93, 'u': 69, 'v': 24, 'w': 0, 'x': 4, 'y': 2, 'z': 2}

5.a)

In [19]:
def pourcentages(dico):
    pourcent = {}
    total = 0
    for cle in dico:
        total += dico[cle]
    for cle in dico:
        pourcent[cle] = round(dico[cle] / total * 100, 2)
    return pourcent

On pouvait, encore une fois, définir le dictionnaire souhaité par compréhension.

In [20]:
def pourcentages(dico) :
    n = sum( list( dico.values() ) )
    dico_pourcentage = {cle: round(dico[cle]/n, 2)*100 for cle in dico}
    return dico_pourcentage

5.b)

In [21]:
dico_pourcent = pourcentages(dico_LaFontaine)
print(dico_pourcent)
{'a': 8.0, 'b': 1.0, 'c': 2.0, 'd': 3.0, 'e': 16.0, 'f': 1.0, 'g': 2.0, 'h': 1.0, 'i': 8.0, 'j': 1.0, 'k': 0.0, 'l': 6.0, 'm': 2.0, 'n': 6.0, 'o': 6.0, 'p': 3.0, 'q': 2.0, 'r': 8.0, 's': 6.0, 't': 9.0, 'u': 7.000000000000001, 'v': 2.0, 'w': 0.0, 'x': 0.0, 'y': 0.0, 'z': 0.0}

On vérifie que l'on a bien 100% au total, aux erreurs d'arrondi près :

In [22]:
round(sum(pourcent for pourcent in dico_pourcent.values()), 2)
Out[22]:
100.0

On peut même faire un histogramme des fréquences.

In [23]:
import matplotlib.pyplot as plt

plt.bar(dico_pourcent.keys(), dico_pourcent.values(), width=0.7, color='g')
plt.show()
No description has been provided for this image

6.

In [24]:
def occurrences_chaine(chaine, message) :
    n = len(message)
    m = len(chaine)
    compteur = 0
    for i in range(n) :
        j = 1
        if message[i] == chaine[0] :
            while i+j < n and j < m and message[i+j] == chaine[j] :
                j += 1
        if j == m :
            compteur += 1
    return compteur
In [25]:
occurrences_chaine('tortue', texte)
Out[25]:
3
Exercice 5

1.

In [26]:
import csv

fichier = open('countries.csv', 'r', encoding = 'utf-8')
lecture = csv.reader(fichier)
capitale = {ligne[1]: ligne[2] for ligne in lecture}

print(capitale['France'])
Paris

2. Le dictionnaire des continents :

In [27]:
fichier = open('countries.csv', 'r', encoding = 'utf-8')
lecture = csv.reader(fichier)
continent = {ligne[1]: ligne[5] for ligne in lecture}
fichier.close()

Le dictionnaire des monnaies :

In [28]:
fichier = open('countries.csv', 'r', encoding = 'utf-8')
lecture = csv.reader(fichier)
monnaie = {ligne[1]: ligne[7] for ligne in lecture}    
fichier.close()

3. La liste des pays de l'Océanie :

In [29]:
pays_OC = []
for pays in continent :
    if continent[pays] == 'OC' :
        pays_OC.append(pays)
print(pays_OC)
['American Samoa', 'Australia', 'Cook Islands', 'Christmas Island', 'Fiji', 'Micronesia', 'Guam', 'Kiribati', 'Marshall Islands', 'Northern Mariana Islands', 'New Caledonia', 'Norfolk Island', 'Nauru', 'Niue', 'New Zealand', 'French Polynesia', 'Papua New Guinea', 'Pitcairn', 'Palau', 'Solomon Islands', 'Tokelau', 'Timor Leste', 'Tonga', 'Tuvalu', 'United States Minor Outlying Islands', 'Vanuatu', 'Wallis and Futuna', 'Samoa']

La liste des pays dont la monnaie est l'euro :

In [30]:
pays_euro = []
for pays in monnaie :
    if monnaie[pays] == 'Euro' :
        pays_euro.append(pays)
print(pays_euro)
['Andorra', 'Austria', 'Aland Islands', 'Belgium', 'Saint Barthelemy', 'Cyprus', 'Germany', 'Estonia', 'Spain', 'Finland', 'France', 'French Guiana', 'Guadeloupe', 'Greece', 'Ireland', 'Italy', 'Kosovo', 'Lithuania', 'Luxembourg', 'Latvia', 'Monaco', 'Montenegro', 'Saint Martin', 'Martinique', 'Malta', 'Netherlands', 'Saint Pierre and Miquelon', 'Portugal', 'Reunion', 'Slovenia', 'Slovakia', 'San Marino', 'French Southern Territories', 'Vatican', 'Mayotte']

4.

In [31]:
pays_nonEU_euro = []
for pays in continent :
    if continent[pays] != 'EU' and monnaie[pays] == 'Euro' :
        pays_nonEU_euro.append(pays)
print(pays_nonEU_euro)
['Saint Barthelemy', 'French Guiana', 'Guadeloupe', 'Saint Martin', 'Martinique', 'Saint Pierre and Miquelon', 'Reunion', 'French Southern Territories', 'Mayotte']

5.

In [32]:
dico_cont_mon = {}

for pays in continent :
    cont = continent[pays]
    mon = monnaie[pays]
    if cont not in dico_cont_mon :
        dico_cont_mon[cont] = [mon]
    else :
        if mon not in dico_cont_mon[cont] :
            dico_cont_mon[cont].append(mon)
del dico_cont_mon['Continent']

print(dico_cont_mon)
{'EU': ['Euro', 'Lek', 'Marka', 'Lev', 'Belarusian ruble', 'Franc', 'Koruna', 'Krone', 'Pound', 'Kuna', 'Forint', 'Krona', 'Leu', 'Denar', 'Zloty', 'Dinar', 'Ruble', 'Hryvnia'], 'AS': ['Dirham', 'Afghani', 'Dram', 'Manat', 'Taka', 'Dinar', 'Dollar', 'Ngultrum', 'Yuan Renminbi', 'Lari', 'Rupiah', 'Shekel', 'Rupee', 'Rial', 'Yen', 'Som', 'Riels', 'Won', 'Tenge', 'Kip', 'Pound', 'Kyat', 'Tugrik', 'Pataca', 'Rufiyaa', 'Ringgit', 'Peso', 'Baht', 'Somoni', 'Lira', 'Dong'], 'NA': ['Dollar', 'Guilder', 'Euro', 'Colon', 'Peso', 'Krone', 'Quetzal', 'Lempira', 'Gourde', 'Cordoba', 'Balboa'], 'AF': ['Kwanza', 'Franc', 'Pula', 'Escudo', 'Dinar', 'Pound', 'Dirham', 'Nakfa', 'Birr', 'Cedi', 'Dalasi', 'Shilling', 'Dollar', 'Loti', 'Ariary', 'Ouguiya', 'Rupee', 'Kwacha', 'Metical', 'Naira', 'Euro', 'Leone', 'Dobra', 'Lilangeni', 'Rand'], 'AN': ['', 'Krone', 'Pound', 'Dollar', 'Euro'], 'SA': ['Peso', 'Boliviano', 'Real', 'Dollar', 'Pound', 'Euro', 'Sol', 'Guarani', 'Bolivar Soberano'], 'OC': ['Dollar', 'Franc', 'Kina', "Pa'anga", 'Vatu', 'Tala']}
Exercice 6

2.

In [33]:
import random as rd

pays = rd.choice(list(capitale.keys()))
essai = input('Pays ' + str(pays) + ' quelle est sa capitale : ')
if essai == capitale[pays] :
    print('Gagné !')
else :
    print('Perdu ! La bonne réponse était : ' + str(capitale[pays]))
Pays Thailand quelle est sa capitale : Bangkok
Gagné !

3.

In [34]:
nb_parties = 5

compteur = 0

for i in range(nb_parties) :
    print('Partie n°' + str(i+1))
    pays = rd.choice(list(capitale.keys()))
    essai = input('Pays ' + str(pays) + '. Quelle est sa capitale ? ')
    if essai == capitale[pays] :
        compteur += 1
        print('Gagné !')
    else :
        print('Perdu ! La bonne réponse était : ' + str(capitale[pays]))
print('Vous avez gagné ' + str(compteur) + ' parties.')
Partie n°1
Pays Curacao. Quelle est sa capitale ? ?
Perdu ! La bonne réponse était :  Willemstad
Partie n°2
Pays Venezuela. Quelle est sa capitale ? Caracas
Gagné !
Partie n°3
Pays South Africa. Quelle est sa capitale ? Pretoria
Gagné !
Partie n°4
Pays Croatia. Quelle est sa capitale ? Zagreb
Gagné !
Partie n°5
Pays Curacao. Quelle est sa capitale ? Willemstad
Perdu ! La bonne réponse était :  Willemstad
Vous avez gagné 3 parties.

4.

In [35]:
nb_parties = 5
nb_essais = 3

compteur = 0

for i in range(nb_parties) :
    pays = rd.choice(list(capitale.keys()))
    print('Partie n°' + str(i+1) + '. Pays : ' + str(pays) + '. Quelle est sa capitale ?')
    
    j = 0
    essai = ''
    
    while j < nb_essais and essai != capitale[pays] :
        essai = input('Essai n°' + str(j+1) + ' : ')
        if essai == capitale[pays] :
            compteur += 1
            print('Gagné !', end='\n\n')
        else :
            print('Perdu !')
        j = j + 1
    if essai != capitale[pays] :
        print('La bonne réponse était : ' + str(capitale[pays]), end='\n\n')
        
print('Vous avez gagné ' + str(compteur) + ' parties.')
Partie n°1. Pays : Marshall Islands. Quelle est sa capitale ?
Essai n°1 : 
Perdu !
Essai n°2 : 
Perdu !
Essai n°3 : 
Perdu !
La bonne réponse était : Majuro

Partie n°2. Pays : U.S. Virgin Islands. Quelle est sa capitale ?
Essai n°1 : 
Perdu !
Essai n°2 : 
Perdu !
Essai n°3 : 
Perdu !
La bonne réponse était : Charlotte Amalie

Partie n°3. Pays : Qatar. Quelle est sa capitale ?
Essai n°1 : Doha
Gagné !

Partie n°4. Pays : Tonga. Quelle est sa capitale ?
Essai n°1 : 
Perdu !
Essai n°2 : 
Perdu !
Essai n°3 : 
Perdu !
La bonne réponse était : Nuku'alofa

Partie n°5. Pays : Sint Maarten. Quelle est sa capitale ?
Essai n°1 : Philipsbourg
Perdu !
Essai n°2 : Philipsburg
Gagné !

Vous avez gagné 2 parties.