• Aucun résultat trouvé

Programmation en Python Cours 3/8

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation en Python Cours 3/8"

Copied!
15
0
0

Texte intégral

(1)

Cours d’Informatique Scientifique

Programmation en Python Cours 3/8

Laurent Pointal

laurent.pointal @ limsi.fr

@ laposte.net

(2)

Programme de la séance

● Les fonctions

● Pourquoi faire

● Syntaxe

Paramètres

● Visibilité / portée des variables

Valeur de retour

(3)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 3 15

v2.2

Pourquoi des fonctions ?

Réutiliser un bloc d’instructions

Regroupement de blocs de code souvent répétés

Codage et maintenance à un endroit

Éventuellement dans un module séparé, et réutilisable dans différents programmes

Découper un problème en sous-tâches

Tache simple à appréhender

fonction(entrées) sorties

Code plus facile à tester isolément

Programme plus simple à comprendre, une

fonction étant identifiée pour réaliser une tâche

particulière

(4)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 4 15

v2.2

Une fonction

Un nom associé à un bloc d’instructions composées pour réaliser un traitement particulier.

def nom():

Bloc exécuté

lorsque l’on appelle la fonction.

Définition

Utilisation - l’instruction d’“appel” de la fonction

Lors de la définition de la

fonction, son bloc d’instructions n’est pas exécuté!

nom()

À chaque appel de la fonction, son bloc d’instructions est

exécuté.

(5)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 5 15

v2.2

Exemple fonction simple

def fct():

print("=" * 64)

print(" ALERTE " * 8)

print("=" * 64)

(6)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 6 15

v2.2

L’appel de la fonction

def fct():

fct()

fct()

:

fct()

À chaque appel d’une fonction est mémorisé l’endroit

d’où l’on vient, pour continuer l’exécution à l’instruction

juste après lorsque l’on sort de la fonction.

(7)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 7 15

v2.2

Code répété sur différentes données

Calcul et affichage de la

moyenne et des mini et maxi

notesanglais = [12, 11, 8, 15, 12 ] somme = 0

mini = maxi = notesanglais[0]

for note in notesanglais:

somme = somme + note if note > maxi:

maxi = note if note < mini:

mini = note

moy = somme / len(notesanglais)

print("Anglais:", moy, "(", mini, "à", maxi, ")")

(8)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 8 15

v2.2

Code factorisé en fonction simple

Code factorisé dans une fonction.

Données reçues en paramètres.

def moyenne(p_matiere, p_listenotes):

somme = 0

mini = maxi = p_listenotes[0]

for note in p_listenotes:

somme = somme + note if note > maxi:

maxi = note if note < mini:

mini = note

moy = somme / len(p_listenotes)

print(matiere, ":", moy, "(", mini, "à",

maxi, ")")

(9)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 9 15

v2.2

Fonction retournant une valeur

Ajout de l'instruction de retour de valeur.

def moyenne(p_matiere, p_listenotes):

somme = 0

mini = maxi = p_listenotes[0]

for note in p_listenotes:

somme = somme + note if note > maxi:

maxi = note if note < mini:

mini = note

moy = somme / len(p_listenotes)

print(matiere, ":", moy, "(", mini, "à", maxi, ")")

return moy

(10)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 10 15

v2.2

Variables locales à la fonction

Variables affectées dans le bloc de la fonction.

N’existent que dans le bloc de la fonction, pendant son exécution.

Détruites lorsque l’on sort du bloc de la fonction.

Nouvelles valeurs à chaque nouvel appel de la fonction (pas de mémoire entre deux appels) .

def moyenne(p_matiere, p_listenotes):

somme = 0

mini = maxi = p_listenotes[0]

for note in p_listenotes:

somme = somme + note ...

moy = somme / len(p_listenotes)

print(matiere, ":", moy, "(", mini, "à",

maxi, ")")

(11)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 11 15

v2.2

Variables globales au module

