Exercice 1 – Convertisseur des chiffres arabes

Universit´e Pierre et Marie Curie
2014-2015
Informatique g´
en´
erale 1 (Python)
Travaux Pratiques
— TP8 —
Exercice 1 – Convertisseur des chiffres arabes ←→ romains
` l’adresse
Le but de cet exercise est de cr´eer un converteur entre des chiffres arabes et romains. Vous trouverez a
/home/sasl/shared/InfoGen1_2014_TP8/ un fichier romain.py qui contient deux dictionnaires, l’un contenant 7 items arabe:romain nomm´e d, et l’autre 13 items arabe:romain nomm´e d_inv. Ces dictionnaires vous
permettront de passer plus facilement des chiffres arabes en chiffres romaines.
Donc vous devez ´ecrire une fonction qui convertit un nombre arabe en un nombre romain et une fonction qui fait
l’inverse.
Question: Quel est le plus grand nombre romain entre 1 et 5000 qui pos`ede l’´ecriture romaine la plus grande ?
Exercice 2 – Nombre des mots
` calculer le nombre d’occurences des mots dans un livre. On dispose pour cela de deux fichiers texte
On cherche a
”autourdelalune.txt” et ”delaterrealalune.txt” disponibles dans le r´epertoire /home/sasl/shared/
InfoGen1_2014_TP8/.
´ crire une fonction lireFichier qui prend en argument un nom de fichier et qui construit un dictionnaire
1. E
contenant tous les mots et leur nombre d’occurences associ´es.
` oter la ponctuation parmi ,;:?!.-"’)( ainsi que les caract`eres de saut de ligne \r et \n.
On prendra garde a
Les mots seront transform´es en minuscule.
2. En d´eduire le nombre d’apparition du mot ”barbicane” dans le roman De la terre a
` la lune, ainsi que le nombre
d’apparition des mots ”de”, ”le” et ”la”.
3. Trouver le mot de plus de 8 lettres le plus pr´esent dans Autour de la lune. Ainsi que le mot de plus de 12 lettres.
Pour cela, ´ecrire une fonction prenant le nombre de lettres en param`etre.
Exercice 3 – Gestion de stocks
Le but de cet exercice est de cr´eer des fonctions permettant une gestion simple de stocks pour un petit marchand
de fruits et l´egumes. Le stock est repr´esent´e par un dictionnaire dont chaque entr´ee (i.e. item) a pour clef le nom
` chaque lancement du programme, le
du produit et pour valeur la quantit´e (en kilogrammes) du produit en stock. A
` partir d’un fichier nomm´e “stock.txt” dont chaque ligne repr´esente un produit sous la forme
dictionnaire est charg´e a
clef:valeur. Par exemple, on pourra avoir un fichier contenant 2 lignes suivantes :
pomme:40
poire:30
` chaque terminaison du programme, le dictionnaire est enregistr´e au fichier “stock.txt” sous la forme pr´ecis´ee
A
pr´ec´edemment. Le programme r´ealise deux fonctions principales :
` jour le stock avec de nouvelles arriv´ees de produits.
• Enregistrement d’un d´epˆ
ot de produits o`
u on met a
• Enregistrement d’une commande o`
u on soustrait du stock des quantit´es command´ees.
1. Cr´eer une fonction lire_dict(nom_fichier) qui prend comme argument une chaˆıne de caract`eres
`
repr´esentant le nom d’un fichier et qui retourne un dictionnaire r´esultant du contenu du fichier. Pensez a
utiliser la fonction os.path.exists(nom_fichier) qui retourne True si le fichier existe et False sinon
pour d´etecter si le fichier existe.
2. Cr´eer une fonction ecrire_dict(d,nom_fichier) qui enregistre le contenu du dictionnaire d dans un
fichier sous la forme d´ecrite ci-dessus.
TP 2014-2015 - TP8
3. Cr´eer une fonction enregistrer_depot(d) qui prend en entr´ee un dictionnaire d. Cette fonction devrait per` l’utilisateur de choisir des produits existants et d’entrer leur quantit´e nouvellement arriv´ee ou d’entrer
mettre a
` jour selon ces informations.
le nom de nouveaux produits et leur quantit´es. Le dictionnaire devrait ˆetre mis a
` utiliser la biblioth`eque easygui pour
La valeur retourn´ee par la fonction est aussi le dictionnaire d. Pensez a
une agr´eable interface avec l’utilisateur. Par exemple, utilisez la fonction “buttonbox” pour lister les produits
existants en stock. La fonction devrait ˆetre capable d’enregistrer plusieurs produits jusqu’`
a ce que l’utilisateur
veuille arrˆeter l’enregistrement.
4. Cr´eer une fonction enregistrer_commande(d) qui prend en entr´ee un dictionnaire d. Cette fonction de` l’utilisateur de choisir des produits existants et d’entrer leur quantit´e a
` soustraire du stock.
vrait permettre a
L’utilisateur devrait ˆetre au courant par l’affichage de la quantit´e en stock de chaque produit. Le dictionnaire
` jour selon les informations entr´ees. La valeur retourn´ee par la fonction est aussi le dictionnaire
devrait ˆetre mis a
d.
5. Cr´eer un programme principal o`
u
` partir du fichier “stock.txt” (appel de la fonction lire_dict(nom_fichier)),
• on charge le dictionnaire a
• on affiche un menu contenant les fonctions “Enregistrement d’un d´epˆ
ot”, “Enregistrement d’une commande”
et ”Quitter“ (appel des fonctions enregistrer_depot(d) et enregistrer_commande(d)),
` la terminaison du programme, enregistrer le dictionnaire dans le fichier ”stock.txt“ (appel de la fonction
• a
ecrire_dict(d,nom_fichier)).
Exercice 4 – Le chiffre de C´
esar
Le chiffre de C´esar, comme son nom l’indique, est une m´ethode de chiffrement simple connue pour avoir ´et´e utilis´ee
par C´esar lors de ses correspondances priv´ees.
` chiffrer, le principe consiste simplement en une permutation circulaire de l’alphabet.
Etant donn´e un message a
La longueur du d´ecalage est la clef secr`ete du chiffre. Ainsi, il n’existe que 26 clefs possibles. Par exemple, la clef 2
transformerait le message "bonjour" en "dqplqwt".
Vous aurez compris que, si s d´enote la clef secr`ete, en r´eappliquant l’algorithme de chiffrement au message chiffr´e
avec, cette fois, la clef 26-s nous retrouverons le message originel. Cet algorithme, que nous allons impl´ementer, est
` la fois de chiffrer et de d´echiffrer.
donc sym´etrique puisqu’il permet a
` l’adresse /home/sasl/shared/InfoGen1_2014_TP8/ dans un fichier alphabet.py deux
1. Vous trouverez a
dictionnaires, l’un contenant 26 items lettre:rang nomm´e Alphabet, et l’autre 26 items rang:lettre
nomm´e Alphabet_inv. Ces dictionnaires vous permettront de jongler plus facilement entre les lettres et
leurs rangs dans l’alphabet. Importez-les.
Ecrivez un programme qui, pour une chaˆıne de caract`ere donn´ee chaine, affiche successivement le rang de
chacune de ses lettres dans l’alphabet. Vous utiliserez pour cela le dictionnaire Alphabet (on pourra donc
` la casse).
v´erifier si un caract`ere de chaine est dans Alphabet ; attention a
2. Etoffez ce programme pour que, si on note rang le rang d’un des caract`eres dans l’alphabet, il affiche la lettre
` rang+2. Vous pourrez utiliser %26. Cependant, comme les rangs vont de 1 a
` 26, il faudra d’abord
situ´ee a
d´ecaler le rang de -1, effectuer le d´ecalage avec la clef et le modulo, puis red´ecaler de +1 pour obtenir le rang
correspondant entre 1 et 26.
Vous vous assurerez de son bon fonctionnement avant de continuer.
3. Utilisez les r´eponses aux questions pr´ec´edentes pour impl´ementer une fonction ChiffrerDechiffrer qui
` chiffrer ou d´echiffrer et la clef secr`ete, et retourne le texte modifi´e.
prend deux param`etres, le message a
Vous devrez de plus respecter quelques conditions :
` la clef en
• lors du chiffrement ou d´echiffrement d’un message, vous devrez convertir chaque lettre grˆ
ace a
laissant absolument intacts tous les caract`eres qui ne sont pas des lettres,
• et vous conserverez intacte la casse du message.
Vous pourrez vous assurez de son bon fonctionnement notamment en v´erifiant la sym´etrie de la fonction. C’est`-dire que pour une chaˆıne donn´ee, not´ee chaine, et une clef donn´ee, not´ee clef, alors
a
ChiffrerDechiffrer(26-clef,ChiffrerDechiffrer(clef,chaine)))
doit vous retourner une copie exacte de chaine.
c
2014-2015
Polytech’Paris
page 2 sur 2