Aller au contenu

Les fonctions⚓︎

Définitions et premiers exemples⚓︎

fonction

Une fonction est un sous-programme qui rajoute une fonctionnalité à python. Elle comporte :

  • le nom d'appel de la fonction : qui ordonne à l'interpréteur d'exécuter la fonction
  • des paramètres d'entrée (des noms de variables) à prendre en compte ou à modifier
  • le corps de la fonction est l'ensemble des instructions du sous-programme
  • un renvoi de valeurs en sortie.

Important

Cliquez sur les + et prenez le temps de lire les commentaires !

syntaxe d'une fonction dans python
def nom_de_fontion(paramètres séparés par une vigule) :  # (1)!
    """ 
    les instructions à exécuter
    le cors de la fonction est indenté 
    à l'aide de la touche  ++tab++
    """ # (2)!
    return resultat(s) # (3)!
  1. ⚠ les deux points obligatoires.

  2. ⚠ même indentation pour toutes les lignes.

  3. ⚠ facultative mais recommandée.

L'instruction nom_de_fontion() avec les valeurs des paramètres d'entrée est un appel de fonction.

Un premier exemple

Exécuter le script ci-dessous. Rien ne se passe, c'est normal.
L'interpréteur a juste pris en compte la définition de la fonction fois_sept() de paramètre n.

Pour faire appel à la fonction on peut :

  1. Dans la console : saisir et valider l'appel de la fonction avec l'argument \(2\) :
    script console
    >>> fois_sept(5)
    
  2. Dans le script : créer une variable nommée nbr à laquelle vous affecterez la valeur renvoyée par la fonction fois_sept() avec l'argument \(5\). Exécuter et valider votre script.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v3( *o_gr7/=sedkicf:nhuplPyabS4125050s0r0c0F0u0C0q0h0v0C0F0q0q0p010c0u0B010406050q0A0b0b0F0m0E040H0j0C0A0$0j0y050o0-0/0;0?0+0B0405160 190o160+0s0u0e0U0W0Y0!0z0u0l0z0C1n0z0c0)050P0G0C0r1i0X0Z011m1o1q1o0c1w1y1u0c0m170c0z0U0_0q0B0F0y0!0K011A1k010w0R0r0y0F0b0r1u1T1V1!1C1%1y1*1,0)0a0h0D0m0j0B0j0q0u0|0y0h0N1R0m0m0r0v240 1/0y170o1P2h1M1O1N1v0s1;0!1q0y1)211u1f1h0V1B2r0u2t0y0j2x1u0B2a172f2h2L0,1U252z1#2E0m0:0C0)0J2e2P0*2O1:2R1C2T2V0)0K2Z1V2#2f2q012*0F2W040f2.2g0+2;2(0!2@2_0I2|2:2P2=320)0L351a2J0 2x2k0s1O2p30010v2F1-173g183e2N102!053n0N2K373l0t0)0N0w350h2$2Q1j2)0w0)0w0j0u0q0k0q0r0B0c3c2 3L0!0(040g3Y3B3!2?0)0~3v2/3J2=3$0d3H3;3l3$0x35060h3 3I3Z2A3,040E3^421#0j0)0p473*430b0u0)0n3}40414e1#3D042a0c0A0m3.2L4m2%3+0y3-4d4y434a040i4C3K4f4h044j3/2}2~4n2)3-0G0m4I2=4F4c4O044x4J2S3O3Q3S3U3W3)4D1#3$3(4!3_3+4g3a4.4%1C3?3}0 3y0r2h2I523f1g3h2k2n2i0F1x550o3g0+5f0O0Q0S04.

paramètre et argument

Dans l'exemple précédent, la fonction fois_sept() a pour paramètre la variable n.

Dans l'appel fois_sept(5), \(5\) est l'argument de la fonction. Il renvoie la valeur \(35\).

fonction sans résultat renvoyé