Variables affectées dans le module Python (fichier script .py), hors des fonctions.

Existent pendant toute la durée de l’exécution du programme.

Un seul exemplaire commun pour tout le module.

def moyenne(p_matiere, p_listenotes):

...

return moy

nom = input("Nom de l'étudiant:")

r1 = moyenne("Anglais", [12, 11, 8, 15, 12 ]) r2 = moyenne("Français", [16.2, ...15.2 ])

r3 = moyenne("Info. Sci.:", [8.3, ...12.4 ]) r4 = moyenne("Math",[10.3, ... 10.5 ])

tot = moyenne("TOTAL", [r1, r2, r3, r4])

(12)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 12 15

v2.2

Visibilité des noms (‘portée’)

“Builtins” (int, float, str…, print, input…, True, False, None)

globales module truc (fichier truc.py) MAX=100

supermax=4*MAX def f() :

x=3*supermax

globales module chose (fichier chose.py) start=0

supermax=20 def f() : y=22

x=start+1 def g() :

a=supermax-start

locales 1

er

appel à f() x

locales 2

ème

appel à f() x

locales 1

er

appel à f() x,y

locales 1

er

appel à g() a

locales 3

ème

appel à f() x

locales 4

ème

appel à f() x

locales 2

ème

appel à g() a

locales 2

er

appel à f()

x,y

(13)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 13 15

v2.2

Affectation des globales dans les fonctions

Déclaration global nom dans la fonction Pour réaffecter une globale dans une fonction

Par défaut l’affectation dans une fonction crée une variable locale.

compteur = 0

def comptage_affichage(p_message):

global compteur

compteur = compteur + 1

print(compteur,"==>",p_message)

comptage_affichage("Premier")

comptage_affichage("Second")

comptage_affichage("Blabla")

(14)

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 14 15

v2.2

Documenter & Tester les fonctions

Documenter, par exemple avec une chaîne multilignes:

Tester, avant de les utiliser ailleurs:

La documentation est accessible en mode calculatrice avec help(tirage_des).

Séquence de test dans le programme.

Ou fonction de test/validation pour la tâche.

Ou code d’auto-test (quand nous verrons les modules).

import random

def tirage_des(p_nbdes, p_nbfaces):

"""Tirage aléatoire d'une série de dés à n faces.

Retourne une liste de p_nbdes tirages aléatoires de valeurs entières entre 1 et p_nbfaces.

"""

tirages = []

for d in range(p_nbdes) :

tirages.append (random. randint(1, p_nbfaces))

return tirages

(15)

t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 15 15

v2.2

Y’a des bugs (2)

import random

def tirage_des(p_nbdes, p_nbfaces):

"Tirage aléatoire d'une série de dés à n faces."

p_nbdes = int(input("Nombre de dés:"))

p_nbfaces = int(input("Nombre de faces par dé:")) tirages = []

for d in range(p_nbdes) :

tirages.append (random.randint(1,p_nbfaces)) return tirages

1

2

3

4

5

6

7

8

9

10

Références

Documents relatifs

Kolesnik, Van der Corput’s Method of Exponential sums, Cambridge University Press (1991).

Déterminer le nombre de milliers de crayons à produire et vendre quotidiennement pour obtenir le bénéficie maximal.. Quel est alors ce

ةساردلل يرظنلا راطلإا 06 يداصتقلاا ومنلاو ةلاطبلا عيضاولد يقيبطتلا راطلإا :نياثلا ثحبلدا .اهفادىأ فلاتخبا بيلاسلأاو تاودلأا في اوفلتخا

Extraction de paramètres d’une loi de comportement anisotrope avec la méthode des champs virtuels: construction de champs virtuels par sous-domaines et minimisation de l’effet du

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 1/8 3

Exécuté avec variable valant tour à tour chacune des valeurs de séquence. On parle de “boucle for”, de “parcours

● Si nom déjà utilisés dans le module qui importe (collision de noms). Import de tous les noms d’un

urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 12