• Aucun résultat trouvé

Introduction à la programmation — Module M02 : Travaux pratiques

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction à la programmation — Module M02 : Travaux pratiques"

Copied!
14
0
0

Texte intégral

(1)

Introduction à la programmation — Module M02 : Travaux pratiques

IUT de Villetaneuse — Licence Pro ASSUR

Camille Coti

camille.coti@iutv.univ-paris13.fr

(2)

1 Prise en main de l’environnement de programma- tion

Dans votre répertoire utilisateur, créez un répertoire M02. Ensuite, pour chaque TP, vous créerez dans ce répertoire un répertoire TPX, où X est le numéro du TP. Par exemple, aujourd’hui vous devez créer un répertoire TP1. Dans ce répertoire, vous créerez un répertoire par exercice.

Exercice 1.1 : Manipulations dans l’interpréteur interactif

1. Lancez l’interpréteur interactif avec la commande python. Vous devriez voir s’afficher quelques informations sur l’interpréteur (version, compilateur utilisé pour le compiler...) et une invite de commandes.

2. Vous pouvez taper des commandes dans cette session interactive. Le fait de rentrer seulement une expression l’évalue et l’affiche. Les affectations ne sont pas affichées. On effectue un affichage avec la fonction print. Par exemple :

1 Python 2 . 7 . 3 r c 2 ( d e f a u l t , Apr 22 2 0 1 2 , 2 2 : 3 0 : 1 7 ) 2 [GCC 4 . 6 . 3 ] on l i n u x 2

3 Type " h e l p " , " c o p y r i g h t " , " c r e d i t s " or " l i c e n s e " f o r more i n f o r m a t i o n .

4 >>> 1 5 1

6 >>> print i 7 5

8 >>>

3. Qu’affichent les programmes suivants ? 1 print 1

2 print 2 3 print 3 1 print 2 2 print 1 3 print 3

Vous pouvez quitter l’interpréteur interactif avec la combinaison de touches Ctrl+d.

Exercice 1.2 : Écriture de scripts Python

Les programmes Python peuvent être écrits dans des fichiers texte, qui sont interprétés par l’interpréteur Python. Dans cet exercice, nous allons voir différentes façon de les exécuter.

Dans cet exercice, vous éditerez les fichiers contenant votre code avec un éditeur de texte brut, c’est-à-dire qui enregistre sur le disque exactement ce qui a été saisi par l’utilisateur. Attention à utiliser un éditeur qui n’insère pas d’informations de formattage dans les fichiers sauvegardés. Par exemple, vous pourrez utiliser emacs, gedit, vim, ou les environnements de développement intégrés eric ou Eclipse.

1. Créez un fichier dans lequel vous mettez quelques instructions Python, par exemple un affichage. Enregistrez-le sous le nom script1.py.

2. La première façon d’exécuter un script Python consiste à le faire lire et exécuter par l’inter-

préteur. Exécutez votre script en le passant en paramètre de la commande python :

(3)

1 $ python . / s c r i p t 1 . py

3. On peut intégrer dans le script le chemin vers l’interpréteur qui va exécuter la série d’ins- tructions composant le programme. Pour cela, on insère au début du fichier un shebang qui donne le chemin vers l’interpréteur à utiliser. C’est notamment très utile sur les systèmes où plusieurs version de Python sont installées.

Avec l’aide de la commande Unix which, trouvez le chemin absolu vers l’interpréteur Python appelé par la commande python.

4. Créez un nouveau fichier dans lequel vous mettez quelques instructions Python et commen- çant par le shebang constitué grâce à la question précédente. Enregistrez-le sous le nom script2.py.

5. Essayez de l’exécuter directement. Que constatez-vous ? 6. Remédiez à ce problème et exécutez le script

7. Modifiez le shebang pour mettre un chemin ne correspondant à aucun interpréteur Python.

Essayez d’exécuter le script. Que constatez-vous ?

Exercice 1.3 : Valeurs de variables

1. Recopiez et enregistrez dans le fichier script3.py le programme suivant.

1 #! / u s r / b i n / p y t h o n 2

3 x = 1 4 y = 2 5 print x 6 z = x + y 7 print z

2. Exécutez-le. Quel est l’affichage obtenu ? 3. Expliquez chacune de ses lignes.

Exercice 1.4 : Inversion de valeurs