La fonction carre() ci-dessous :

  • prend pour paramètre n,
  • affiche le carré de n
  • ne renvoie rien.

  • Exécuter le script suivant.

  • Vérifier à l'aide d'une instruction print() que la variable a contient None (rien).

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v3( *ogr/=sedkicf:nhuplPyabS4125050q0p0c0D0s0A0o0h0t0A0D0o0o0n010c0s0z010406050o0y0b0b0D0l0C040F0j0A0y0!0j0w050m0+0-0/0;0)0z0405140}170m140)0q0s0e0S0U0W0Y0x0s0k0x0A1l0x0c0%050N0E0A0p1g0V0X011k1m1o1m0c1u1w1s0c0l150c0x0S0@0o0z0D0w0Y0I011y1i010u0P0p0w0D0b0p1s1R1T1Y1A1#1w1(1*0%0a0h0B0l0j0z0j0o0s0`0w0h0L1P0l0l0p0t220}1-0w150m1N2f1K1M1L1t0q1/0Y1o0w1%1 1s1d1f0T1z2p0s2r0w0j2v1s0z28152d2f2J0*1S232x1Z2C0l0.0A0%0H2c2N0(2M1.2P1A2R2T0%0I2X1T2Z2d2o012(0D2U040f2,2e0)2/2$0Y2=2@0G2`2.2N2:300%0J33182H0}2v2i0q1M2n2~010t2D1+153e163c2L0~2Y053l0L2I353j0r0%0L0u330h2!2O1h2%0u0%0t0/283a2}3J0Y0$040g3Q3z3S2;0%0|3t2-3H2:3U0d3F3)3j3U0v33060h3@3G3R2y2;0E0%2G2A0c3-3`1Z3U3W3%2e3.3Z0w3#3X2#3Z0j0%0i0i4d3I3{0b0s2*4k3*0%3,470(3^3_3Y3{3B04280c0y0l3$2J0h2|4y2Q0%0D424K1A4g040n4O4e3{4b043N270p4q3/0%462L431A4n384$3Z3+3=494W3}043 0w414u4?444(4/4W4M514 044t2J0)0m3w0p2f2G5c3d1e3f2i2l2g0D1v5f0m3e590L0N0P0o04.

Warning

Une fonction qui renvoie rien en sortie s'appelle une procédure.
Le langage Python ne fait pas de différence dans la syntaxe entre fonction et procédure.
Il vaut par la suite rajouter une instruction return pour bien visualiser la fin de la fonction. Les résultats créés par la fonction et non renvoyé par une commande return sont effacés de la mémoire.

gérer l'indentation

