ISTIC Prog Python
$
Algo & Programmation
TP N° 4 : Fonctions, Gestion des fichiers
et des exceptions
Objectifs
1. Ecrire des fonctions avec un nombre de paramètres fixe et variable
2. Gérer des fichiers en Python
3. Gérer et déclencher les exceptions dans un code Python
Exercice 1
Analyser les bouts de code suivants :
Compactage de paramètres (lors de définition de
def moyenne(x, *args): def moyenne(x,**kwargs):
somme = x somme = x
for y in args: for z,y in [Link]():
somme += y somme += y
return somme / (1 + len(args)) return somme / (1+len(kwargs))
print(moyenne(5)) print(moyenne(5))
print(moyenne(5, 2)) print(moyenne(2,**{"Amine":12,"Ibrahim":14.5}))
print(moyenne(5, 2, 10, 20, 12, 22)) print(moyenne(2, Amine= 12, Ibrahim = 14.5))
fonction):
Le seul paramètre obligatoire est …. On compacte le reste des paramètres dans .............. s’il
s’agit
de paramètres non nommés et dans............ s’il s’agit de paramètres nommés.
Décompactage de paramètres (lors de l’appel de fonction):
def dire_bonjour(prenom, nom):
print("Bonjour", prenom, nom)
Passage de paramètres nommés Passage de paramètres non
d = {"nom": "Gayerie", "prenom": "David"} nommés s = ["David","Gayerie"]
dire_bonjour(**d) dire_bonjour(*s)
dire_bonjour(*s, *d)
Passage de paramètres non nommés et
nommés
s = ["David"]
d = {"nom": "Gayerie"}
dire_bonjour(*s, **d)
Rq. l’opérateur de décompactage * sur un dictionnaire passe seulement les ..de ce
dictionnaire
alors que ** passe ………………….
Afef SLIMANI 1
ISTIC Prog Python
$
Fonction anonyme : lambda Algo & Programmation
Création puis exécution
f=lambda x : x*x*x;
f(10)
Fonction exécutée lors de création
(lambda x : x*x*x)(10)
Fonction qui utilise une fonction anonyme
def puissance(n):
return lambda x : x ** n
puissance(2)
puissance(2)(8)
puissance(8)(2)
Fonction utilise lambda et compactage
def puissance(n):
return lambda *args : sum(args) ** n
puissance(2)(3)
puissance(2)(3,4)
puissance(2)()
Fonction lambda avec map
my_list = [1, 2, 3, 4, 5]
print(list(map(lambda x: x > 2, my_list)))
Gestion des fichiers et exceptions
try:
file = open("[Link]", "r") [Link]("Hello
World!")
except IOError as e: print ("Erreur !!")
print ([Link],
[Link]) else:
print ("Contenu écrit dans le fichier avec succès")
[Link]()
try:
file = open("[Link]", "a") [Link]("Helloo World!")
finally:
print ("Malgré tout, je suis toujours exécuté ;)")
[Link]()
try:
x=int(input("Saisir un nombre pair différent de
2:\n")) assert(x%2==0)
if x==2:
raise ValueError()
except AssertionError :
print(x,"est impair")
except ValueError:
print("x doit être différent de 2!!")
else:
with open("[Link]","a") as
f: [Link](str(x))
Afef SLIMANI 2
ISTIC Prog Python
$
Algo & Programmation
Exercice 2
Écrire une fonction pair() qui accepte plusieurs nombres en argument et renvoie une
liste avec lesnombres pairs. Si on ne passe pas d’argument, elle renvoie None
Exercice 3
1. Écrire une fonction lambda f qui accepte trois paramètres a, b,et c. Cette fonction
retourne une liste de a tuples de deux valeurs val1 et val2 générées aléatoirement avec
val1<b et val2<c. Afficher la liste L obtenue.
NB. L’appel de la fonction crée doit être effectué par un dictionnaire de trois
éléments
2. Ouvrir un nouveau fichier « [Link] » et écrire quelques lignes où chacune contient 3
nombres séparés par des virgules. Déclencher l’exception FileNotFoundError si le
fichier n’existe pas.
3. Invoquer f sur chaque ligne du fichier « [Link] »
Exercice 4
Écrire une fonction qui retourne 1 si deux ensembles ens1, ens2 de chaines de deux
lettres sontcomplémentaires (comme 'AB' et 'BA'), 0 sinon, et qui déclenche une exception
1. Si les deux ensembles n’ont pas la même longueur
2. Si les deux chaines ne sont pas de deux lettres
Exemple : ens1={'AB', 'DA', 'KE'} et ens2={'EK', 'BA', 'AD'}
ens1 et ens2 sont complémentaires, donc la fonction retourne1
Afef SLIMANI 3