# I. Les fonctions

### Principe

Une fonction est une structure de programmation qui encapsule un bloc d'instructions renvoyant des résultats. Utiliser des fonctions permet d'effectuer des opérations répétitives sans devoir saisir les instructions à chaque fois. Une fois définie, une fonction peut en effet être appelée à plusieurs reprises dans le même programme. Cela permet également de découper un programme en parties plus simples et de rendre le programme plus lisible.

★ La fonction somme ci-dessous simule le lancer de deux dés et renvoie la somme des deux faces sorties.

### Syntaxe

Le mot clé def permet de definir une fonction en précisant son nom et les éventuels paramètres en jeux. La ligne contenant l'instruction def se termine obligatoirement par deux-points ":" qui introduisent un bloc d’instructions. Le bloc d'instructions est délimité grâce à l’indentation. Ce bloc constitue le corps de la fonction. Les résultats sont renvoyés grâce au mot clé return
.

### Remarques

★ L'indentation est un élément syntaxique du langage Python. Dans une fonction, le bloc indenté regroupe l'ensemble des instructions relatives à la fonction.
★ Les éditeurs de code que nous utiliserons comportent une aide syntaxique, taper "entrée" après les deux points ":" ramène le curseur à la ligne en respectant l'indentation attendue.

### Exemples

#### Exemple 1

L'exemple ci-dessous traduit en langage Python la fonction somme de deux dés rencontrée en introduction.
from random import randint # dans la librairie random, randint permet # de générer des entiers pseudo-aléatoires def somme(): # on remarque que cette fonction ne prend aucun paramètre d1 = randint(1,6) # entier pseudo-aléatoire entre 1 et 6 d2 = randint(1,6) return d1 + d2

Exécuter le programme ci-dessus, puis, appeler la fonction somme plusieurs fois en saisissant
"somme( )" puis en tapant sur "entrée" dans la console ci-dessous.

#### Exemple 2

La fonction farenheit prend en paramètre Tc, température en degrés Celsius et renvoie
la température correspondante en degrés Farenheit
def farenheit(Tc): # la fonction dépend du paramètre Tc Tf = 1.8*Tc + 32 # conversion en degrés Farenheit return Tf # renvoie la température en Farenheit

Par exemple, l'appel "farenheit(20)" renvoie 68.0. Exécuter le programme ci-dessus, puis
effectuer différentes conversions dans la console ci-dessous.

#### Exemple 3

La fonction moyenne prend en paramètres trois nombres et renvoie leur moyenne.
def moyenne(a, b, c): # 3 paramètres a, b et c m = (a + b + c)/3 return m

Exécuter le programme ci-dessus, puis, appeler la fonction moyenne pour
différentes valeurs des paramètres a, b et c dans la console ci-dessous.

#### Exemple 4

La fonction comparaison définie ci-dessous utilise deux fonctions auxiliaires.
def carre(x): return x**2 # x puissance 2 def cube(x): return x**3 # x puissance 3 def comparaison(x): return cube(x) <= carre(x)

L'appel "comparaison(x)" renvoie le booléen True si le cube de x est inférieur ou égale au carré de x.
Exécuter le programme ci-dessus, puis appeler "comparaison(0.5)", "comparaison(2)" et "comparaison(0)".

### Exercices:

#### Exercice 1

★ La définition de la fonction v comporte exactement deux erreurs.
def v(t) return 2*t+1

★ Après avoir corrigé les erreurs, exécuter le programme ci-dessus, puis appeler plusieurs
fois la fonction v pour différentes valeurs du paramètre t dans la console ci-dessous:

- Il manque les deux points à la fin de la première ligne,
- l'indentation de la deuxième ligne n'est pas respectée.

#### Exercice 2

★ Ecrire une fonction triple prenant un paramètre n de type entier qui renvoie le triple de n

★ Exécuter le programme ci-dessus puis, appeler plusieurs fois la fonction triple dans la console ci-dessous.

#### Exercice 3

★ Compléter la fonction double pour qu'elle renvoie le double d'un nombre
pseudo-aléatoire compris entre 0 et 10, puis, exécuter la cellule de code.
from random import randint def double():

★ Exécuter le programme ci-dessus puis, appeler plusieurs fois la fonction double dans la console ci-dessous.

#### Exercice 4

L'indice de masse corporelle est calculé en divisant le poids (exprimé en kilos)
par la taille au carré (exprimée en mètres).
★ Ecrire une fonction imc qui prend les paramètres poids et taille et renvoie
l'imc correspondant.

★ Exécuter le programme ci-dessus puis, appeler imc(50, 1.65), puis imc(80, 1.75) dans la console ci-dessous.

#### Exercice 5

On considère la fonction h définie ci-dessous.
★ Ecrire une fonction positif qui prend x en paramètre et renvoie True si h(x) est strictement positif.

def h(x): return 3*x**2 - 15

★ Exécuter le programme ci-dessus puis, appeler positif(1), positif(2) et positif(3) dans la console ci-dessous.

### Digression numérique

#### Boudary functions, Scott SNIBBE 1998

"We think of personal space as something that belongs entirely to ourselves.
However, Boundary Functions shows us that personal space exists only in
relation to others and changes without our control."
Scott SNIBBE

★ Comment délimiter les zones couvertes par un réseau de n relais téléphoniques?
★ Comment modéliser le pelage d'une girafe ?
Les diagrammes de Voronoï apportent une réponse à ces questions.
Placer une vingtaine de points de manière aléatoire en cliquant
dans le cadre ci-dessous. Vous définirez ainsi des cellules de Voronoï.
Si chaque point représente un relai téléphonique, une fonction informatique
permet d'associer le relai le plus proche selon la position de l'utilisateur.
Toutes les postions au sein d'une même cellule de Voronoï activent le même relai.