Écrivez un script Python qui : – initialise deux variables – affiche leurs valeurs

– inverse les valeurs de ces deux variables – affiche leurs valeurs

Exercice 1.5 : Concaténation de chaînes de caractères

Considérons le programme suivant : 1 #! / u s r / b i n / p y t h o n

2

3 cp = 93

4 nom = ’ S e i n e S a i n t−D e n i s ’ 5 p h r a s e = ? ? ? ? ?

6 print p h r a s e

(4)

Que faut-il mettre à la place des ????? pour que le programme affiche "Le code postal de la Seine Saint-Denis est 93" ?

Exercice 1.6 : Types et opérations

Donnez la valeur des opérations suivantes : – 3 + 4

– ’3’ + ’4’

– 3 + ’4’

– ’3’ + 4 – 3 * 4 – ’3’ * ’4’

– 3 * ’4’

– ’3’ * 4 – ’3’ * 4.0

Exercice 1.7 : Saisie d’une valeur

La fonction raw_input() permet de lire une entrée saisie au clavier par l’utilisateur.

1. Écrivez un programme qui demande à l’utilisateur de saisir une valeur et affiche la valeur saisie.

2. La fonction raw_input() peut prendre comme paramètre une chaîne de caractères qui sera affichée au début de la ligne où l’utilisateur sera invité à saisir quelque chose. Modifiez votre programme pour qu’il affiche –-> au début de ligne.

3. De quel type sont les données lues par raw_input() ? Modifiez votre programme pour afficher leur type.

Exercice 1.8 : Valeur absolue

Écrivez un programme qui demande à l’utilisateur de saisir un nombre et affiche sa valeur absolue.

Exercice 1.9 : Catégories sportives

Les catégories d’âges dans les compétitions sportives sont les suivantes : – 12 ans et moins : trop jeune

– 13-14 ans : minime – 15-16 ans : cadet – 17-18 ans : junior – 19-34 ans : senior – plus de 35 ans : vétéran

Écrivez un programme qui demande à l’utilisateur de saisir son âge et affiche sa catégorie.

Exercice 1.10 : Le temps plus une seconde

Écrivez un programme qui demande à l’utilisateur l’heure, les minutes et les secondes, et affiche l’heure qu’il sera une seconde plus tard.

Par exemple, si l’utilisateur tape 21 puis 32 puis 8, le programme doit afficher : "Dans une seconde, il sera 21 heure(s) 32 minute(s) et 9 secondes".

On commencera par vérifier que l’utilisateur entre une heure valide.

(5)

Exercice 1.11 : Factorielle

La factorielle d’un nombre entier, noté n!, a pour formule n! = n × (n − 1) × (n − 2) × ... × 2 × 1 = Q

n k=1

k.

1. Écrivez un programme qui demande à l’utilisateur de saisir un nombre entier et calcule sa factorielle.

2. Afin de ne pas se lancer dans des calculs trop longs, on veut limiter la valeur maximale

pouvant être saisie à 100. De plus, la factorielle ne se calcule que pour des entiers strictement

positifs. Modifiez votre programme afin de vérifier si ces conditions sur le nombre saisi par

l’utilisateur sont bien réalisées, et ne calculer la factorielle que dans ce cas.

(6)

2 Tests, boucles, collections

Exercice 2.1 : Affichage des valeurs d’une liste

Écrire un programme qui affecte à une variable semaine une liste des noms des jours de la semaine et les affiche tous en parcourant la liste.

Exercice 2.2 : Minimum et maximum

Écrire un programme qui affecte à une variable tab une liste d’entiers et affiche le minimum et le maximum contenus dans cette liste.

Exercice 2.3 : Addition de vecteurs

Si A et B sont deux vecteurs de taille n, on les additionne en additionnant leurs termes deux à deux de la façon suivante : C = A + B ⇔ ∀i ∈ [0, n − 1] : C

i

= A

i

+ B

i

Par exemple,

 1 2 3

 +

 7 8 9

 =

 8 10 12

Écrire une fonction qui additionne deux vecteurs passés en paramètres. La première chose faite par cette fonction consiste à vérifier que les deux vecteurs sont bien de même taille. Si ce n’est pas le cas, la fonction retourne un vecteur vide (ne contenant rien). Si tout va bien, la fonction effectue l’addition et retourne le vecteur résultat.

Exercice 2.4 : Recherche dans un tableau