La fonction somme() doit :

  • prendre pour paramètres x et y,
  • renvoyer le résultat de 2x-3y.

  • Exécuter le script. Une erreur IndentationError est signalée.

  • Selectionner les lignes 2 et 3, puis appuyer sur la touche Tab pour corriger l'indentation, et relancer le script.
  • Saisir dans la console >>>somme(3,4). Une erreur TypeError est signalée.
  • Rajouter l'argument y dans la fonction somme(). Relancer et valider le script.
  • Créer une variable a et lui affecter la valeur renvoyée par somme(0,2)
  • Créer une variable b et lui affecter la valeur renvoyée par somme(2,0)
  • Que renvoie la comparaison a != b ?

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v3( ,o*gxr/=sedki-cf:nhuplPyabS12050s0r0c0G0u0D0q0h0w0D0G0q0q0p010c0u0C010406050q0B0b0b0G0n0F040I0j0D0B0#0j0z050o0,0.0:0=0*0C0405150~180o150*0s0u0e0T0V0X0Z0A0u0l0A0D1m0A0c0(050O0H0D0r1h0W0Y011l1n1p1n0c1v1x1t0c0n160c0A0T0^0q0C0G0z0Z0K011z1j010x0Q0r0z0G0b0r1t1S1U1Z1B1$1x1)1+0(0a0h0E0n0j0C0j0q0u0{0z0h0M1Q0n0n0r0w230~1.0z160o1O2g1L1N1M1u0s1:0Z1p0z1(201t1e1g0U1A2q0u2s0z0j2w1t0C29162e2g2K0+1T242y1!2D0n0/0D0(0J2d2O0)2N1/2Q1B2S2U0(0K2Y1U2!2e2p012)0G2V040f2-2f192I0~2w2j0s1N2o2%0Z0w2E1,1630172~2M0 2Z05370M2J2O2;0t0(0M0x2{040h2#2P1i2(0x0(0q0j0.0r3r3u2;0%040g3E2:352=0(0m3K3l3M3H0i3Q2$3w0Z0z0(0F3V3v2z013H0d3r3t3L3X3)0(0y3r060h3^3-3R3/3Z040n3,3F3M0j0(0p403.3(0b0u2+3$2;43040k4c3M3}3P3f2.413/4e0v4h3/490(2`4l2|471!4e4g4w3k3W3(3}3#4C0h3@3_4n3(3n3~0N0B0n0}4I4M2R0(3 4C0*0o3i0r2g2H4%2 1f312j2m2h0G1w4*0o304!0M0O0Q0q04.

Coeur

Pour une fonction avec plusieurs paramètres, l'ordre dans lequel les arguments sont donnés est important.

QCM⚓︎

Je vérifie ma compréhension (bouton en bas pour recommencer)

  1. Soit la fonction suivante :
    1
    2
    3
    def mafonction(  a ) :
        b = a**2 + 3 * a + 2
        return b 
    

    L'appel mafonction(1) renvoie :

    • 6

    • 7

    • None

    • rien

  2. Soit la fonction suivante :
    1
    2
    3
    def mafonction ( a ) :
        b = a**2 - 3 * a + 2
        print( b )    
    

    L'appel mafonction(2) renvoie :

    • 0

    • 0.0

    • None

    • rien

  3. Soit la fonction suivante :
    1
    2
    3
    def mafonction(b , a) :
        return 2 * a + b   
    c = mafonctionC(2**3 ,2+3 )   
    

    La variable c a pour valeur :

    • 16

    • 17

    • 18

    • 21

  4. Soit la fonction suivante :
    1
    2
    def f(a , b ,x) :
        return a*x+b  
    

    L'appel f(2,3,4) renvoie :

    • 10

    • 11

    • 14

    • 0

  5. Soit la fonction suivante :
    1
    2
    def f(a , b ,x) :
        return a*x+b  
    

    La comparaison f(2,1,3)==7 renvoie :

    • True

    • ``#!python False

  6. Soit le script suivant :
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    

    L'appel hi(2, 2) + hello(3, 3) renvoie la valeur :

    • 8

    • 8

    • 10

    • 11

  7. Soit le script suivant :
    1
    2
    3
    4
    5
    6
    7
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    
    a = hi( 1, 2)
    

    L'appel hello(a, 1) renvoie la valeur :

    • 1

    • 2

    • 3

    • 4

  8. Soit le script suivant :
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    

    L'appel hello(hi(3, 2), 4) renvoie la valeur :

    • 10

    • 11

    • 20

    • 24

  9. Soit le script suivant :
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return hi(a, b + 1)
    

    L'appel hello(2, 2) renvoie la valeur :

    • 4

    • 5

    • 6

    • 8

Exercices⚓︎

Exercice 1

Compléter le script ci-dessous de la fonction d'appel affine() :

  • de paramètre x
  • qui renvoie 3*x-1

Valider votre réponse (Ctrl+Enter) et lire la solution.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v3( *ogxr/=sedki-cf:nhuplPyabS12050r0q0c0F0t0C0p0h0v0C0F0p0p0o010c0t0B010406050p0A0b0b0F0m0E040H0j0C0A0!0j0y050n0+0-0/0;0)0B0405140}170n140)0r0t0e0S0U0W0Y0z0t0k0z0C1l0z0c0%050N0G0C0q1g0V0X011k1m1o1m0c1u1w1s0c0m150c0z0S0@0p0B0F0y0Y0J011y1i010w0P0q0y0F0b0q1s1R1T1Y1A1#1w1(1*0%0a0h0D0m0j0B0j0p0t0`0y0h0L1P0m0m0q0v220}1-0y150n1N2f1K1M1L1t0r1/0Y1o0y1%1 1s1d1f0T1z2p0t2r0y0j2v1s0B28152d2f2J0*1S232x1Z2C0m0.0C0%0I2c2N0(2M1.2P1A2R2T0%0J2X1T2f2G0q2f2v2i0r1M2n2$0Y0v2D1+152=162H2!2e2,342|0L2I2N2o010s0%0L0w35040h333b0y0w0%0F0w1#2r3h3k2`010$040g3t2d3l0%0l3A3a3v3x0d3h3j3B3H0%0x3h060h3S3L3G1h1A3d04280c0A0m0|0~2Y3U2#3W0Y0b0t0%0f3F3,2y010j0%0i3?2O3-010y3D3}3b3`040u433v3/2V3Q0}372:18320n302g2@0}2j4m0F1v4f4i1e2Z4i0M0O0Q04.
Exercice 2

