(prog_formel.fonctions)= # 3. Les fonctions MĂ©mento Python Raccourcis clavier ## C'est quoi une fonction ? đŸ€š Python, comme tout autre langage de programmation, contient tout une sĂ©ries de fonctions, c’est-Ă -dire **des instructions dĂ©jĂ  dĂ©finies qui font faire quelque chose de prĂ©cis au programme**. Nous en avons dĂ©jĂ  utilisĂ©s deux au chapitre prĂ©cĂ©dent, la fonction `print` qui affiche quelque chose Ă  l’écran et la fonction `type` qui retourne le type d’un objet. Elles permettent aux programmeurs de **gagner du temps en rĂ©utilisant du code dĂ©jĂ  Ă©crit (par quelqu'un d'autre)** 🙏 **L’appel d’une fonction s’effectue en indiquant la nom de la fonction, suivi d’une paires de parenthĂšses**. Ces parenthĂšse contiennent les Ă©ventuels arguments de la fonction, c’est-Ă -dire les objets nĂ©cessaires pour que la fonction puisse ĂȘtre exĂ©cutĂ©e. S’il y en a plusieurs, ces arguments sont sĂ©parĂ©s par des virgules. ```{codeplay} print("Hello!") type(56.8) # calcule le type de 56.8 (float) mais n'affiche rien a = "rouge" print(a) type(a) # calcule le type de a (str) mais n'affiche rien ``` Dans l’exemple ci-dessus, chaque appel de fonction se fait en fournissant un argument. Cet argument peut soit ĂȘtre une valeur donnĂ©e directement (comme dans les deux premiĂšres lignes), soit une variable (ligne 4-5). **Certaines fonctions prennent plus qu’un argument** comme la fonction `pow` qui calcule la puissance de deux nombres, et qui a donc besoin de deux arguments. ```{codeplay} a = pow(2, 3) # calcule 2 puissance 3 print(a) ``` ⚠ Si vous ne donnez qu’un seul argument Ă  la fonction `pow`, Python vous indiquera une erreur. ⚠ **Souvent, les fonctions retournent une valeur qui contient le rĂ©sultat de la fonction**. Dans l’exemple ci-dessus, ce rĂ©sultat (ici 8) est stockĂ© dans la variable `a` puis affichĂ©. La fonction `print` a ceci de spĂ©cial qu’elle peut accueillir zĂ©ro, un, ou plusieurs arguments. Chaque argument sera alors affichĂ© et sĂ©parĂ© par un espace. ```{codeplay} a = 3 b = 5 print("a vaut", a, "et b vaut", b) # print a ici 4 arguments print(f"a vaut {a} et b vaut {b}") # print a ici 1 seul argument (un string formatĂ©) ``` Il est aussi possible d’utiliser ce qu’on appelle un **f-string** (pour string formatĂ©) afin d’intĂ©grer directement des variables Ă  une chaĂźne de caractĂšres. Un string formatĂ© a toujours la forme suivante : `f"...{var1}...{var2}..."` oĂč `var1`, `var2`, etc sont des variables dont l’on veut afficher la valeur. Ainsi les 2 `print` de l'exemple prĂ©cĂ©dent affichent la mĂȘme chose. ````{admonition} Exercice 7 :class: note Ecrivez un programme qui calcule 3.5 Ă  la puissance 5 et qui affiche le rĂ©sultat Ă  l’aide d’une phrase commençant par "3.5 Ă  la puissance 5 vaut ...". ```{codeplay} :file: ex_7.py resultat = ... print(...) ``` ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: ex_7.py resultat = pow(3.5, 5) # On pourrait aussi Ă©crire: resultat = 3.5 ** 5 print(f"3.5 Ă  la puissance 5 vaut {resultat}") ``` ```` ````` Python contient un grand nombre de fonctions, et la plupart d’entre elles sont organisĂ©es au sein de **modules**, qui ne sont rien d’autre que des **collections de fonctions**. Par exemple, le module `math` contient beaucoup de fonctions mathĂ©matiques đŸ€“, comme la fonction `sqrt` qui calcule la racine carrĂ©e (square root en anglais) d’un nombre. Pour utiliser ces fonctions, il faut d’abord **importer le module** grĂące Ă  l'instruction `import`. ```{codeplay} import math a = math.sqrt(9) # calcule la racine carree ``` La premiĂšre ligne de l’exemple ci-dessus indique que l’on va utiliser les fonctions du module `math`. La seconde ligne utilise la fonction `sqrt` pour calculer la racine carrĂ©e de 9. La description des fonctions du module `math` est disponible ici. ````{admonition} Exercice 8 :class: note Trouvez dans le lien ci-dessus la fonction permettant de calculer le sinus d’un nombre. Ecrivez un programme calculant le sinus de 1 radian et affichant le rĂ©sultat Ă  l’écran. ```{codeplay} :file: ex_8.py import math ... ``` ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: ex_8.py import math a = math.sin(1) # la fonction sin attend des angles en radians print(a) ``` Le [radian](https://fr.wikipedia.org/wiki/Radian) est l'unitĂ© d'angle du SystĂšme International. PI radians Ă©quivaut Ă  180 degrĂ©s. ```` ````` ## Les fonctions d'entrĂ©e (input) Une des fonctions les plus utiles est la fonction `input(phrase)` qui affiche `phrase` dans le terminal et **retourne la chaĂźne de caractĂšres que l’utilisateur ou l’utilisatrice Ă©crit dans le terminal**. Cela lui permet de donner des informations au programme, et le rĂ©sultat du programme pourra ainsi dĂ©pendre des indications de la personne qui l’utilise 😉 ```{codeplay} nom = input("Entrez votre nom: ") print(f"Bonjour {nom}") ``` Dans cet exemple, le programme va **demander** Ă  la personne utilisatrice d’écrire son nom dans le terminal, puis assignera la chaĂźne de caractĂšre entrĂ©e Ă  la variable `nom`. Il affiche ensuite "Bonjour" suivi du nom donnĂ© par la personne utilisatrice. ````{admonition} Exercice 9 :class: note Ecrivez un programme demandant d’abord le nom, puis le prĂ©nom de l’utilisateur ou l’utilisatrice et qui la salue ensuite avec son prĂ©nom et son nom. ```{codeplay} :file: ex_9.py nom = ... prenom = ... print(...) ``` ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: ex_9.py nom = input("Entrez votre nom: ") prenom = input("Entrez votre prĂ©nom: ") print(f"Bonjour {prenom} {nom} !") ``` ```` ````` Si l’on souhaite que l’utilisateur rentre un nombre, il faudra **convertir** la chaĂźne de caractĂšre rentrĂ©e soit en un nombre entier avec la fonction `int`, soit en nombre Ă  virgule avec la fonction `float`. ```{codeplay} annee = int(input("Entrez votre annee de naissance: ")) age = 2022 - annee print(f"Vous avez {age} ans cette annee !") ``` Si l’on n’appelle pas la fonction `int` dans la premiĂšre ligne, `annee` sera une chaĂźne de caractĂšre et la seconde ligne retournera une erreur car **Python ne sait pas comment soustraire une chaĂźne de caractĂšre Ă  un nombre** đŸ˜” (faites le test !). ````{admonition} Exercice 10 :class: note Ecrivez un programme qui demande d’entrer un nombre et affiche le carrĂ© de ce nombre dans le terminal. ```{codeplay} :file: ex_10.py nombre = ... ... print(...) ``` ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: ex_10.py n = float(input("Entrez un nombre: ")) resultat = n ** 2 print(f"Le carrĂ© de {n} est {resultat}") ``` Faire la conversion du texte en nombre avec la fonction `float` permet de gĂ©rer le cas oĂč l'utilisateur entrerait un nombre Ă  virgule. ```` ````` ````{admonition} Exercice 11 :class: note ComplĂ©tez et exĂ©cutez le programme suivant: ```{codeplay} :file: ex_11.py r = float(input('Entrez le rayon du cercle: ')) pi = 3.14 diametre = ... circonference = ... surface = ... print() # Affiche une ligne vide print(f'rayon = {r}') print(f'diametre = {diametre}') print(f'circonference = {circonference}') print(f'surface = {surface}') ``` (Rappel : La circonfĂ©rence d’un cercle est Ă©gale Ă  pi fois son diamĂštre. La surface d’un cercle est Ă©gale Ă  pi fois son rayon au carrĂ©.) ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: ex_11.py diametre = 2 * r circonference = pi * diametre surface = pi * r**2 ``` ```` ````` ## Exercices Turtle 🐱 (facultatif) ````{admonition} Exercice - Une maison sur demande :class: note Reprenez l’exercice Turtle du chapitre prĂ©cĂ©dent mais permettez Ă  l’utilisateur ou utilisatrice de choisir la taille de la maison grĂące Ă  la fonction prĂ©dĂ©finie `input`. ```{codeplay} :file: maison_input.py import turtle # Importe le module # On demande Ă  l'utilisateur la taille de la maison d = ... # Copiez ici le code permettant de dessiner une maison ... turtle.done() # Termine le dessin ``` ```` `````{admonition} Solution ````{dropdown} Cliquer ici pour voir la rĂ©ponse :animate: fade-in-slide-down ```{codeplay} :file: maison_input.py import turtle # Importe le module d = int(input("Entrez la taille de la maison: ")) # On demande Ă  l'utilisateur la taille de la maison # On dessine le carrĂ© turtle.forward(d) # Avance de 100 pixels turtle.left(90) # Tourne a gauche de 90 degres turtle.forward(d) turtle.left(90) turtle.forward(d) turtle.left(90) turtle.forward(d) turtle.left(90) # On se dĂ©place au sommet du carrĂ© turtle.left(90) turtle.forward(d) turtle.right(90) # On dessine le triangle turtle.forward(d) # Avance de 100 pixels turtle.left(120) # Tourne a gauche de 120 degres (180-60) turtle.forward(d) turtle.left(120) turtle.forward(d) turtle.left(120) turtle.done() # Termine le dessin ``` ```` `````