1. Écrire un programme qui demande à l’utilisateur de saisir un mot et indique si ce mot est présent dans le tableau [ ’chien’, ’chat’, ’girafe’, ’hippopotame’, ’chien’,

’singe’ ] .

2. Modifier ce programme de façon à afficher le nombre de fois où le mot apparaît dans le tableau.

Exercice 2.5 : Séparer les longs et les courts

Écrire un programme qui parcourt la liste [ ’Jean’, ’Maximilien’, ’Brigitte’, ’Sonia’,

’Jean-Pierre’, ’Sandra’ ] et met les mots de moins de 6 lettres dans une liste courts et les mots de 6 lettres ou plus dans une liste longs.

Votre programme affichera ensuite le nombre d’éléments dans chacune des listes et leurs élé- ments.

Vous pouvez obtenir la longueur d’une chaîne de caractères et le nombre d’éléments dans une liste avec la fonction len().

Exercice 2.6 : Répertoire téléphonique

On veut écrire un programme qui maintient un répertoire téléphonique pour l’utilisateur. Les

entrées dans le répertoire sont stockées sous forme d’un couple associant le nom de la personne

à son numéro de téléphone, enregistré sous forme d’un entier. Par exemple, on pourra associer

l’entier 0123456789 à la chaîne de caractères "Jean Talu".

(7)

1. Quelle structure de données serait la plus adaptée pour représenter les données du répertoire ? 2. Le programme doit proposer un menu à l’utilisateur lui permettant de choisir parmi les

possibilités suivantes :

– Ajouter une entrée dans le répertoire

– Afficher le numéro de téléphone d’une personne en particulier – Afficher le nombre de numéros enregistrés dans le répertoire – Afficher le contenu de tout le répertoire

– Supprimer du répertoire une personne et son numéro – Effacer tout le contenu du répertoire

– Quitter le programme

Écrire une fonction qui affiche la liste des choix et demande à l’utilisateur de saisir une valeur lui permettant de choisir l’action à effectuer (par exemple, un entier). La fonction doit retourner cet entier.

3. Le programme doit afficher ce menu et proposer à l’utilisateur de choisir une action à effec- tuer, effectuer l’action demandée et réafficher ce menu tant que l’utilisateur n’a pas demandé à quitter. Écrire pour chacun de ces choix une fonction qui affiche simplement l’action choisie, et les appeler en conséquence du choix de l’utilisateur. Si l’utilisateur entre une valeur autre que celles proposées, le programme affiche une erreur et lui demande à nouveau d’entrer une valeur.

4. Implémenter la fonction qui permet d’ajouter une entrée dans le répertoire. Cette fonction demande à l’utilisateur de saisir un nom et un numéro de téléphone et les insère dans le répertoire.

5. Pour tester si votre fonction d’ajout d’une personne fonctionne correctement, la vérification la plus élémentaire consiste à regarder si le répertoire contient bien une entrée de plus. Im- plémenter la fonction qui affiche le nombre d’entrées dans le répertoire. Pour tester si cette fonction et la précédente fonctionnent correctement, vous pourrez exécuter votre programme en choisissant dans un permier temps de saisir une nouvelle entrée, puis en choisissant d’af- ficher le nombre d’entrées dans le répertoire.

6. Implémenter la fonction qui affiche toutes les entrées du répertoire. L’affichage pourra res- sembler à :

1 Mehdi Doua : 1 2 3 4 5 5 4 3 2 1 2 A l f o n s e Danlmur : 9 8 7 6 7 8 9 0 2 3 Jean Talu : 9 8 7 6 5 4 3 2 1

Vous pouvez maintenant tester le bon fonctionnement de la fonction d’ajout d’une entrée dans le répertoire en affichant tout le contenu du répertoire.

7. Implémenter la fonction qui affiche le numéro d’une personne en particulier. Cette fonction demander à l’utilisateur de saisir un nom, et si une entrée correspondant à ce nom existe dans le répertoire, son numéro est affiché. Sinon, un message d’erreur est affiché.

8. Implémenter la fonction qui supprime une entrée du répertoire. Cette fonction demande à l’utilisateur de saisir le nom de la personne à supprimer du répertoire. Si cette entrée est présente dans le répertoire, elle est supprimée. Sinon, un message d’erreur est affiché.

