SNT Python 3

Identification

Infoforall

7 - Déclarations et appels de fonctions


Les fonctions sont présentes dans les langages de programmation courants. Vous allez voir que ce terme est très proche des fonctions mathématiques.

IDE Python proposé : Thonny

Documents de cours : pdf ou odt.

1 - Déclaration puis appel d’une fonction

Déclaration d'une fonction

Déclaration : une fonction se déclare en début de programme à l’aide du mot-clé def . On place ensuite le nom de la fonction, les paramètres entre les parenthèses et un double-point : final.

Exemple :

1 2 3
def fois2(a): # Déclaration de la fonction qui recevra un paramètre nommé localement a b = a * 2 # On crée une variable locale b qui sera supprimée à la fin de la fonction return b # On renvoie le résultat et on sort

01° Placez ce programme dans Thonny, et lancez le en appuyant sur la flèche verte. Sauvegardez le dans votre espace de travail.

1 2 3
def fois2(a): b = a * 2 return b

Questions

  1. La fonction se place-t-elle en mémoire ?
  2. La fonction se lance-t-elle seule ?

...CORRECTION...

On voit dans l'onglet Variables que cette fonction est maintenant en mémoire. Une fonction est en effet une sorte de variable. Son contenu ? Du code plutôt qu'un nombre ou un string.

Par contre, on voit également dans la console que rien ne se passe à part cela : la déclaration d'une fonction ne lance pas automatiquement celle-ci. On ne fait que la placer en mémoire.

Déclaration

02° Faire ces appels à la fonction dans la console puis répondre aux questions.

>>> fois2(10) 20

Questions :

  • La fonction se lance-t-elle cette fois ?
  • Lors de cet appel, que va contenir la variable-paramètre a ?
>>> fois2(40) 80

Questions :

  • La fonction se lance-t-elle cette fois ?
  • Lors de cet appel, que va contenir la variable-paramètre a ?

...CORRECTION...

1er appel

Appel 1

On voit que cette fois on active bien la fonction. On dit qu'on en fait l'appel.

On notera qu'on envoie 10 et que ce 10 va donc se "ranger" dans le paramètre a.

On exécute donc la suite comme si on avait écrit a = 10.

La suite va donc s'exécuter jusqu'à rencontrer le return. La fonction renvoie donc b et le programme reçoit donc 20.

2e appel

Appel 2

On voit que cette fois on active bien la fonction. On dit qu'on en fait l'appel.

On notera qu'on envoie 40 et que ce 40 va donc se "ranger" dans le paramètre a.

On exécute donc la suite comme si on avait écrit a = 40.

La suite va donc s'exécuter jusqu'à rencontrer le return. La fonction renvoie donc b et le programme reçoit donc 80.

03° Tester cette version pour vérifier qu’elle fait bien la même chose (mais en plus simple encore).

1 2
def fois2(a): return a * 2

...CORRECTION...

Exactement le même comportement :

2e appel

Appel 3

2 - Fonction à plusieurs paramètres

Fonction à plusieurs paramètres

On peut créer des fonctions possédant 0, 1, 2 ou plus paramètres. Le tout est de le déclarer.

1 2 3
def mystere(a, b, c): # Prototype de la fonction (3 paramètres locaux a, b et c) reponse = a + b*2 + c # On crée une variable locale reponse qui sera supprimée à la fin return reponse # On renvoie

04° Placez le programme précédent dans Thonny, et lancez le.

  1. La fonction se place-t-elle en mémoire ?
  2. La fonction se lance-t-elle seule ?

...CORRECTION...

Comme avant : déclarer une fonction place la fonction en mémoire mais ne la lance pas automatiquement.

D'ailleurs, on serait bien ennuyé : que placer dans a, b et c ?

05° Utilisez l’appel suivant dans la console.

>>> mystere(2, 10, 7) 29

Question

  1. Que vaut a lors de cet appel ?
  2. Que vaut b ?
  3. Que vaut c ?

...CORRECTION...

Il faut comparer la ligne de la déclaration et la ligne de l'appel :

1
def mystere(a, b, c):
>>> mystere(2, 10, 7)

On voit alors bien que a reçoit 2, b reçoit 10 et c reçoit 7.

06° Expliquer clairement ce que doit renvoyer mystere(10, 2, 3) puis justifiez rapidement le résultat qui va s'afficher lors de ce test :

>>> a = mysterere(10, 2, 3) >>> b = 10 * a >>> b

...CORRECTION...

a reçoit 10, b reçoit 2 et c reçoit 3.

On calcule alors la valeur attribuée à reponse : 10 + 2*2 + 3 soit 17.

On renvoie donc 17.

3 - Exercices

07° Compléter la fonction addition() : elle doit renvoyer l’addition de deux entiers qu’on fournira lors de l’appel.

Voici son prototype :

1
def addition(a, b):

Noter la déclaration de la fonction sur votre copie puis l’appel qu’on doit en faire pour additionner 10 et 15.

08° Compléter la fonction affine() pour renvoyer a*x + b à partir des paramètres a, b et x.

1
def affine(a, x, b):

Noter votre fonction sur votre copie.

09° Fournir deux appels réalisés avec cette fonction, au choix.

10° Tapez ceci dans la console pour vous souvenir de la façon de tester une égalité entre deux variables a et b.

>>> a = 10 >>> b = 20 >>> a == b False >>> a*2 == b True >>> a == b False

11° Compléter la dernière ligne de verification_v1() pour renvoyer True si le paramètre mot_recu passé en paramètre est le même que le bon mot de passe, contenu dans une variable mdp, locale à la fonction. Sinon, elle renvoie False.

1 2 3
def verification_v1(mot_recu): mdp = '1234!' return ???

12° Fournir deux appels réalisés avec cette fonction, au choix.

13° Utiliser la fonction ci-dessous pour vérifier qu’elle renvoie la même chose que la précédente (mais en plus "naïve" puisque cette version teste si c'est Vrai pour renvoyer Vrai, sinon elle renvoie Faux. Un utilisateur peut-il se rendre compte que les instructions internes des deux fonctions sont différentes ?

1 2 3 4 5 6
def verification_v2(mot_recu): mdp = '1234!' if mot_recu != mdp: return False else: return True

RAPPEL sur != : cet opérateur booléen teste la différence entre les deux termes à sa gauche et à sa droite.

14° Modifier la fonction verification_v2() pour qu'elle utilise plutôt l'opérateur d'égalité (==). Son utilisation doit renvoyer exactement les mêmes réponses : seule la façon dont elle est conçue à l'interne diffère. Du point de vue de l'extérieur, on ne doit se rendre compte de rien.

15° Créer une fonction plusGrand(a, b) qui renvoie True si a est plus grand que b, False sinon.

4 - FAQ

On fait comment avec une fonction sans paramètre ?

On n'en place pas, c'est tout. Pas contre, on laisse les parenthèses.

Exemple de déclaration :

1 2
def nom(): return 'Iron Man'

Exemple d'appel :

>>> nom() 'Iron Man'

Activité publiée le 25 02 2021
Dernière modification : 25 02 2021
Auteur : ows. h.