• Aucun résultat trouvé

Initiation à Python: 6

N/A
N/A
Protected

Academic year: 2022

Partager "Initiation à Python: 6"

Copied!
21
0
0

Texte intégral

(1)

Initiation à Python: 6

ème

Séance Université Mohammed V de Rabat

Faculté des Sciences de Rabat Pr Bouabid El Ouahidi

ouahidi@fsr.ac.ma

(2)

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)

(3)

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?

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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)

(9)

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?

(10)

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

(11)

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

(12)

❑ 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

(13)

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

(14)

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

(15)

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

(16)

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’)

(17)

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)

(18)

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

(19)

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.

(20)

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

(21)

Référence Partagée L=[1,2]

def f(T):

T.append(3) T=[5,7,9]

print(L) f(L) print(L)

Faites un schéma et expliquer le résultat

Références

Documents relatifs

nous construisons le produit g associé au diviseur (/) comme dans l'énoncé du théorème i, et nous posons f==gf*9 ouf* est inversible dans A^. Mais cette décomposition paraît

[r]

Dans ce programme la variable M désigne le nombre de boules contenues dans l’urne (qui diminue qu fil de l’expérience...) donc à chaque tirage la propbabilité de tirer la boule

L’échange de calculatrices entre élèves n’est pas autorisé Toutes les questions sont obligatoires. Lors de la correction il sera tenu compte de la rédaction et de la

Montrer que cette fonction est bien définie si |t| &lt; 1/kAk et donner une majoration pour sa norme en fonction de t et de kAk.. (b) Montrer que ( 1 − tA) −1 est différentiable

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

SMnV (monétaire: semiliquidités) dont la croissance sur toute la période considérée est très régulière (cf. courbe); et SCnv, déjà signalée au §2.2 pour sa spécialisation

On suppose dans cette sous-partie III.A