from morse import *
(a) On peut par exemple écrire, si on connaît la méthode split()
:
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
trad_to_morse('HELLO WORLD')
'···· · ·-·· ·-·· --- ·-- --- ·-· ·-·· -··'
Sinon, on peut construire le message codé en Morse lettre par lettre, en gérant les espaces :
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]
trad_to_morse('HELLO WORLD')
'···· · ·-·· ·-·· --- ·-- --- ·-· ·-·· -··'
(b) On peut par exemple écrire :
def inverser_dict(dico):
inverse = dict() # nouveau dictionnaire
for cle in dico:
valeur = dico[cle]
inverse[valeur] = cle
return inverse
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 :
{valeur:cle for (cle,valeur) in dict_morse_inverse.items()}
{'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': '--··'}
(c) On peut alors décoder le Morse :
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
trad_from_morse(message_mystere)
'LES SANGLOTS LONGS DES VIOLONS DE L AUTOMNE BERCENT MON COEUR D UNE LANGUEUR MONOTONE'
mot = "abracadabra"
dico = dict()
for lettre in mot:
if lettre in dico:
dico[lettre] += 1
else:
dico[lettre] = 1
print(dico)
{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
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)
def occurrences(a, s):
c = 0
for l in s:
if l == a:
c += 1
return c
(b)
montxt = open('LaFontaine.txt', 'r')
s = montxt.read()
montxt.close()
s = s.lower() # en minuscules
print(s)
rien ne sert de courir ; il faut partir a point. le lievre et la tortue en sont un temoignage. gageons, dit celle-ci, que vous n'atteindrez point si tot que moi ce but. si tot ? etes-vous sage ? repartit l'animal leger. ma commere, il vous faut purger. avec quatre grains d'ellebore. sage ou non, je parie encore. ainsi fut fait : et de tous deux on mit pres du but les enjeux. savoir quoi, ce n'est pas l'affaire ; ni de quel juge l'on convint. notre lievre n'avait que quatre pas a faire ; j'entends de ceux qu'il fait lorsque pret d'etre atteint il s'eloigne des chiens, les renvoie aux calendes, et leur fait arpenter les landes. ayant, dis-je, du temps de reste pour brouter, pour dormir, et pour ecouter d'ou vient le vent, il laisse la tortue aller son train de senateur. elle part, elle s'evertue ; elle se hâte avec lenteur. lui cependant meprise une telle victoire ; tient la gageure a peu de gloire ; croit qu'il y va de son honneur de partir tard. il broute, il se repose, il s'amuse a toute autre chose qu'a la gageure. a la fin, quand il vit que l'autre touchait presque au bout de la carriere, il partit comme un trait ; mais les elans qu'il fit furent vains : la tortue arriva la premiere. eh bien, lui cria-t-elle, avais-je pas raison ? de quoi vous sert votre vitesse moi l'emporter ! et que serait-ce si vous portiez une maison ?
(c)
alphabet = 'abcdefghijklmnopqrstuvwxyz'
dict_occurences = dict()
for lettre in alphabet:
dict_occurences[lettre] = occurrences(lettre, s)
print(dict_occurences)
{'a': 83, 'b': 7, 'c': 23, 'd': 28, 'e': 174, 'f': 12, 'g': 16, 'h': 6, 'i': 83, 'j': 6, 'k': 0, 'l': 63, 'm': 18, 'n': 59, 'o': 59, 'p': 27, 'q': 17, 'r': 84, 's': 61, 't': 93, 'u': 70, 'v': 24, 'w': 0, 'x': 4, 'y': 2, 'z': 2}
On peut également procéder par compréhension :
dict_occurences = {lettre:occurrences(lettre, s) for lettre in alphabet}
print(dict_occurences)
{'a': 83, 'b': 7, 'c': 23, 'd': 28, 'e': 174, 'f': 12, 'g': 16, 'h': 6, 'i': 83, 'j': 6, 'k': 0, 'l': 63, 'm': 18, 'n': 59, 'o': 59, 'p': 27, 'q': 17, 'r': 84, 's': 61, 't': 93, 'u': 70, 'v': 24, 'w': 0, 'x': 4, 'y': 2, 'z': 2}
(d)
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
dico_pourcent=pourcentages(dict_occurences)
print(dico_pourcent)
{'a': 8.13, 'b': 0.69, 'c': 2.25, 'd': 2.74, 'e': 17.04, 'f': 1.18, 'g': 1.57, 'h': 0.59, 'i': 8.13, 'j': 0.59, 'k': 0.0, 'l': 6.17, 'm': 1.76, 'n': 5.78, 'o': 5.78, 'p': 2.64, 'q': 1.67, 'r': 8.23, 's': 5.97, 't': 9.11, 'u': 6.86, 'v': 2.35, 'w': 0.0, 'x': 0.39, 'y': 0.2, 'z': 0.2}
On vérifie que l'on a bien 100% au total, aux erreurs d'arrondi près :
round(sum(pourcent for pourcent in dico_pourcent.values()), 2)
100.02
On peut même faire un histogramme des fréquences (exprimées en pourcentages) :
import matplotlib.pyplot as plt
plt.bar(dico_pourcent.keys(), dico_pourcent.values(), width=0.7, color='g')
plt.show()
(a) On complète le code donné dans l'énoncé :
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()
print(capitale["France"])
Paris
(b) On crée maintenant le dictionnaire des continents :
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()
monnaie
{'Andorra': 'Euro', 'United Arab Emirates': 'Dirham', 'Afghanistan': 'Afghani', 'Antigua and Barbuda': 'Dollar', 'Anguilla': 'Dollar', 'Albania': 'Lek', 'Armenia': 'Dram', 'Angola': 'Kwanza', 'Antarctica': '', 'Argentina': 'Peso', 'American Samoa': 'Dollar', 'Austria': 'Euro', 'Australia': 'Dollar', 'Aruba': 'Guilder', 'Aland Islands': 'Euro', 'Azerbaijan': 'Manat', 'Bosnia and Herzegovina': 'Marka', 'Barbados': 'Dollar', 'Bangladesh': 'Taka', 'Belgium': 'Euro', 'Burkina Faso': 'Franc', 'Bulgaria': 'Lev', 'Bahrain': 'Dinar', 'Burundi': 'Franc', 'Benin': 'Franc', 'Saint Barthelemy': 'Euro', 'Bermuda': 'Dollar', 'Brunei': 'Dollar', 'Bolivia': 'Boliviano', 'Bonaire': 'Dollar', 'Brazil': 'Real', 'Bahamas': 'Dollar', 'Bhutan': 'Ngultrum', 'Bouvet Island': 'Krone', 'Botswana': 'Pula', 'Belarus': 'Belarusian ruble', 'Belize': 'Dollar', 'Canada': 'Dollar', 'Cocos Islands': 'Dollar', 'Democratic Republic of the Congo': 'Franc', 'Central African Republic': 'Franc', 'Republic of the Congo': 'Franc', 'Switzerland': 'Franc', 'Ivory Coast': 'Franc', 'Cook Islands': 'Dollar', 'Chile': 'Peso', 'Cameroon': 'Franc', 'China': 'Yuan Renminbi', 'Colombia': 'Peso', 'Costa Rica': 'Colon', 'Cuba': 'Peso', 'Cabo Verde': 'Escudo', 'Curacao': 'Guilder', 'Christmas Island': 'Dollar', 'Cyprus': 'Euro', 'Czechia': 'Koruna', 'Germany': 'Euro', 'Djibouti': 'Franc', 'Denmark': 'Krone', 'Dominica': 'Dollar', 'Dominican Republic': 'Peso', 'Algeria': 'Dinar', 'Ecuador': 'Dollar', 'Estonia': 'Euro', 'Egypt': 'Pound', 'Western Sahara': 'Dirham', 'Eritrea': 'Nakfa', 'Spain': 'Euro', 'Ethiopia': 'Birr', 'Finland': 'Euro', 'Fiji': 'Dollar', 'Falkland Islands': 'Pound', 'Micronesia': 'Dollar', 'Faroe Islands': 'Krone', 'France': 'Euro', 'Gabon': 'Franc', 'United Kingdom': 'Pound', 'Grenada': 'Dollar', 'Georgia': 'Lari', 'French Guiana': 'Euro', 'Guernsey': 'Pound', 'Ghana': 'Cedi', 'Gibraltar': 'Pound', 'Greenland': 'Krone', 'Gambia': 'Dalasi', 'Guinea': 'Franc', 'Guadeloupe': 'Euro', 'Equatorial Guinea': 'Franc', 'Greece': 'Euro', 'South Georgia and the South Sandwich Islands': 'Pound', 'Guatemala': 'Quetzal', 'Guam': 'Dollar', 'Guinea-Bissau': 'Franc', 'Guyana': 'Dollar', 'Hong Kong': 'Dollar', 'Heard Island and McDonald Islands': 'Dollar', 'Honduras': 'Lempira', 'Croatia': 'Kuna', 'Haiti': 'Gourde', 'Hungary': 'Forint', 'Indonesia': 'Rupiah', 'Ireland': 'Euro', 'Israel': 'Shekel', 'Isle of Man': 'Pound', 'India': 'Rupee', 'British Indian Ocean Territory': 'Dollar', 'Iraq': 'Dinar', 'Iran': 'Rial', 'Iceland': 'Krona', 'Italy': 'Euro', 'Jersey': 'Pound', 'Jamaica': 'Dollar', 'Jordan': 'Dinar', 'Japan': 'Yen', 'Kenya': 'Shilling', 'Kyrgyzstan': 'Som', 'Cambodia': 'Riels', 'Kiribati': 'Dollar', 'Comoros': 'Franc', 'Saint Kitts and Nevis': 'Dollar', 'North Korea': 'Won', 'South Korea': 'Won', 'Kosovo': 'Euro', 'Kuwait': 'Dinar', 'Cayman Islands': 'Dollar', 'Kazakhstan': 'Tenge', 'Laos': 'Kip', 'Lebanon': 'Pound', 'Saint Lucia': 'Dollar', 'Liechtenstein': 'Franc', 'Sri Lanka': 'Rupee', 'Liberia': 'Dollar', 'Lesotho': 'Loti', 'Lithuania': 'Euro', 'Luxembourg': 'Euro', 'Latvia': 'Euro', 'Libya': 'Dinar', 'Morocco': 'Dirham', 'Monaco': 'Euro', 'Moldova': 'Leu', 'Montenegro': 'Euro', 'Saint Martin': 'Euro', 'Madagascar': 'Ariary', 'Marshall Islands': 'Dollar', 'North Macedonia': 'Denar', 'Mali': 'Franc', 'Myanmar': 'Kyat', 'Mongolia': 'Tugrik', 'Macao': 'Pataca', 'Northern Mariana Islands': 'Dollar', 'Martinique': 'Euro', 'Mauritania': 'Ouguiya', 'Montserrat': 'Dollar', 'Malta': 'Euro', 'Mauritius': 'Rupee', 'Maldives': 'Rufiyaa', 'Malawi': 'Kwacha', 'Mexico': 'Peso', 'Malaysia': 'Ringgit', 'Mozambique': 'Metical', 'Namibia': 'Dollar', 'New Caledonia': 'Franc', 'Niger': 'Franc', 'Norfolk Island': 'Dollar', 'Nigeria': 'Naira', 'Nicaragua': 'Cordoba', 'Netherlands': 'Euro', 'Norway': 'Krone', 'Nepal': 'Rupee', 'Nauru': 'Dollar', 'Niue': 'Dollar', 'New Zealand': 'Dollar', 'Oman': 'Rial', 'Panama': 'Balboa', 'Peru': 'Sol', 'French Polynesia': 'Franc', 'Papua New Guinea': 'Kina', 'Philippines': 'Peso', 'Pakistan': 'Rupee', 'Poland': 'Zloty', 'Saint Pierre and Miquelon': 'Euro', 'Pitcairn': 'Dollar', 'Puerto Rico': 'Dollar', 'Palestinian Territory': 'Shekel', 'Portugal': 'Euro', 'Palau': 'Dollar', 'Paraguay': 'Guarani', 'Qatar': 'Rial', 'Reunion': 'Euro', 'Romania': 'Leu', 'Serbia': 'Dinar', 'Russia': 'Ruble', 'Rwanda': 'Franc', 'Saudi Arabia': 'Rial', 'Solomon Islands': 'Dollar', 'Seychelles': 'Rupee', 'Sudan': 'Pound', 'South Sudan': 'Pound', 'Sweden': 'Krona', 'Singapore': 'Dollar', 'Saint Helena': 'Pound', 'Slovenia': 'Euro', 'Svalbard and Jan Mayen': 'Krone', 'Slovakia': 'Euro', 'Sierra Leone': 'Leone', 'San Marino': 'Euro', 'Senegal': 'Franc', 'Somalia': 'Shilling', 'Suriname': 'Dollar', 'Sao Tome and Principe': 'Dobra', 'El Salvador': 'Dollar', 'Sint Maarten': 'Guilder', 'Syria': 'Pound', 'Eswatini': 'Lilangeni', 'Turks and Caicos Islands': 'Dollar', 'Chad': 'Franc', 'French Southern Territories': 'Euro', 'Togo': 'Franc', 'Thailand': 'Baht', 'Tajikistan': 'Somoni', 'Tokelau': 'Dollar', 'Timor Leste': 'Dollar', 'Turkmenistan': 'Manat', 'Tunisia': 'Dinar', 'Tonga': "Pa'anga", 'Turkey': 'Lira', 'Trinidad and Tobago': 'Dollar', 'Tuvalu': 'Dollar', 'Taiwan': 'Dollar', 'Tanzania': 'Shilling', 'Ukraine': 'Hryvnia', 'Uganda': 'Shilling', 'United States Minor Outlying Islands': 'Dollar', 'United States': 'Dollar', 'Uruguay': 'Peso', 'Uzbekistan': 'Som', 'Vatican': 'Euro', 'Saint Vincent and the Grenadines': 'Dollar', 'Venezuela': 'Bolivar Soberano', 'British Virgin Islands': 'Dollar', 'U.S. Virgin Islands': 'Dollar', 'Vietnam': 'Dong', 'Vanuatu': 'Vatu', 'Wallis and Futuna': 'Franc', 'Samoa': 'Tala', 'Yemen': 'Rial', 'Mayotte': 'Euro', 'South Africa': 'Rand', 'Zambia': 'Kwacha', 'Zimbabwe': 'Dollar', 'Serbia and Montenegro': 'Dinar', 'Netherlands Antilles': 'Guilder'}
(c) $\bullet$ Noms des pays d’Océanie :
for pays in continent:
if continent[pays] == 'OC':
print(pays)
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
$\bullet$ Pays dont la monnaie est l’euro :
for pays in monnaie:
if monnaie[pays] == 'Euro':
print(pays)
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
(d) Pays non-européens dont la monnaie est l’euro :
for pays in monnaie:
if monnaie[pays] == 'Euro' and continent[pays] != 'EU':
print(pays)
Saint Barthelemy French Guiana Guadeloupe Saint Martin Martinique Saint Pierre and Miquelon Reunion French Southern Territories Mayotte
(e) Dictionnaire {continent:liste des monnaies}
:
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])
print(continent_monnaies)
{'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']}
import random as rd
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))
Partie n°1 : Pays : Belize ; quelle est sa capitale ? Essai n°1 : Belmopan Gagné ! Partie n°2 : Pays : Czechia ; quelle est sa capitale ? Essai n°1 : Prague Gagné ! Partie n°3 : Pays : Lebanon ; quelle est sa capitale ? Essai n°1 : Beirut Gagné ! Partie n°4 : Pays : French Guiana ; quelle est sa capitale ? Essai n°1 : Cayenne Gagné ! Partie n°5 : Pays : Senegal ; quelle est sa capitale ? Essai n°1 : Dakar Gagné ! Score final : 5 bonnes réponses sur 5 questions.