Skip to the content.

Appel de fonctions.

Si mon programme doit utiliser (appeler) une fonction :

question 1 : quelles sont les informations dont la fonction à besoin ?

Ces informations sont les paramètres que l’on passe à la fonction.

exemple : Je dois utiliser une fonction appelée somme qui AFFICHE la somme de 2 entiers.

somme(x,y)

exemple : Je dois utiliser une fonction appelée moyenne qui AFFICHE la moyenne d’un tableau.

moyenne(tab)

exemple : Je dois utiliser une fonction appelée ajoute qui MODIFIE le contenu d’un tableau pour ajouter un nombre à chaque case du tableau

ajoute(tab,x)

Remarque : Pour des raisons pédagogiques, les deux premiers exemples sont des fonctions qui affichent des calculs. Dans la vraie vie, on ne fait souvent pas çà. On utilise ce que la fonction répond, ou renvoie ou retourne. C’est ce qu’on va voir maintenant.

Question 2 : Est ce que la fonction renvoie quelque chose ?

Si une fonction calcule quelque chose, les gens qui l’ont conçue se sont débrouillés pour qu’elle renvoie cette information à ce qui l’appelle. Le programme doit donc stocker sa réponse dans une variable.

exemple : Je dois utiliser une fonction appelée somme qui CALCULE la somme de 2 entiers.

# appel de la fonction.
resu = somme(x,y)   # la réponse de la fct est stockée dans la variable resu

# utilisation de la réponse de la fonction
print("la somme vaut", resu)

exemple : Je dois utiliser une fonction appelée moyenne qui CALCULE la moyenne d’un tableau.

moy = moyenne(tab)

exemple : Je dois utiliser une fonction appelée ajoute qui MODIFIE le contenu d’un tableau pour ajouter un nombre à chaque case du tableau

ajoute(tab,x)

# après cet appel, le contenu de tab a changé (on a ajouté x à chaque case)

Avec ces deux questions, vous SAVEZ appeler une fonction quelconque qu’on vous décrit.

Attention, néanmoins à ce qui suit : L’ordre des paramètres qu’on passe à la fonction est choisi par le concepteur de la fonction. Vous devez respecter cet ordre. Si c’est une fonction faite par quelqu’un d’autre, la documentation vous indiquera cet ordre.

exemple : pour la fonction ajoute qui MODIFIE le contenu d’un tableau pour ajouter un nombre à chaque case du tableau, la documentation vous dira par exemple que le tableau est le premier argument, et le nombre le second.

auquel cas

# Je l'appelle comme suit :
ajoute(tab,x)

# ET PAS COMME CA :
ajoute(x,tab)

Création de fonctions.

Si je veux CREER une fonction qui fait quelque chose, les questions sont les mêmes, mais j’en rajoute deux.

  1. Question 1 : quel nom va porter ma fonction ?

Je choisis ce que je veux. J’essaye de prendre quelque chose de parlant… C’est ce nom que le programme qui appelle la fonction utilisera (pour l’appeler)

  1. Question 2 De quelles informations ma fonction a besoin ?

exemple : Je veux créer une fonction qui calcule la somme de deux entiers

=> je peux écrire le début du code de ma fonction :

def somme (a,b):
    # des trucs que ma fonction fera

exemple : Je veux créer une fonction qui calcule la moyenne d’un tableau

=> je peux écrire le début du code de ma fonction :

def moyenne (mon_tableau):
    # des trucs que ma fonction fera

exemple : Je dois utiliser une fonction qui MODIFIE le contenu d’un tableau pour ajouter un nombre à chaque case du tableau

=> je peux écrire le début du code de ma fonction :

def ajoute(mon_tableau,nombre):

Dans l’exemple qui précède, l’ordre dans lequel j’ai mis les paramètres de la fonction (tableau puis nombre) imposera à l’utilisateur de les passer dans cet ordre.

  1. Question 3 Comment écrire le contenu de la fonction ?

Dès que vous avez écrit l’entête (le def truc(x,y):), votre fonction dispose des variables x et y, et elle peut les utiliser.

exemple : Je veux créer une fonction qui calcule la somme de deux entiers

# Si j'ai déja écrit la ligne qui suit
def somme (a,b):

    # je peux écrire
    resu =  a+b

la somme de mes deux nombres est bien a+b, vu que c’est sous ce nom que la fonction connait les nombres.

exemple : Je veux créer une fonction qui calcule la moyenne d’un tableau

# Si j'ai déja écrit la ligne qui suit
def moyenne (mon_tableau):

    # je peux écrire
    somme = 0
    for e in mon_tableau
        somme = somme + e
    
    moy = somme / len(tableau)

