Initiation à Python: 6
èmeSéance Université Mohammed V de Rabat
Faculté des Sciences de Rabat Pr Bouabid El Ouahidi
ouahidi@fsr.ac.ma
Boucle et Fonction
Un des principes de la programmation est la factorisation du code;
c’est-à-dire écrire du code une seule fois, le réutiliser à chaque fois qu’on a besoin.
On va voir deux techniques:
❑ La notion de boucle
❑ La notion de fonction (méthodes pour POO)
Comment faire pour afficher de i=1 à 7 les valeurs i et i*i ? Solution?
print (1, 1*1) print(2, 2*2) print(3, 3*3) print(4, 4*4) print(5, 5*5) print(6, 6*6) print(7, 7*7)
Cependant si au lieu de 7 on veut afficher jusqu’à un nombre grand (par exemple 10 000), on voit que cette solution n’est pas applicable.
En python
for i in range(1,8):
print(i,i*i)
Comparer les deux
Pourquoi la notion de boucle est nécessaire?
De manière Générale:
n=entier
for x in range(n):
bloc d’instruction
Ce bloc d’instruction est exécuté n fois.
Rappel: n,m, a,b,c entiers
▪range(n) retourne la liste [0,1,2,3,4,….,n-2,n-1 ]
▪range(n,m) retourne la liste [n, n+1, ….,m-1]
▪ range(a,b,c) retourne la liste [a,a+b, a+2b, ….., a+kb<c]
le plus grand k.
La boucle for
La boucle while
Python offre une autre manière d’avoir une boucle en utilisant while.
Soit l’exemple suivant avec for:
for i in range(10):
print(i, i*i)
En utilisant while maintenant:
i=0
while (i<10):
print(i, i*i) i=i+1
Ces deux morceaux de programmes produisent le même résultat :
Affichage des nombres de 0 à 9 avec leurs carrés
➢ while =tant que
➢ for = pour
La boucle while
while
De manière générale:
condition = expression ( dont la valeur est True ou False) while (condition):
bloc instruction
Dans ce bloc il y aura modification de condition, sinon la boucle peut être infinie.
La boucle while
for vs while
❑ L’indice de la boucle est incrémenté automatiquement dans la boucle for.
for x in range(10):
print(‘Bonjour)’
A retenir :
On constate qu’il n’y a ni initialisation de x ni son incrémentation dans la boucle for.
❑ Lorsque le nombre d’itérations (le passage dans la boucle) est inconnu, c’est la boucle while qui est utilisée. Voir l’exemple suivant
x=0
While (x<10) :
print(‘bonjour’) x=x+1
Condition d’arrêt
Incrémentation de x initialisation
for vs while
Exemple while
Exemple: on désire saisir (et calculer la moyenne) des notes d’un étudiant dont on ne connait pas à l’avance le nombre des ces notes.
On peut convenir de saisir les notes jusqu’à ce qu’on rentre une note négative par exemple.
note = input(‘donner une note’) note = float(note)
somme, nombre=0, 0 while (note >=0):
nombre =nombre+1 somme=somme+note
note=input(‘Donner une autre note ? <0 pour stopper’) note = float (note)
print(‘la moyenne est ‘, somme/nombre)
La notion de fonction
l1=[1,2,3,4,7]
l2= [8,9,10,11,12,14]
l3=[30,40,50,60,19]
for x in l1:
print(x,x*x) for x in l2:
print (x,x*x) for x in l3:
print (x,x*x)
Si on a l1, l2, l3 …. Et ln avec n grand !!!!
l1=[1,2,3,4,7]
l2= [8,9,10,11,12,14]
l3=[30,40,50,60,19]
def f(l):
for x in l:
print (x,x*x)
# L’appel se fait par:
f(l1) f(l2) f(l3)
Même ave n listes c’est ok
Même programme
Sans fonction Avec fonction
Que remarquez vous?
Fonction
De manière générale:
def non_fonction(paramètres):
bloc d’instructions
❑ (paramètres) peut être =() (c’est-à-dire vide, pas de paramètres) Exemple:
def f ():
print(‘Bonjour)
# l’appel à f f()
Bonjour
❑ Dans ce bloc d’instruction il peut y avoir l’instruction return (…).
Exemple:
def f(x,y):
return (x+y)
La notion de fonction
Fonction
❑ Si dans ce bloc il n’y pas l’instruction return la fonction retourne None Rappelant que: if (None) est False.
❑ Dans bloc instruction on peut avoir plusieurs fois l’instruction return, la Première rencontrée fait sortir du bloc. Exemple:
def f(a,b,c):
if (a<10):
return b else :
return c
❑ En python tout est objet, y compris les fonctions.
Soit def f(x):
return x*x
Comme f est la variable qui contient la référence l’objet, on peut donc faire g=f. Et donc exécuter g(5) par exemple.
De manière générale:
def non_fonction(arguments):
bloc d’instructions
La notion de fonction
❑ Les arguments sont des références sur les objets en question.
Exemple:
def f(L):
L.append(3) T=[2,8]
f(T)
print(T) affichera la liste [2,8,3]
Que s’est il passé? Pourquoi T a été changée par la fonction f?
La réponse est
La notion de fonction
Une fonction retourne toujours quelque chose:
def f(l):
for x in l:
print (x)
Cette fonction f retourne None.
def g(l):
for x in l :
print (x) return ‘Fin’
La fonction g retourne ‘Fin’
Valeur de retour d’une fonction
Exemples:
1) Programmer la fonction F(x) = x2+4x + 8 def F(x):
return x**2 + 4*x +8
# Appel F(4)F(7.9)
2) Ecrire la fonction fact(n) qui retourne la factorielle de n.
Rappel n! = n*(n-1)*(n-2) *……. *3*2*1 def fact(n):
res=1, i=n while (i ≥ 1):
res=res*i i=i-1
return res fact(3)
6
Fonction lambda
Une fonction peut être définie par :
❑ def , déjà vu
❑Ou en utilisant la notion de lambda.
❑Toute fonction lambda peut être définie en utilisant def mais l’inverse n’est pas vrai.
❑ L’intérêt d’utiliser la notion lambda sera vu plus loin, lorsque on aura vu la notion de définition (liste, ensemble, etc) par
compréhension.
f= lambda x:x**2
# l’appel f(3)f(5.9)
Exemple
def f(x):
return x**2
# appel f(3)f(5.9) La même fonction f
Avec def Avec lambda
Les arguments d’une fonction
❑ Une fonction peut avoir autant d’arguments souhaités def f(x,y, z, r):
bloc instruction
❑ Certains arguments peuvent être initialisés par défaut:
def f(x,y, z=0, r=1):
Bloc d’instruction z vaut 0 et r vaut 1.
Attention:
Les arguments initialisés doivent être en derniers dans la liste
❑ Une fonction peut ne pas avoir d’arguments:
def f():
print(‘Bonjour’)
La fonction: zip() La fonction Zip():
Exemple:
villes=[ ‘Casablanca’, ‘Rabat’, ‘Fquih Ben Salah’, ‘Agadir’]
populations=[ 5*106, 3*106, 2*105, 2*106],
le nombre de populations respectivement des villes Casablanca, Rabat, Fquih Ben Salah et Agadir.
L= zip(villes, populations], donne la liste suivante:
L =[ (‘Casablanca’,,5*106 ) , (‘Rabat’, 3*106) , (‘Fquih Ben Salah’, 2*105 ), (‘Agadir’, 2*106) ]
Que donne ces codes:
for v, p in zip(villes, populations):
print(v,p) for i,j in zip(range(3), range(10)):
print(i,j)
La Fonction enumerate() Exemple
villes=[ ‘Casablanca’, ‘Rabat’, ‘Fquih Ben Salah’, ‘Agadir’]
for i,x in enumerate(villes):
print(i,v) Affichera:
0 Casablanca 1 Rabat
2 Fquih Ben Salah 3 Agadir
Portées des Variables
a=7 b=10
def f(x,y):
z=12 b=13
print(a,b,x,y,z)
# appel f(2,3)
Que voit-on comme affichage?
Rège appliquée: L.E.G.
Lors de l’évaluation d’une variable (dans le corps d’une fonction), si la variable est locale, sa valeur est prise, sinon si la variable est dans une fonction englobant, sa valeur est prise, sinon la valeur Globale est prise.
La règle LEG a=9 def g(a):
z=10
def f (x,y):
return (x+y+b+z) b=7
return (a+f(3,5))
g(5) La valeur est 30, pourquoi? (La règle L.E.G)
La fonction g
La fonction f
g englobe f