3.1 Python - Function Introduction
On aborde ici un concept essentiel en programmation: Les fonctions ! Afin que tu puisses gravir cette étape, on va y aller progressivement.
Objectifs
✅ Découvrir ce qu'est une fonction ✅ Comprendre dans quel contexte il est nécessaire de créer et utiliser une fonction ✅ Programmer ses premières fonctions
Sommaire
Introduction aux fonctions
Définition:
Une fonction est une suite d’instructions qui définissent un sous-programme et qui renvoient un résultat pouvant être utilisé autant de fois que nécessaire dans un programme plus général.
Lorsqu'on lit la définition ci-dessus, ça peut être un peu barbant. Cependant, elle est complètement vraie, mais peu digeste à ce stade de la formation. Il faut donc observer cette définition partie par partie, en utilisant des exemples concrets, ce qu'on va faire... dès maintenant !
- Une fonction est une suite d'instructions qui définissent un (sous)programme et qui renvoient un résultat.
Observons un exemple:
def dice_roll_sum(coup_1, coup_2, coup_3):
# les instructions ci-dessous
total = coup_1 + coup_2 + coup_3
if total < 8:
return "bad bad not good"
elif total < 13:
return "good"
else:
return "amazing !"
On a crée une fonction ci-dessus. Cette fonction porte le nom "dice_roll_sum". Une fonction est censée, comme il est écrit dans la définition, renvoyer un résultat.
Comment faire pour que notre fonction renvoie un résultat ?
Regardons ça ensemble:
> dice_roll_sum(3,3,4)
> "good"
Maintenant, analysons tout ça:
- Dans la première cellule de code, on a définit notre fonction avec def, puis le nom de la fonction après un espace.
- On a ajouté deux parenthèses après avoir nommé la fonction.
- On a écrit "3 valeurs" à l'intérieur de ses parenthèses. "3 valeurs" car elles sont séparées par des virgules.
Quelles sont ces 3 valeurs ?
- Dans le 1er bloc de code (définition de la fonction), on a écrit (coup_1, coup_2, coup_3)
- Dans le 2ème bloc de code (utilisation de la fonction), on a écrit (3,3,4)
- Un résultat est bien renvoyé. Ce résultat "good" a bien respecté les conditions qu'on impose à notre programme.
Au fait, le résultat renvoyé est "good" car 3 + 3 + 4 = 10. Dans notre fonction, on a indiqué que: si le total de coup_1 + coup_2 + coup_3 est inférieur à 13 mais supérieur ou égale à 8, alors renvoie "good".
Ce qu'il se passe entre les parenthèses est très important
Lorsqu'on définit une fonction, on peut mettre des "choses" entre les parenthèses, en les séparant par une virgule. On appelle ces "choses", des paramètres. Lorsqu'on utilise notre fonction, on peut aussi mettre des "choses" entre parenthèses, en les séparant par une virgule. On appelle ces "choses", des arguments.
Si ma fonction a 3 paramètres, je ne peux pas lui passer moins ou plus que 3 arguments. Autrement, j'aurai une erreur en sortie. Il est même possible de créer une fonction qui a 0 paramètre:
def hello_world():
return "Hello World"
> hello_world()
> "Hello World"
La fonction ci-dessus a 0 paramètre. Elle doit donc avoir 0 argument lorsqu'on l'appelle. C'est bien mais ce n'est pas terrible si on souhaite faire des choses un peu plus complexes...
Tu comprends maintenant un peu mieux pourquoi il y a des parenthèses et ce qu'on peut mettre à l'intérieur. On est d'accord, notre fonction n'est pas très complexe ici, mais rien ne sert de courir, il faut partir à point. Et tu devras en faire de même, avant de devenir une machine en Python, pour créer des programmes en folie !
Observons maintenant la suite de notre définition d'une fonction
2. qui renvoient un résultat pouvant être utilisé autant de fois que nécessaire dans un programme plus général.
Pour bien comprendre cette deuxième partie de la définition, (bien qu'elle ne soit pas indispensable pour créer une fonction, mais intéressante), on va créer un contexte:
Tout en reprenant la fonction qu'on a créé plus haut, imaginez qu'on organise la coupe du monde du lancé de dé en 3 coups. Nous en sommes aux phases de poules. Pour gagner du temps, on va utiliser la programmation en python. On aimerait savoir, parmi les 32 participants, combien sont directement qualifiés en finale. Pour être qualifié en finale, il faut renvoyer le résultat "amazing !".
Comment faire en quelques lignes de code ?
import random
"""
Le module random de python permet de faire beaucoup de choses. On va utiliser la fonction randint pour
générer des valeurs aléatoires entre 1 et 6, pour chaque lancé de dé.
"""
final_players = 0 # On initialise un compteur à 0. Ce compteur compte le nombre de participants accédant à la finale.
for i in range(32): # On fait une boucle en s'assurant que notre code exécute 32 fois notre fonction.
result = dice_roll_sum(random.randint(1,6),random.randint(1,6),random.randint(1,6))
"""
Le résultat ("bad bad not good", "good" ou "amazing !" est attribué à chaque tour à la variable `result`.
"""
if result == "amazing !":
final_players += 1
"""
Si le résultat obtenu est "amazing", c'est que le joueur a fait un total supérieur à 12, et donc il est qualifié.
On ajoute 1 à la variable `final_players` à chaque fois qu'un joueur est qualifié.
"""
print(final_players)
> 8 # Il y a 8 joueurs qualifiés pour la première coupe du monde du lancé de dé en trois coups de l'histoire.
Si on reprend la deuxième partie de la définition d'une fonction:
2. qui renvoient un résultat pouvant être utilisé autant de fois que nécessaire dans un programme plus général.
On peut bien affirmer qu'on a ici bien utilisé le résultat renvoyé par notre sous programme (la fonction) dans un programme plus général (le code ci-dessus).
Tout ça, on aurait pas pu le faire si on avait utilisé "print" au lieu de "return" dans notre fonction. Mais ça, c'est une autre histoire, et tu auras l'occasion d'en discuter avec ton formateur... En attendant, bon challenge à toi !!!
Challenge
Crée une copie du notebook ci-après et réalise les missions qui s'y trouve : Python 3.1 - Function Introduction
Une fois réalisé, poste le lien vers ton notebook en commentaire pour validation, sans oublier de le rendre accessible en lecture pour toute personne disposant du lien.
Critères de validation
- Le notebook est accessible en lecture pour toutes personnes disposant du lien
- Les exercices ont été correctement codés
==$==
Proposition de solution
Dans ce notebook tu trouveras une solution au challenge. Ce n'est pas la seule possible, mais elle fonctionne !
Ressources partagées sur cette quête
- permet de bien comprendre les bases des fonctionshttps://youtu.be/sgJt64iTOYM
- Explication super propre, et il fournit egalement le ipynb pour suivre son explication. (en anglais uniquement)https://www.youtube.com/watch?v=NSbOtYzIQI0