1. Créer un fichier python tp_dictionnaire et copier le code ci-dessous.
Le fichier est à me transmettre via l’ENT à la fin de la séance.
# TP NSI à renvoyer à la fin des 2 heures via l'ENT
# Nom et Prénom :
###################################
## Exercice 1 : QCM ##
###################################
## Compléter le dictionnaire en indiquant vos réponses
mes_reponses_au_qcm={
"question 1": "Votre réponse",
"question 2": "Votre réponse",
"question 3": "Votre réponse",
"question 4": "Votre réponse",
"question 5": "Votre réponse",
"question 6": "Votre réponse",
"question 7": "Votre réponse",
"question 8": "Votre réponse",
"question 9": "Votre réponse",
"question 10": "Votre réponse",
}
################################################################
## Exercice 2 : frequence caracteres dans un texte ##
################################################################
bio_Turing="Alan Mathison Turing, né le 23 juin 1912 à Londres et mort le 7 juin 1954 à Wilmslow, est un mathématicien et cryptologue britannique, auteur de travaux qui fondent scientifiquement l'informatique.Pour résoudre le problème fondamental de la décidabilité en arithmétique, il présente en 1936 une expérience de pensée que l'on nommera ensuite machine de Turing et des concepts de programme et de programmation, qui prendront tout leur sens avec la diffusion des ordinateurs, dans la seconde moitié du xxe siècle. Son modèle a contribué à établir la thèse de Church, qui définit le concept mathématique intuitif de fonction calculable."
def frequence_caracteres(mon_texte):
'''
retourne la fréquence des caractères dans un texte donné sous la forme d'un dictionnaire
les clés sont les caractères
les valeurs sont les fréquences associées
un espace est considéré comme un caractère
On transformera les majuscules en minuscules
: mon_texte : str
: return : dict()
>>> mon_texte="Alan Turing"
>>> print(frequence_caracteres(mon_texte))
{'a': 0.18181818181818182, 'l': 0.09090909090909091, 'n': 0.18181818181818182, ' ': 0.09090909090909091, 't': 0.09090909090909091, 'u': 0.09090909090909091, 'r': 0.09090909090909091, 'i': 0.09090909090909091, 'g': 0.09090909090909091}
'''
# on transforme toutes les majuscules en minuscules
# grâce à la méthode lower() des str
mon_texte=mon_texte.lower()
def frequence_la_plus_grande(mon_texte):
'''
retourne la fréquence du caractère,autre que l'espace, le plus fréquent dans un texte
on ne distinguera pas majuscules et minuscules
: mon_texte : str
: retour : float
>>>print(frequence_la_plus_grande(bio_Turing))
0.10126582278481013
'''
def caracteres_plus_frequents(mon_texte):
'''
retourne sous la forme d'un tuple les caractères
les plus fréquents d'un texte autre que l'espace
: mon_texte : str
: return : tuple
>>>mon_texte="Alan Turing"
>>>print(caracteres_plus_frequents(mon_texte))
('a', 'n')
>>>print(caracteres_plus_frequents(bio_Turing))
('e',)
'''
##################################################
## Exercice 3 : gestion de commandes ##
##################################################
commandes={'0': {'numero': 'EMA70495', 'nom': 'Ada Lovelace', 'adresse': '64 rue Jocelyne Troccaz', 'ville': 'Tours', 'etat': 'En cours'},
'1': {'numero': 'VWD74550', 'nom': 'Dorothy Vaughan', 'adresse': '33 rue Al-Kindi', 'ville': 'Bordeaux', 'etat': 'En cours'},
'2': {'numero': 'SWK65993', 'nom': 'Gilles Kahn', 'adresse': '53 rue Ingrid Daubechies', 'ville': 'Lille', 'etat': 'En cours'},
'3': {'numero': 'NKR34542', 'nom': 'Ada Lovelace', 'adresse': '98 rue Jules César', 'ville': 'Bordeaux', 'etat': 'Livrée'},
'4': {'numero': 'GEG58414', 'nom': 'Jacques-Louis Lions', 'adresse': '84 rue Al-Kindi', 'ville': 'Rennes', 'etat': 'Retour'},
'5': {'numero': 'FZA36963', 'nom': 'Al-Khwarizmi', 'adresse': '73 rue Adi Shamir', 'ville': 'Marseille', 'etat': 'En cours'},
'6': {'numero': 'QWE58690', 'nom': 'Alonzo Church', 'adresse': '47 rue Jules César', 'ville': 'Paris', 'etat': 'Retour'},
'7': {'numero': 'NLY90647', 'nom': 'Hypatie d’Alexandrie', 'adresse': '51 rue Whitfield Diffie', 'ville': 'Bordeaux', 'etat': 'En cours'},
'8': {'numero': 'VVL26047', 'nom': 'Alonzo Church', 'adresse': '6: rue Adi Shamir', 'ville': 'Montpellier', 'etat': 'En cours'},
'9': {'numero': 'CXO07384', 'nom': 'Jacques-Louis Lions', 'adresse': '30 rue Whitfield Diffie', 'ville': 'Paris', 'etat': 'Livrée'}
}
def afficher_commande_numero(numero_commande):
'''
affiche la commande correspondant au numero
: numero : str
: return : print
>>>afficher_commande_numero('NLY90647')
commande :NLY90647
Nom :Hypatie d’Alexandrie
Adresse :51 rue Whitfield Diffie
Ville :Bordeaux
Etat :En cours
>>>afficher_commande_numero('NLY90687')
NLY90687: numero commande non enregistré
'''
global commandes
def recherche_par_nom(nom):
'''
recherche les commandes correspondantes au nom
: nom : str
: return : un tuple contenant les commandes
>>> print(recherche_par_nom("Ada Lovelace"))
({'numero': 'EMA70495', 'nom': 'Ada Lovelace', 'adresse': '64 rue Jocelyne Troccaz', 'ville': 'Tours', 'etat': 'En cours'},
{'numero': 'NKR34542', 'nom': 'Ada Lovelace', 'adresse': '98 rue Jules César', 'ville': 'Bordeaux', 'etat': 'Livrée'})
>>>print(recherche_par_nom("Alan Turing"))
()
'''
global commandes
def ajouter_commande(numero,nom,adresse,ville,etat):
'''
ajoute une commande
: numero,nom,adresse,ville,etat : str
: return : le dict commande modifié
>>>commandes={'0': {'numero': 'EMA70495', 'nom': 'Ada Lovelace', 'adresse': '64 rue Jocelyne Troccaz', 'ville': 'Tours', 'etat': 'En cours'},
'1': {'numero': 'VWD74550', 'nom': 'Dorothy Vaughan', 'adresse': '33 rue Al-Kindi', 'ville': 'Bordeaux', 'etat': 'En cours'},
'2': {'numero': 'SWK65993', 'nom': 'Gilles Kahn', 'adresse': '53 rue Ingrid Daubechies', 'ville': 'Lille', 'etat': 'En cours'},
'3': {'numero': 'NKR34542', 'nom': 'Ada Lovelace', 'adresse': '98 rue Jules César', 'ville': 'Bordeaux', 'etat': 'Livrée'},
'4': {'numero': 'GEG58414', 'nom': 'Jacques-Louis Lions', 'adresse': '84 rue Al-Kindi', 'ville': 'Rennes', 'etat': 'Retour'},
'5': {'numero': 'FZA36963', 'nom': 'Al-Khwarizmi', 'adresse': '73 rue Adi Shamir', 'ville': 'Marseille', 'etat': 'En cours'},
'6': {'numero': 'QWE58690', 'nom': 'Alonzo Church', 'adresse': '47 rue Jules César', 'ville': 'Paris', 'etat': 'Retour'},
'7': {'numero': 'NLY90647', 'nom': 'Hypatie d’Alexandrie', 'adresse': '51 rue Whitfield Diffie', 'ville': 'Bordeaux', 'etat': 'En cours'},
'8': {'numero': 'VVL26047', 'nom': 'Alonzo Church', 'adresse': '6: rue Adi Shamir', 'ville': 'Montpellier', 'etat': 'En cours'},
'9': {'numero': 'CXO07384', 'nom': 'Jacques-Louis Lions', 'adresse': '30 rue Whitfield Diffie', 'ville': 'Paris', 'etat': 'Livrée'}
}
>>>ajouter_commande("AZE1029","Alan Turin","314 rue d'Enigma","Londres","En cours")
>>>print(commandes)
{'0': {'numero': 'EMA70495', 'nom': 'Ada Lovelace', 'adresse': '64 rue Jocelyne Troccaz', 'ville': 'Tours', 'etat': 'En cours'},
'1': {'numero': 'VWD74550', 'nom': 'Dorothy Vaughan', 'adresse': '33 rue Al-Kindi', 'ville': 'Bordeaux', 'etat': 'En cours'},
'2': {'numero': 'SWK65993', 'nom': 'Gilles Kahn', 'adresse': '53 rue Ingrid Daubechies', 'ville': 'Lille', 'etat': 'En cours'},
'3': {'numero': 'NKR34542', 'nom': 'Ada Lovelace', 'adresse': '98 rue Jules César', 'ville': 'Bordeaux', 'etat': 'Livrée'},
'4': {'numero': 'GEG58414', 'nom': 'Jacques-Louis Lions', 'adresse': '84 rue Al-Kindi', 'ville': 'Rennes', 'etat': 'Retour'},
'5': {'numero': 'FZA36963', 'nom': 'Al-Khwarizmi', 'adresse': '73 rue Adi Shamir', 'ville': 'Marseille', 'etat': 'En cours'},
'6': {'numero': 'QWE58690', 'nom': 'Alonzo Church', 'adresse': '47 rue Jules César', 'ville': 'Paris', 'etat': 'Retour'},
'7': {'numero': 'NLY90647', 'nom': 'Hypatie d’Alexandrie', 'adresse': '51 rue Whitfield Diffie', 'ville': 'Bordeaux', 'etat': 'En cours'},
'8': {'numero': 'VVL26047', 'nom': 'Alonzo Church', 'adresse': '6: rue Adi Shamir', 'ville': 'Montpellier', 'etat': 'En cours'},
'9': {'numero': 'CXO07384', 'nom': 'Jacques-Louis Lions', 'adresse': '30 rue Whitfield Diffie', 'ville': 'Paris', 'etat': 'Livrée'}
'11': {'numero': 'AZE1029', 'nom': 'Alan Turin', 'adresse': "314 rue d'Enigma", 'ville': 'Londres', 'etat': 'En cours'}
}
'''
global commandes
def supprimer_commande(numero):
'''
supprime la commande correspondant au n°
: numero : str
: return : le dict commandes
>>>supprimer_commande('EMA70495')
>>>print(commandes)
{'1': {'numero': 'VWD74550', 'nom': 'Dorothy Vaughan', 'adresse': '33 rue Al-Kindi', 'ville': 'Bordeaux', 'etat': 'En cours'},
'2': {'numero': 'SWK65993', 'nom': 'Gilles Kahn', 'adresse': '53 rue Ingrid Daubechies', 'ville': 'Lille', 'etat': 'En cours'},
'3': {'numero': 'NKR34542', 'nom': 'Ada Lovelace', 'adresse': '98 rue Jules César', 'ville': 'Bordeaux', 'etat': 'Livrée'},
'4': {'numero': 'GEG58414', 'nom': 'Jacques-Louis Lions', 'adresse': '84 rue Al-Kindi', 'ville': 'Rennes', 'etat': 'Retour'},
'5': {'numero': 'FZA36963', 'nom': 'Al-Khwarizmi', 'adresse': '73 rue Adi Shamir', 'ville': 'Marseille', 'etat': 'En cours'},
'6': {'numero': 'QWE58690', 'nom': 'Alonzo Church', 'adresse': '47 rue Jules César', 'ville': 'Paris', 'etat': 'Retour'},
'7': {'numero': 'NLY90647', 'nom': 'Hypatie d’Alexandrie', 'adresse': '51 rue Whitfield Diffie', 'ville': 'Bordeaux', 'etat': 'En cours'},
'8': {'numero': 'VVL26047', 'nom': 'Alonzo Church', 'adresse': '6: rue Adi Shamir', 'ville': 'Montpellier', 'etat': 'En cours'},
'9': {'numero': 'CXO07384', 'nom': 'Jacques-Louis Lions', 'adresse': '30 rue Whitfield Diffie', 'ville': 'Paris', 'etat': 'Livrée'}}
>>> supprimer_commande('EMA70895')
numero de commande non existant
'''
global commandes
###################################
## Exercice 4 : MORSE ##
###################################
# compléter les fonctions pour qu'elles
# répondent à leur docstring
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':'--- --- - -',
}
def traduction_en_morse(texte):
'''
traduit un texte en majuscules en morse
avec un espace entre chaque lettre
et 7 espaces entre chaque mot
texte : str
return : str
>>>mon_texte="LE MORSE EST UN LANGAGE CODE"
>>>traduction_en_morse(mon_texte)=="- --- - - - --- --- --- --- --- - --- - - - - - - - - - --- - - --- --- - - --- - - - --- --- - --- --- - - --- --- --- - - --- - --- - --- --- --- --- - - -"
True
'''
def dictionnaire_morse_caractere(mon_dict):
'''
retourne un dictionnaire dont les clés
sont des caractères morses et les valeurs
les lettres associées
: mon_dict : un dictionnaire qui traduit des
caractères en morse
: return : dict()
>>> mon_morse_dico=dictionnaire_morse_caractere(dict_morse)
>>> mon_morse_dico['--- --- -']='G'
'''
def traduction_morse_francais(mon_code):
'''
traduit un code en morse en texte en français
: mon_code: str
: return : str
>>>mon_texte="LE MORSE EST UN LANGAGE CODE"
>>>code_a_decoder=traduction_en_morse(mon_texte)
>>>traduction_morse_francais(code_a_decoder))=="LE MORSE EST UN LANGAGE CODE"
True
'''
global dict_morse
Exercice 1 ( 5 pts )
QCM : il peut y avoir plusieurs bonnes réponses par question
Choisir la bonne réponse pour chacune des questions.
La reporter dans votre fichier python en remplaçant votre réponse par la bonne réponse.
Question 1 : Pour déclarer un dictionnaire, on peut utiliser les commandes :
A) mon_dict=()
B) mon_dict={}
C) mon_dict=dict()
D) mon_dict=[]
Question 2 : Pour le dictionnaire mon_dic={1:’A’,2:’B’}
A) 1 représente une valeur
B) 1 représente un indice
C) 1 représente une clé
D) 1 est un numéro de ligne
Question 3 : Pour le dictionnaire mon_dic={1:’A’,2:’B’}
A) ‘A’ représente une valeur
B) ‘A’ représente un indice
C) ‘A’ représente une clé
D) ‘A’ est un numéro de ligne
Question 4 : Dans un dictionnaire
A) les clés sont uniques
B) les clés et les valeurs sont uniques
C) les valeurs sont uniques
D) les clés et les valeurs ne sont pas uniques
Question 5 : Pour savoir si un élément est une clé d’un dictionnaire, on peut utiliser la méthode
A) cle in mon_dic.values()
B) cle in mon_dic.keys()
C) cle in values(mon_dic)
D) cle in keys(mon_dic)
Question 6 : Pour savoir si un élément est une valeur d’un dictionnaire, on peut utiliser la méthode
A) val in mon_dic.values()
B) val in mon_dic.keys()
C) val in values(mon_dic)
D) val in keys(mon_dic)
Question 7 : Pour affecter une valeur à une clé dans un dictionnaire, on utilise la méthode
A) mon_dict[cle] = valeur
B) mon_dict(cle) = valeur
C) mon_dict[valeur] = cle
D) mon_dict.append(cle,valeur)
Question 8 : Pour effacer une clé et sa valeur, on utilise
A) del(mon_dic[cle])
B) mon_dic.del(valeur)
C) del(mon_dic,valeur)
D) del(mon_dic[valeur])
Question 9 : Pour parcourir les clés d’un dictionnaire, on utilise
A) for cle in mon_dic.keys()
B) for cle in range(len(mon_dic))
C) for cle in mon_dic.values()
D) for val in mon_dic.values()
Question 10 : Pour parcourir les valeurs d’un dictionnaire, on utilise
A) for val in mon_dic.keys()
B) for cle in range(len(mon_dic))
C) for cle in mon_dic.values()
D) for val in mon_dic.values()
Exercice 2 : Il s’agit d’écrire trois fonctions permettant d’étudier la fréquence d’apparition des caractères dans un texte ( méthode préalable pour crypter ou décrypter un texte ).
La fonction frequence_la_plus_grande fera appel au dictionnaire crée par la fonction frequence_caracteres.
La fonction caracteres_plus_frequents fera appel aux deux fonctions précédentes.
3 pts par fonction répondant à sa docstring
Exercice 3 : Il s’agit d’écrire quatre fonctions permettant de gérer les commandes d’un fournisseur.
Pour simplifier l’écriture, on considère que le dictionnaire représentant les commandes est une variable globale.
2 pts par fonction répondant à sa docstring
Exercice 4 : Exercice bonus ou à faire pendant les vacances.
L’exercice permet de coder ou de décoder un texte en morse selon les règles ci-dessous :