Compléter le script ci-dessous de la fonction d'appel mystere() :

  • de paramètres x et y
  • calcule u = x + y
  • calcule v = 3*x
  • renvoie u-v

Valider votre réponse (Ctrl+Enter) et lire la solution.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v3( ,o*gxr/=sedki-cf:nhuplPyabS412+050s0r0c0G0u0D0q0h0w0D0G0q0q0p010c0u0C010406050q0B0b0b0G0n0F040I0j0D0B0%0j0z050o0.0:0=0@0,0C040517101a0o170,0s0u0e0V0X0Z0#0A0u0l0A0D1o0A0c0*050Q0H0D0r1j0Y0!011n1p1r1p0c1x1z1v0c0n180c0A0V0`0q0C0G0z0#0L011B1l010x0S0r0z0G0b0r1v1U1W1#1D1(1z1+1-0*0a0h0E0n0j0C0j0q0u0}0z0h0O1S0n0n0r0w25101:0z180o1Q2i1N1P1O1w0s1=0#1r0z1*221v1g1i0W1C2s0u2u0z0j2y1v0C2b182g2i2M0-1V262A1$2F0n0;0D0*0K2f2Q0+2P1;2S1D2U2W0*0L2!1W2$2g2r012+0G2X040f2/2h0,2=2)0#2^2`0J2}2i2J0r2i2y2l0s1P2q31010w2G1.183b192K2%2h36053i0O2L2Q2?0t0*0O0x360h3p2?0z0x0*0b0F0q0c0r2b3r301k1D0)040g3P3w3g0z0*0m3W2(3R0#3T0i3$2R3(2@0*0F3,2?3T0d0y36060h3|3D3Q2B3/040B3=3g0j0*0p443.3Z043#112#3E450*0M49404b3;4e2:3{3}4g4a0*0e4k1$4604484o3q3 1$0b0u0*2|4B3v3%404y0k4w2*3!3`3}3~3X3.3y042b0c0B0n0 4J4s403T3V4(4D4Q424P0#4y0v4;414v4-4V4*0*0d3`103t391b3o0o3m2j3d102m5a0G1y53561h2$560P0R0T04.
Exercice 3

Écrire le script d'une fonction d'appel mafonction():

  • prend pour paramètre x
  • renvoie la somme de son carré et de \(5\)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013mt)v( *ogxr/=sedkicf:nhuplPyabS125+050q0p0c0D0s0A0o0g0t0A0D0o0o0n010c0s0z010406050o0y0b0b0D0l0C040F0i0A0y0!0i0w050m0+0-0/0;0)0z0405140}170m140)0q0s0e0S0U0W0Y0x0s0j0x0A1l0x0c0%050N0E0A0p1g0V0X011k1m1o1m0c1u1w1s0c0l150c0x0S0@0o0z0D0w0Y0H011y1i010u0P0p0w0D0b0p1s1R1T1Y1A1#1w1(1*0%0a0g0B0l0i0z0i0o0s0`0w0g0L1P0l0l0p0t220}1-0w150m1N2f1K1M1L1t0q1/0Y1o0w1%1 1s1d1f0T1z2p0s2r0w0i2v1s0z28152d2f2J0*1S232x1Z2C0l0.0A0%0G2c2N0(2M1.2P1A2R2T0%0H2X1T2f2G0p2f2v2i0q1M2n2$0Y0t2D1+152=162H2!2e2,342|0L2I2N2o010r0%0L0u35040g333b0w0u0%0.0u0{2a0s0{3h3k2`010$040f3v2d3l0%0k3C3a3x3z0d3h3j3D3J0%0v3h060g3U3N3I1h1A3d04280c0y0l0|0~2Y3W2#3Y0Y0w3F3H3.2y010i0%0h0h3?2O3/010b0s2*3~3b3`040J453x420%0I3S0}372:18320m302g2@0}2j4p0D1v4i4l1e2Z4l0M0O0Q04.