c’est bien mon_tableau que j’utilise dans ma fonction, car c’est sous ce nom que la fonction connait le tableau.

  1. Question 4 : Est ce que ma fonction renvoie quelque chose.

exemple : Je veux créer une fonction qui calcule la somme de deux entiers

la fonction va renvoyer le résultat du calcul

# Si j'ai déja écrit ce qui les deux lignes ci dessous,
def somme (a,b):
    resu =  a+b

    # pour renvoyer le résultat, je fais
    return resu

exemple : Je veux créer une fonction qui calcule la moyenne d’un tableau

la fonction va renvoyer cette moyenne

# Si j'ai déja écrit toutes les lignes suivantes jusqu'a moy =
def moyenne (mon_tableau):

    # je peux écrire
    somme = 0
    for e in mon_tableau
        somme = somme + e
    
    moy = somme / len(tableau)

    # je dois renvoyer le résultat du calcul, qui est dans la variable moy :
    return moy

exemple : Je veux créer une fonction qui MODIFIE un tableau pour y ajouter un nombre

la fonction ne renvoie rien, on ne met pas de return

def ajoute (mon_tableau, nombre):
    for i in range(len(tab)):
        mon_tableau[i] = mon_tableau[i] + nombre

    # y a pas de return

Gros résumé en exemples

Je vais prendre deux exemples de type d’un examen (meme si la première est au dela de ce que vous savez faire, ce n’est pas grave, vous verrez).

Donner le code d’une fonction qui calcule la valeur des mensualités d’un crédit d’un certain montant, sur n mois, à un certain taux d’intérêt

En appliquant les question qui précèdent :

Je peux donc écrire:

def calculer_mensualites (montant, duree, taux):

    # Ici, je fais un calcul qui utilise les variables
    #   montant, durée et taux.
    # Je vais par exemple faire le calcul FAUX suivant :
    valeur = montant * (1+taux) / duree

    # je fais mon return sur le résultat du calcul
    return valeur

Notez que pour le prochain examen, si vous faites ca (alors que le calcul des mensualité est faux), je vous met au moins la moitié des points de la question. Car l’essentiel du passage d’arguments à une fonction est compris.

Par ailleurs, ne cherchez pas à résoudre cette question complètement, le calcul d’une mensualité est assez complexe.

Faire un programme qui utilise cette fonction pour afficher la valeur des mensualités d’un crédit. Les informations sont entrées par l’utilisateur.

print("entrez le montant du crédit")
prix = float(input())

print("entrez le taux du crédit")
t = float(input())

print("entrez la durée en mois du crédit")
nb_mois = int(input())

# J'appelle ma fonction en passant ces informations dans le bon ordre
# La fonction renvoie la valeur des mensualités, que je stocke dans une variable dont je choisis le nom pour l'afficher.
# Disons que je choisis argh comme nom de variable.

argh =  calculer_mensualite(prix, nb_mois, t)

# je peux afficher la valeur des mensualités
print("chaque mois, vous paierez", argh)

Les petits trucs en plus

Si vous avez bien assimilé ce qui précède, tout va bien. Je rajoute là quelques informations intéressantes :

Qui connait quelles variables ?

Une fonction ne connait normalement que les variables qu’elle déclare et ses paramètres. Ces variables sont “de portée locale à la fonction”.

Le programme principal ne connait que les variables qu’il déclare.

exemple :

def somme(a,b):
    resu = a+b
    return resu

print("entrez un nombre")
x = float(input())

print("entrez un nombre")
y = float(input())

val = somme(x,y)
print("la somme vaut", val)

Dans ce qui précède :

Qui peut appeler une fonction ?

En fait, le programme principal peut appeler une fonction, mais une fonction peut appeler une autre fonction. Chaque fonction ne connait que ses variables locales.

Ce qui me permettrait de faire ceci

# une fonction qui calcule la somme des éléments d'un tableau
def somme(tableau):
    s = 0
    for e in tab:
        s = s + e
    return s

# une fonction qui calcule la moyenne des éléments d'un tableau
def moyenne(tab):
    # on calcule la somme des elements du tableau
    # en appelant la fonction précédente
    sum = somme(tab) 

    resu = sum / len(tab)

# le programme principal lit 3 notes au clavier et calcule la moyenne
notes = []
for i in range(3):
    print("entrez une note")
    x = float(input())
    notes.append(x)

m = moyenne(notes)
print("la moyenne des notes est",m)

Dans ce qui précède :

Et voilà !