9. Implémenter la fonction qui efface tout le répertoire. Vous pourrez la tester en vérifiant qu’après effacement, le répertoire ne contient aucune entrée.

Exercice 2.7 : Mots de passe corrects

On souhaite écrire un programme qui vérifie si une liste de mots de passe vérifie un certain nombre de conditions. Chaque mot de passe devra :

– Contenir au moins une lettre minuscule

(8)

– Contenir au moins une lettre majuscule – Contenir au moins un chiffre

– Contenir au moins un caractère spécial parmi [*#+@]

– Avoir une longueur minimale de 4 caractères – Avoir une longueur maximale de 6 caractères – Ne pas contenir d’espace

Les mots de passe corrects seront affichés à l’utilisateur.

Par exemple, si l’utilisateur saisit : Abc@1,a B1#,2w3E*,2We#3345, alors l’affichage résultant sera Abc@1,2w3E*.

1. L’utilisateur saisit la série de mots de passe séparés par des virgules. La première chose à faire est de séparer les mots de passe et de les stocker dans une liste.

2. Ensuite, une fonction est appelée pour chaque mot de passe (donc chaque élément de la liste) afin de vérifier si ce mot de passe remplit les conditions énoncées précédemment. Cette fonction retourne un booléen : True si le mot de passe est valable, False si le mot de passe n’est pas valable. Les mots de passe valables sont stockés dans une liste.

Dans un premier temps, vous utiliserez une fonction bouchon : cette fonction aura le squelette de la fonction de vérification, mais retournera simplement une valeur possible (True ou False). L’idée est de mettre en place une fonction et son appel dans le programme, pour ensuite l’écrire ultérieurement.

3. Enfin, une fois tous les mots de passe vérifiés, la liste des mots de passe valables est affichée en les séparant par des virgules.

4. Vous allez maintenant implémenter la fonction qui vérifie si un mot de passe est valable ou non. Vous avez écrit précédemment une fonction bouchon : vous allez maintenant écrire le corps de cette fonction.

5. La fonction de vérification doit commencer par regarder si le mot de passe passé en paramètre contient au moins une lettre minuscule. Écrivez une fonction qui prend un mot en paramètre et retourne True si ce mot contient au moins une lettre minuscule, et False si il n’en contient aucune. Appelez cette fonction depuis la fonction globale de vérification.

Indication : vous pouvez transformer une chaîne de caractères en tableau de caractères en utilisant la fonction list(). Vous pouvez obtenir une chaîne de caractères contenant toutes les lettres minuscules de l’alphabet en utilisant le module string et sa constante string.lowercase. Pour cela, vous devrez importer le module :

1 import s t r i n g

2 m i n u s c u l e s = l i s t ( s t r i n g . l o w e r c a s e )

6. On doit ensuite vérifier si le mot de passe contient au moins une lettre majuscule. De la même façon, écrivez une fonction qui vérifie si la chaîne de caractères passée contient au moins une lettre majuscule et retourne True si elle en contient au moins une, et False si il n’en contient aucune.

7. On doit ensuite vérifier si le mot de passe contient au moins un chiffre et au moins un caractères spécial dans la liste fournie. Écrivez ces deux fonctions.

8. On doit ensuite vérifier que le mot de passe est bien d’une longueur acceptable. Écrivez une fonction qui retourne True si la longueur est comprise entre 4 et 6 caractères (en incluant ces valeurs), ou False sinon.

9. La dernière vérification consiste à s’assurer que le mot de passe ne contient aucun espace.

Écrivez une fonction qui retourne True si la chaîne de caractères passée ne contient aucun espace, False si elle en contient au moins un.

10. Votre fonction de vérification doit effectuer toutes ces vérifications sur la chaîne de caractères

qui lui a été passée en paramètre. Appelez les fonctions que vous venez d’implémenter. La

fonction de vérification doit retourner False si au moins une de ces conditions n’est pas

respectée, ou True si elles sont toutes respectées.

(9)

3 Programmation graphique avec la tortue

Le module Turtle permet de dessiner des figures à l’écran. Afin de pouvoir utiliser ce module, il faut ajouter au début du programme l’instruction :

1 from t u r t l e import ∗

On dispose alors des fonctions suivantes permettant de dessiner : – forward( distance ) : avancer d’une distance donnée – left( angle ) : tourner d’un certain angle vers la gauche – right( angle ) : tourner d’un certain angle vers la droite – up() : relever le crayon (pour pouvoir avancer sans dessiner) – down() : abaisser le crayon (pour recommencer à dessiner) – goto( w, y ) : aller à l’endroit de coordonnées x et y.

La documentation de ce module se trouve à l’adresse :

http://docs.python.org/library/turtle.html

La fenêtre dans laquelle le dessin est tracé se ferme immédiatement après la dernière instruction.

Pour attendre quelques secondes, vous pourrez utiliser la fonction sleep() du module time. Pour cela, ajoutez au début du programme :

1 from t i m e import ∗

Et, à l’endroit où vous souhaitez mettre votre programme en pause pendant nbsec secondes : 1 s l e e p ( n b s e c )

Exercice 3.1 : Lignes

Que dessine le programme suivant ?

1 #! / u s r / b i n / p y t h o n 2

3 from t u r t l e import ∗ 4

5 f o r w a r d ( 100 ) 6 l e f t ( 120 ) 7 f o r w a r d ( 100 ) 8 l e f t ( 120 ) 9 f o r w a r d ( 100 ) 10 l e f t ( 60 ) 11 f o r w a r d ( 100 ) 12 l e f t ( 120 ) 13 f o r w a r d ( 100 )

Exercice 3.2 : Autour du carré

1. Écrivez une fonction Python qui dessine un carré de côté n

(10)

2. Modifiez votre fonction afin d’utiliser une boucle for

3. Écrivez une fonction qui dessine la figure suivante. Les paramètres de la fonction sont le nombre de carrés, la longueur du petit côté et la différence entre les longueurs de deux carrés consécutifs.

Exercice 3.3 : Autour du rectangle

1. Écrivez une fonction qui dessine un rectangle. Les paramètres de cette fonction sont les longueurs des côtés.

2. Utilisez cette fonction pour dessiner la figure suivante :

Exercice 3.4 : Cercle

La fonction circle permet de tracer un cercle.

1. Avec l’aide de la documentation du module  turtle, comprenez son utilisation et écrivez un programme Python qui trace un cercle.

2. Écrivez un programme Python qui trace la figure suivante :

3. Écrivez un programme Python qui dessine une marelle.

(11)

Exercice 3.5 : Fractales

Une fractale est une structure fragmentée qui se répète en elle-même. Par exemple, Si l’on considère un segment, on peut le couper en 3 parties et dessiner la pointe d’un triangle isocèle sur sa partie médiane.

Ainsi, le segment suivant : devient :

Chacun de ces segments ainsi créés peuvent subir la même transformation :

Et ainsi de suite : chaque segment peut être découpé en segments, qui seront eux-mêmes découpés. Les fractales sont donc des structures intrinsèquement récursives.

En utilisant la tortue, dessiner une fractale telle que celle décrite ci-dessus. Vous arrêterez la

récurrence à une profondeur arbitraire, par exemple 5 appels récursifs.

(12)

4 Exceptions

Exercice 4.1 : Un quotient sûr

Nous avons vu en cours la fonction quotient(), qui peut soulever l’exception ZeroDivisionError lorsque le diviseur est égal à zéro.

1. Écrivez en Python une fonction quotient() similaire, qui prend en paramètre deux nombres et retourne leur quotient (un réel). Si le diviseur est égal à zéro, cette fonction devra soulever l’exception ZeroDivisionError.

2. Écrivez en Python une fonction qui demande à l’utilisateur de saisir deux entiers et ap- pelle votre fonction quotient() en lui passant ces deux entiers. Votre programme devra gérer les éventuelles exceptions soulevées par la fonction quotient() : afficher un message

"Attention, division par 0" si l’exception ZeroDivisionError est soulevée, ou un mes- sage affichant l’exception en question si une autre exception est soulevée. Si aucune exception n’est soulevée, votre programme affiche le résultat.

3. Nous avons vu qu’il existe plusieurs façons de demander à l’utilisateur de saisir une valeur au clavier. Nous avons notamment vu la fonction raw_input(), qui retourne toujours une chaîne de caractères, et la fonction input(), qui retourne une variable dont le type dépend de ce qui a été saisi. Modifiez votre programme pour demander à l’utilisateur de saisir une valeur avec la fonction input(), sans effectuer en conversion de type sur les variables saisies et passées en paramètre de votre fonction quotient().

4. Dans ce cas, la fonction quotient() risque de recevoir des paramètres qui ne peuvent pas être utilisés pour une division. La première chose à faire dans cette fonction est donc de vérifier le type des arguments qui lui sont passés. La fonction type() retourne le type de l’argument qui lui est passé, qui est une constante définie dans le module types. On ne veut accepter par exemple que des entiers courts (de type IntType) ou des réels (de type FloatType). Mo- difiez votre fonction quotient() pour soulever une exception de type TypeError lorsque le dividende ou le diviseur n’est pas d’un type acceptable. La variable incriminée sera remontée par l’exception.

5. Modifiez votre programme afin d’attraper l’exception de type TypeError lorsqu’elle est soule- vée, et d’afficher un message comme "Attention, mauvais type d’un des paramètres :

" suivi du paramètre posant problème.

Exercice 4.2 : Recherche interrompue

Les exceptions ne signalement pas forcément une erreur ; elles peuvent également signaler l’arrêt d’un traitement. Par exemple, le parcours d’un grand tableau peut prendre beaucoup de temps.

On peut souhaiter l’arrêter dès que possible, lorsque le traitement à effectuer est terminé.

1. Écrivez une fonction Python qui demande à l’utilisateur de saisir la taille du tableau et l’initialise en le remplissant de valeurs aléatoires réelles comprises entre 0 et 100, puis retourne ce tableau (vide en cas de problème).

On demande à l’utilisateur de saisir une valeur avec la fonction raw_input(), qui retourne une chaîne de caractères. La conversion en entier peut soulever une exception. Vous traiterez cette exception pour vous prémunir du cas où l’utilisateur ne saisir pas une valeur pouvant être convertie en entier.

Pour générer des valeurs pseudo-aléatoires, vous pourrez utiliser le module random. At-

tention à l’initialisation de votre générateur de nombres pseudo-aléatoires avec la fonction

random.seed().

(13)

2. Écrivez une classe d’exception ValeurTrouvee qui sera levée lorsqu’une valeur sera trouvée dans le tableau. Cette exception pourra être levée avec un ou deux arguments : la valeur trouvée seule, ou la valeur trouvée et l’indice auquel elle a été trouvée. Lorsqu’elle sera levée elle affichera une chaîne de caractères donnant ces informations.

3. Écrivez une fonction Python qui recherche dans un tableau la première valeur strictement supérieure à 50. Lorsque cette valeur a été trouvée, une exception de type ValeurTrouvee est soulevée en passant la valeur trouvée et l’indice auquel elle a été trouvée. Le fait de soulever cette exception interrompt le parcours du tableau et évite de le lire en entier. Si aucune valeur supérieure à 50 n’est trouvée, votre fonction retourne -1.

4. Écrivez un programme Python qui appelle la fonction initialisant le tableau et appelant votre fonction de recherche dans un tableau. Lorsque cette dernière fonction soulève une exception, votre programme doit l’attraper et afficher le résultat de sa recherche.

Exercice 4.3 : Parcours sûr d’un tableau

On veut écrire des fonctions qui permettent d’accéder en toute sûreté aux éléments d’un ta- bleau. Notamment, on veut signaler une erreur lorsque l’utilisateur essaye d’accéder à un élément situé à un indice ne faisant pas partie du tableau : losque l’incide est négatif ou qu’il dépasse au-delà de la taille du tableau.

1. Définissez une classe d’exception ErreurNegIndice qui sera soulevée lorsque l’on essaye d’accéder à une case d’un tableau d’indice négatif. Elle affichera une chaîne de caractères disant que l’indice est négatif en précisant ou non l’indice en question.

2. Définissez une classe d’exception ErreurIndiceTropGrand qui sera soulevée lorsque l’on essaye d’accéder à une case d’un tableau située au-delà des limites du tableau, c’est-à-dire d’indice trop grand. Elle affichera une chaîne de caractères disant que l’indice est trop grand en précisant ou non l’indice en question.

3. Écrivez une fonction lireValeurIndice qui prend en paramètres un tableau et un indice, et retourne le contenu de ce tableau dans la case d’indice passé en paramètre. Cette fonction commence par vérifier que l’indice est bien de type entier (indice : vous utiliserez la fonction type() et le module types).

4. On veut que cette fonction soit sure, c’est-à-dire que si l’indice n’est pas dans les limites du tableau, elle soulève une exception au lieu d’essayer d’aller chercher la valeur demandée.

Vous modifierez la fonction écrite à la question précédente afin de soulever les exceptions écrites plus tôt dans cet exercice.

5. Écrivez une fonction main() pour que votre programme tente de faire des accès erronés à

des valeurs d’un tableau.

(14)

5 Manipulations de fichiers

Exercice 5.1 : Copie d’un fichier

Écrire un programme Python qui lit un fichier par blocs de 4 octets et recopie son contenu dans un autre fichier. À la fin de la copie, votre programme doit afficher le nombre d’octets copiés. Vous ferez attention à gérer les exceptions qui peuvent être soulevées dans vos appels aux fonctions de manipulation de fichiers.

Exercice 5.2 : Explosion de phrase

La fonction split() permet de séparer les éléments d’une chaîne de caractères en les mettant dans une liste. Vous trouverez l’utilisation de cette fonction dans la documentation en ligne de Python.

1. Écrire un programme Python qui lit un texte dans un fichier et écrit son contenu dans un autre fichier à raison d’un mot par ligne.

2. Les lignes du fichier /etc/passwd contiennent divers champs séparés par des caractères : et relatifs à un utilisateur pour chaque ligne. Écrire un programme Python qui lit le contenu de ce fichier et écrit dans un fichier le login (1er champ) et le nom réel (5eme champ) des utilisateurs, séparés par un espace.

Exercice 5.3 : Le répertoire

Dans le TP2, vous avez programmé un répertoire téléphonique. Cependant, vous avez remarqué que les informations contenues dans ce répertoire étaient perdues lorsque le programme est quitté.

Le but de cet exercice est de rendre les données persistantes.

1. Les données du répertoire sont stockées en mémoire dans un dictionnaire. On veut les enre- gistrer dans un fichier à raison d’une personne par ligne, en écrivant le nom puis le numéro et en utilisant le signe : comme séparateur. Écrire une procédure qui prend en paramètre un dictionnaire et une chaîne de caractères et écrit son contenu dans le fichier dont le nom est la chaîne de caractères passée. Le contenu du fichier est écrasé à chaque écriture.

2. Écrire une fonction qui lit le contenu d’un fichier de données défini comme précédemment et dont le nom est passé en paramètre tous forme d’une chaîne de caractères et retourne son contenu sous forme d’un dictionnaire dont les clés sont les noms des personnes et les valeurs sont leurs numéros de téléphone. Attention à retirer le retour à la ligne du numéro de téléphone.

3. Modifier le programme de gestion du répertoire pour appeler les fonctions de lecture et

d’écriture du répertoire. La fonction qui sauvegarde le répertoire doit être appelée à chaque

modification du répertoire (ajout d’un nom, suppression d’une entrée, effacement du réper-

toire). Le répertoire doit être chargé depuis un fichier au démarrage du programme. Vous

pourrez utiliser une variable globale pour stocker le nom du fichier.

Références

Documents relatifs

Copiez le dans votre fichier agenda.py, puis modifier votre fonction affiche pour qu’elle affiche aussi le mois avec chaque évènement

En vous inspirant beaucoup de la fonction monthOfDayNumber corrigée, créez une fonction dateOfDayNumber qui renvoie un tableau de deux entiers, le premier entier étant le numéro du

Pour les redoublants : pour ne pas avoir de collision entre votre travail de l’année dernière et celui de cette année, il faut supprimer ou renommer votre ancien répertoire ProgMod,

Dans le fichier bridge.cpp, réalisez la fonction nbreCarteCouleur qui prend en entrée une MainJ et une CouleurCarte et qui renvoie le nombre de cartes de la main qui ont la

Surchar- ger la fonction sqrt pour calculer la racine carrée d’un nombre complexe.. En fait, la suite précédente ne converge pas dans le cas particulier où a est un

On va donc se baser sur ce que vous aviez codé pour effectuer des surcharges d’opérateurs pour la manipulation des dates et utiliser ensuite doctest pour réaliser des tests sur

Pour désigner une personne enregistrée dans le système, on peut utiliser l’indice de l’élément du vecteur qui contient les informations sur la personne.. De plus, pour

Écrire et tester la méthode float coutTotal de la classe Prescription qui, étant donné une prescription, renvoie le prix total des boîtes nécessaires pour couvrir la prescription et