Un petit résumé des instructions du langage Python est disponible au téléchargement en cliquant ici.
Quelques exercices autour des fonctions
Un petit résumé des instructions du langage Python est disponible au téléchargement en cliquant ici.
Programmez le calcul de l'image de $x$ par la fonction $f$ définie par $f(x) = 3 x + 4$. Une spécification possible de cette fonction est :
Paramètre | un nombre réel x |
---|---|
Valeur renvoyée | l'image de x par la fonction $x \mapsto 3 x + 4$ |
L'interaction avec l'utilisateur demande au programme d'afficher à l'écran l'image de $5$ par exemple :
On écrit la définition de la fonction f
dans l'éditeur :
On sauvegarde ce programme sous le nom Prem_exemple.py
(par exemple)
puis on l'exécute (touche [F5]
) :
Le message
RESTART: D:/Users/Nicolas/Prem_exemple.py
signifie que la console a redémarré (RESTART
)
en prenant en compte le contenu du fichier Prem_exemple.py
,
c'est-à-dire la définition de la fonction f
.
Pour déterminer l'image de 5
par la fonction f
,
plusieurs possibilités s'offrent à nous :
Cet exercice n'a pas d'autre intérêt que permettre aux élèves d'interpréter la définition d'une fonction écrite en Python.
On considère la fonction ci-dessous, écrite en Python :
def f(x):
y = 2*(x+3)
y = y+x
return y/3-2
On considèrera que le calcul sur les float
est mathématiquement
correct.
f(-2)
?0
puis de 5
par cette
fonction f
. Que constate-t-on ?f
en fonction de
x
. Conclure.Valeur de x en paramètre : |
-2 |
---|---|
1ère valeur de y : |
2*(-2+3) = 2 |
2ème valeur de y : |
2 + (-2) = 0 |
Valeur renvoyée par f : |
0/3 - 2 = -2 |
Valeur de x en paramètre : |
0 |
---|---|
1ère valeur de y : |
2*(0+3) = 6 |
2ème valeur de y : |
6 + 0 = 6 |
Valeur renvoyée par f : |
6/3 - 2 = 0 |
Valeur de x en paramètre : |
5 |
---|---|
1ère valeur de y : |
2*(5+3) = 16 |
2ème valeur de y : |
16 + 5 = 21 |
Valeur renvoyée par f : |
21/3 - 2 = 5 |
On constate que la valeur renvoyée par la fonction f
semble égale à la valeur entrée en paramètre de f
.
Valeur de x en paramètre : |
x |
---|---|
1ère valeur de y : |
2*(x+3) = 2*x + 6 |
2ème valeur de y : |
2*x + 6 + x = 3*x + 6 |
Valeur renvoyée par f : |
(3*x + 6)/3 - 2 = x + 2 - 2 = x |
Avec un algorithme, on supposera (au moins en classes de lycée) travailler avec les objets mathématiques (entiers, réels, etc...).
Avec un programme, l'interprétation est nécessairement soumise à l'implémentation de ces objets mathématiques en machine (cf. la page [Types manipulés par Python] → [Nombres en machine]).
Testons par exemple le calcul de f(2.11)
:
>>> f(2.11) 2.1099999999999994
Ce calcul renvoie une image distincte de l'antécédent. C'est la raison pour laquelle
l'exercice commence par la phrase « On considèrera que le calcul sur les
float
est mathématiquement correct ». C'est aussi la raison pour
laquelle on ne raisonnera pas avec les élèves en général sur un programme :
on raisonne sur un algorithme, qui manipule les objets idéaux des mathématiques.
Le programme ci-dessous est défini sur une plage de données sur laquelle environ 50% des valeurs de $x$ sont telles que $ f(x) \neq x $ en machine (où $f$ est la fonction de notre exercice) :
Écrire en Python le code de la
fonction temps_secondes()
spécifiée comme suit :
Paramètres | un entier h, un entier m, un entier s |
---|---|
Valeur renvoyée | le temps en secondes correspondant au cumul de h heures, m minutes et s secondes |
def temps_secondes(h, m, s):
return h*3600 + m*60 + s
Exemple d'exécution :
>>> temps_secondes(2, 16, 42) 8202
Écrire en Python le code de la
fonction aire_du_rectangle()
spécifiée comme suit :
aire_du_rectangle()
qui respecte la spécification
suivante :
Paramètres | deux nombres réels largeur et longueur |
---|---|
Valeur renvoyée | l'aire du rectangle dont les côtés ont pour mesure largeur et longueur. |
En langage Python, on peut également avoir plusieurs
sorties pour une fonction en séparant ces sorties par une virgule.
L'affectation parallèle des variables permet de récupérer les différentes valeurs
de sortie :
def aire_et_perimetre_du_rectangle(largeur, longueur):
return largeur * longueur, 2*(largeur + longueur)
>>> l, L = 4, 7 >>> aire, perimetre = aire_et_perimetre_du_rectangle(l, L) >>> aire 28 >>> perimetre 22
En fait, il n'y a qu'un seul objet en valeur de retour :
le tuple (largeur * longueur, 2*(largeur + longueur))
.
Dans le cas présent, on peut dire que c'est un couple de valeurs
qui est renvoyé.
Écrire une fonction en langage Python prenant en paramètres les coordonnées de deux points et renvoyant les coordonnées du milieu du segment défini par ces deux points.