FONCTIONS, BOUCLES
FONCTIONS, BOUCLES
FONCTIONS, BOUCLES
Python est un langage procédural. C est-à-dire que chaque ligne d un programme est lue et exécutée après la ligne précédente.
Python est un langage procédural. C est-à-dire que chaque ligne d un programme est lue et exécutée après la ligne précédente. Mais il est possible de créer des parties de programme qui ne seront exécutées que si la partie principale du programme y fait appel : ce sont les fonctions et les objets.
Python est un langage procédural. C est-à-dire que chaque ligne d un programme est lue et exécutée après la ligne précédente. Mais il est possible de créer des parties de programme qui ne seront exécutées que si la partie principale du programme y fait appel : ce sont les fonctions et les objets. Cela permet d écrire une seule fois un ensemble d instructions qui pourront être exécutées plusieurs fois à des moments différents de l exécution du programme principal.
Mais il est possible de créer des parties de programme qui ne seront exécutées que si la partie principale du programme y fait appel : ce sont les fonctions et les objets. Cela permet d écrire une seule fois un ensemble d instructions qui pourront être exécutées plusieurs fois à des moments différents de l exécution du programme principal. Dans la suite, on n étudiera que les fonctions.
Définition : une fonction est un ensemble d instructions qui est étiquetée sous un nom et qui s exécute lorsque ce nom est utilisé dans le programme principal.
Les fonctions offrent différents avantages : elles permettent de décomposer une tâche complexe en tâches plus simples ;
Les fonctions offrent différents avantages : elles permettent de décomposer une tâche complexe en tâches plus simples ; elles évitent la duplication des lignes de code ;
Les fonctions offrent différents avantages : elles permettent de décomposer une tâche complexe en tâches plus simples ; elles évitent la duplication des lignes de code ; elles permettent de mettre en évidence les données qu elles utilisent (les entrées) et celles qu elles fournissent (les sorties) ;
Les fonctions offrent différents avantages : elles permettent de décomposer une tâche complexe en tâches plus simples ; elles évitent la duplication des lignes de code ; elles permettent de mettre en évidence les données qu elles utilisent (les entrées) et celles qu elles fournissent (les sorties) ; elles peuvent être réutilisées dans un autre programme par le mécanisme de l import ;
Syntaxe : Dans un programme Python, une fonction est définie par : une en tête commençant par le mot clé def suivi du nom identificateur de la fonction, d une paire de parenthèses (vide ou pas) et se terminant par le caractère : ;
Syntaxe : Dans un programme Python, une fonction est définie par : une en tête commençant par le mot clé def suivi du nom identificateur de la fonction, d une paire de parenthèses (vide ou pas) et se terminant par le caractère : ; un bloc indenté comportant : * une chaîne de caractères documentant l effet attendu de la fonction ;
Syntaxe : Dans un programme Python, une fonction est définie par : une en tête commençant par le mot clé def suivi du nom identificateur de la fonction, d une paire de parenthèses (vide ou pas) et se terminant par le caractère : ; un bloc indenté comportant : * une chaîne de caractères documentant l effet attendu de la fonction ; * un bloc d instructions qui constitue le corps de la fonction et modifie l état de la mémoire en créant (ou non) une valeur renvoyée au programme principal par le mot clé return.
Syntaxe : Dans un programme Python, une fonction est définie par : une en tête commençant par le mot clé def suivi du nom identificateur de la fonction, d une paire de parenthèses (vide ou pas) et se terminant par le caractère : ; un bloc indenté comportant : * une chaîne de caractères documentant l effet attendu de la fonction ; * un bloc d instructions qui constitue le corps de la fonction et modifie l état de la mémoire en créant (ou non) une valeur renvoyée au programme principal par le mot clé return. Le bloc d instructions est obligatoire. Si provisoirement il ne contient pas d instruction, on emploie l instructionpass à sa place. La documentation est facultative mais fortement conseillée.
Dans le programme principal, une fonction est utilisée en écrivant son nom (avec les parenthèses).
Dans le programme principal, une fonction est utilisée en écrivant son nom (avec les parenthèses). Mais une ligne utilisant la fonction ne peut apparaître qu après la définition de la fonction
Dans le programme principal, une fonction est utilisée en écrivant son nom (avec les parenthèses). Mais une ligne utilisant la fonction ne peut apparaître qu après la définition de la fonction Exemple : taper le programme suivant a = 1 b = 3 def cube_de_deux() : return 2**3 c = cube_de_deux() * a + b print(c) Voir le résultat puis placer la ligne c = cube_... après la ligne 2, lancer le programme dans une nouvelle console et voir le résultat;
Exemple : Un programme doit déterminer plusieurs fois si l année en cours est bissextile. On peut créer une fonction pour cela afin d éviter décrire plusieurs fois les mêmes lignes.
Exemple : Un programme doit déterminer plusieurs fois si l année en cours est bissextile. On peut créer une fonction pour cela afin d éviter décrire plusieurs fois les mêmes lignes. from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : bis = True else: bis = False return bis # valeur (ici booléenne) renvoyée par la fonction if bissext() : # programme principal qui utilise la fonction blablabla
On peut évidemment affecter des variables dans le bloc d instructions d une fonction. Mais les variables ainsi crées n ont de sens que dans la fonction. from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : bis = True else: bis = False return bis # valeur (ici booléenne) renvoyée par la fonction if bissext() : # programme principal qui utilise la fonction blablabla
On peut évidemment affecter des variables dans le bloc d instructions d une fonction. Mais les variables ainsi crées n ont de sens que dans la fonction. from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : bis = True else: bis = False return bis # valeur (ici booléenne) renvoyée par la fonction bissext() if bis == True : blablabla cela provoque une erreur parce que la variable bis n est pas définie dans le programme principal
On peut évidemment affecter des variables dans le bloc d instructions d une fonction. Mais les variables ainsi crées n ont de sens que dans la fonction. On dit que leur portée est locale.
On peut évidemment affecter des variables dans le bloc d instructions d une fonction. Mais les variables ainsi crées n ont de sens que dans la fonction. On dit que leur portée est locale. Remarque 1 : on peut donc utiliser le même nom pour une variable définie dans une fonction et une autre variable définie dans une autre fonction ou dans le programme principal car ces étiquettes pointent vers des objets différents dans la mémoire.
On peut évidemment affecter des variables dans le bloc d instructions d une fonction. Mais les variables ainsi crées n ont de sens que dans la fonction. On dit que leur portée est locale. Remarque 1 : on peut donc utiliser le même nom pour une variable définie dans une fonction et une autre variable définie dans une autre fonction ou dans le programme principal car ces étiquettes pointent vers des objets différents dans la mémoire. Exemple : le programme : mémoire : variable globale affiche : 4 ; 8 variable locale
Remarque 2 : on peut utiliser plusieurs return dans une fonction s ils correspondent à des valeurs retournées différentes. Mais le passage par un return entraîne la fin de la fonction (le reste n est pas exécuté). from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : return True # valeur renvoyée si la condition est vérifiée else: return False # valeur renvoyée sinon
Remarque 2 : on peut utiliser plusieurs return dans une fonction s ils correspondent à des valeurs retournées différentes. Mais le passage par un return entraîne la fin de la fonction (le reste n est pas exécuté). from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : return True # valeur renvoyée si la condition est vérifiée else: return False # valeur renvoyée sinon
Remarque 3 : une fonction peut retourner plusieurs valeurs mais toujours avec un seul return. Il s agit en fait d un seul tuple contenant toutes ces valeurs (les parenthèses peuvent être omises. from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : bis = True else: bis = False return (bis, maintenant, n)
Remarque 3 : une fonction peut retourner plusieurs valeurs mais toujours avec un seul return. Il s agit en fait d un seul tuple contenant toutes ces valeurs (les parenthèses peuvent être omises). from datetime import datetime # importer l'objet datetime du module datetime def bissext() : # en tête de la fonction maintenant = datetime.now() # variable contenant l instant actuel n = maintenant.year # récupération de l année en cours if int(n/400) == n/400 or int(n/4) == n/4 and int(n/100)!= n/100 : bis = True else: bis = False return (bis, maintenant, n)
2) Arguments 2) Arguments FONCTIONS, BOUCLES
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre.
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : soit une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False argument de la fonction print(est_pair(2))
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False argument de la fonction qui est utilisé comme variable dans la fonction print(est_pair(2))
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False print(est_pair(2)) argument de la fonction qui est utilisé comme variable dans la fonction et dont la valeur est précisée lors de l appel de la fonction par le programme principal
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False print(est_pair(2)) fonction paramètre (affecté après l appel de la fonction)
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False print(est_pair(2)) affiche True dans la console
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False print(est_pair(2)) p =31 print(est_pair(p)) affiche False dans la console
2) Arguments Le plus souvent, une fonction a une action différente suivant la valeur d une variable du programme principal qui lui est indiquée comme argument ou paramètre. Exemple : une fonction indiquant si un nombre est pair ou non : def est_pair(n) : if n % 2 == 0 : return True else : return False print(est_pair(2)) p =31 print(est_pair(p)) Le paramètre de la fonction prend ici la valeur de la variable globale p
2) Arguments Travail demandé : écrire une fonction volume(a) qui calcule le volume d un cube, dont l argumentaest le côté de ce cube. La tester dans un programme qui demande trois valeurs numériquesa1,a2,a3 à l utilisateur puis affiche la valeur de la somme des volumes des cubes de côtésa1,a2 eta3. solution possible
2) Arguments Une fonction peut accepter plusieurs arguments, de même type ou de types différents. Lors de l appel de cet fonction, chaque paramètre de l appel correspond, dans l ordre, à un argument.
2) Arguments Une fonction peut accepter plusieurs arguments, de même type ou de types différents. Lors de l appel de cet fonction, chaque paramètre de l appel correspond, dans l ordre, à un argument. Exemple: la fonction suivante renvoie le mot formé en répétant n fois le caractère c mis en majuscule : def mot(n, c) : return c.upper() * n
2) Arguments Une fonction peut accepter plusieurs arguments, de même type ou de types différents. Lors de l appel de cet fonction, chaque paramètre de l appel correspond, dans l ordre, à un argument. Exemple: la fonction suivante renvoie le mot formé en répétant n fois le caractère c mis en majuscule : def mot(n, c) : return c.upper() * n L appel print(mot(5, a )) affiche AAAAA alors que mot( a, 5) provoque une erreur car la méthode.upper() n existe pas pour un integer.
2) Arguments Travail demandé : écrire une fonction surface_rec(x, y) qui calcule la surface d un rectangle de côtés x et y et une fonction surf_disc(r) qui calcule la surface d un disque de rayon r. Utiliser ces fonctions dans une fonction pavage(a, b, c) qui calcule le nombre de cercles de rayon c que l on peut dessiner dans un rectangle de côtés a et b. (N.B la fonction floor(n) de la bibliothèque math renvoie un float qui est la partie entière du float n.) Tester la fonction pavage avec un jeu de 3 valeurs pour a, b et c puis observer les résultats obtenus en permutant ces trois paramètres. solution possible
II-Boucles 2) Arguments 2) Arguments II-Boucles FONCTIONS, BOUCLES
II-Boucles 1) Manipulation de collection 2) Arguments 2) Arguments FONCTIONS, BOUCLES II-Boucles 1) Manipulation de collections
II-Boucles 1) Manipulation de collection 2) Arguments Pour manipuler (extraire, chercher, modifier ) les éléments d une collection, il est nécessaire d utiliser une boucle.
II-Boucles 1) Manipulation de collection 2) Arguments Pour manipuler (extraire, chercher, modifier ) les éléments d une collection, il est nécessaire d utiliser une boucle. À l intérieur d une fonction, il est possible de placer toutes les instructions de contrôle de flux (bloc d instructions, test, boucle).
II-Boucles 1) Manipulation de collection 2) Arguments Pour manipuler (extraire, chercher, modifier ) les éléments d une collection, il est nécessaire d utiliser une boucle. À l intérieur d une fonction, il est possible de placer toutes les instructions de contrôle de flux (bloc d instructions, test, boucle). Dans la suite, on écrira donc des fonctions renvoyant une valeur répondant à la question posée ; elles seront appelées par le programme principal dans lequel se trouveront éventuellement les fonctions d interface utilisateur (input() ou print())
II-Boucles 1) Manipulation de collection 2) Arguments Pour manipuler (extraire, chercher, modifier ) les éléments d une collection, il est nécessaire d utiliser une boucle. À l intérieur d une fonction, il est possible de placer toutes les instructions de contrôle de flux (bloc d instructions, test, boucle). Dans la suite, on écrira donc des fonctions renvoyant une valeur répondant à la question posée ; elles seront appelées par le programme principal dans lequel se trouveront éventuellement les fonctions d interface utilisateur (input() ou print()).
II-Boucles 1) Manipulation de collection 2) Arguments préparatifs : Les boucles for utilisent un itérable, c est-à-dire un ensemble de valeurs prises par la variable de boucle.
II-Boucles 1) Manipulation de collection 2) Arguments préparatifs : Les boucles for utilisent un itérable, c est-à-dire un ensemble de valeurs prises par la variable de boucle. La fonction range(start, stop, step) crée la collection des entiers compris entrestart etstop 1 (avec un passtep).
II-Boucles 1) Manipulation de collection 2) Arguments préparatifs : Les boucles for utilisent un itérable, c est-à-dire un ensemble de valeurs prises par la variable de boucle. La fonction range(start, stop, step) crée la collection des entiers compris entrestart etstop 1 (avec un passtep). Le paramètrestart est facultatif. S il est omis, il vaut 0.
II-Boucles 1) Manipulation de collection 2) Arguments préparatifs : Les boucles for utilisent un itérable, c est-à-dire un ensemble de valeurs prises par la variable de boucle. La fonction range(start, stop, step) crée la collection des entiers compris entrestart etstop 1 (avec un passtep). Le paramètrestart est facultatif. S il est omis, il vaut 0. Le paramètrestep est facultatif. S il est omis, il vaut 1.
II-Boucles 1) Manipulation de collection 2) Arguments préparatifs : Les boucles for utilisent un itérable, c est-à-dire un ensemble de valeurs prises par la variable de boucle. La fonction range(start, stop, step) crée la collection des entiers compris entrestart etstop 1 (avec un passtep). Le paramètrestart est facultatif. S il est omis, il vaut 0. Le paramètrestep est facultatif. S il est omis, il vaut 1. Par exemple, range(1, 10, 2) crée, à la volée, les éléments de la collection [1, 3, 5, 7, 9] (mais sans créer l objet [1, 3, 5, 7, 9] luimême).
II-Boucles 1) Manipulation de collection 2) Arguments recherche d un élément dans une liste non triée : Travail demandé : Écrire une fonction qui renvoie True ou False selon qu un élément el donné appartient à une liste (ou un tuple) lst donnée. (On n utilisera pas de fonction prédéfinies en Python obtenant ce résutat ) version 1 : en utilisant range() comme itérable ; version 2 : en utilisant la liste elle-même comme itérable ; solution possible
II-Boucles 1) Manipulation de collection 2) Arguments recherche d un élément dans une liste non triée : Travail demandé : Écrire une fonction qui renvoie True ou False selon qu un élément el donné appartient à une liste (ou un tuple) lst donnée. (On n utilisera pas de fonction prédéfinies en Python obtenant ce résutat ) version 1 : en utilisant range() comme itérable ; version 2 : en utilisant la liste elle-même comme itérable ; solution possible Variante : la fonction renvoie l indice de el dans la liste lst ; solution possible
II-Boucles 1) Manipulation de collection 2) Arguments recherche du maximum dans une liste de nombres : Travail demandé : Écrire une fonction qui renvoie la valeur et l indice du maximum d une liste (ou un tuple) lst d entiers donnée. solution possible Variante : même question pour le minimum de la liste.
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques 2) Arguments FONCTIONS, BOUCLES II-Boucles 1) Manipulation de collections 2) Calcul de grandeurs statistiques
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques Rappel des définitions statistiques pour une liste de n valeurs : valeur moyenne variance écart-type estimateur de σ X 1 n X i n i = 1 1 n i n i = 1 = V ( X ) = ( X X ) 2 V ( X ) 1 k 1 k<< n σ = s( X ) = ( X X ) 2 i= 1 i
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques Quel algorithme informatique permet de traduire l expression n = i= 1 mathématiques? s n i
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques Quel algorithme informatique permet de traduire l expression n = i= 1 mathématiques? s n i En fait, il existe une fonction effectuant la somme des termes d une liste (ou d un tuple) : sum(var_liste) ou sum(var_tuple). Travail demandé : Écrire deux fonctions qui renvoient l une la valeur de la moyenne et l autre la variance d une liste (ou un tuple) lst d entiers donnée. solution possible
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques Travail demandé : Montrer le théorème et l utiliser dans une d une liste d entiers. n n 1 1 V X X i X X i X n i= 1 n i= 1 ( ) ( ) 2 2 2 = = autre fonction calculant la variance solution possible
II-Boucles 1) Manipulation de collection 2) Arguments 2) Calcul de grandeurs statistiques
def cube(x) : return x**3 a = float(input("indiquez le côté du cube :")) b = float(input("indiquez le côté du cube :")) c = float(input("indiquez le côté du cube :")) print(cube(a) + cube(b) + cube(c))
from math import pi,floor def surf_rectangle(x, y): return x*y def surf_cercle(r): return pi*r**2 def pavage(a, b, c) : s1 = surf_rectangle(a, b) s2 = surf_cercle(c) return floor(s1/s2) print(pavage(6, 5, 2))
version 1 : def est_dans_liste_range(x,lst): rep = False for i in range(len(lst)): if x == lst[i]: rep = True return rep version 2 : def est_dans_liste_in(x,lst): rep = False for e in lst: if e == x: rep = True return rep version 3 : def est_dans_liste_elegant(x,lst): return x in lst
version 1 : def est_dans_liste_range_index(x,lst): for i in range(len(lst)): if x == lst[i]: return i return False version 2 : def est_dans_liste_range_index(x,lst): for (i,el) in enumerate(lst): if x == lst[i]: return i return False enumerate(lst) est un itérateur qui crée la collection des tuples (indices, élément)
def indexmaximum(lst): n = len(lst) imax = 0 #pourquoi cette ligne? max = lst[0] for i in range(1, n): if lst[i] > max : max = lst[i] imax = i return (imax, max) #pourquoi cette indentation?
def somme(liste): som = 0 for x in liste : som = som + x return som def moyenne(liste): nombre = len(liste) if nombre!= 0 : somme = sum([x for x in liste]) return somme / nombre else : return Cette liste est vide ) def s_e_c(liste, val): #somme des carrés des écarts de chaque élément de liste par rapport à la valeur val somme = 0 for elt in liste: somme += (elt - val)**2 return somme def variance(liste): return s_e_c(liste, moyenne(liste)) / len(liste)
def variance2(liste) : n = len(liste) # taille carre_moy = moyenne(liste)**2 s = sum( [ x**2 for x in liste] ) variance = s / n - carre_moy return variance