Les exercices de cette page peuvent (doivent) être réservés à une
seconde lecture.
Fonctions - Exercices supplémentaires
Les exercices de cette page peuvent (doivent) être réservés à une
seconde lecture.
On considère la fonction mystere()
définie en
Python par :
def f(a,c):
return 2*c - a
def mystere(xA, yA, xI, yI):
return f(xA, xI), f(yA, yI)
En effectuant les tests nécessaires, déterminez le rôle de
cette fonction mystere()
.
La fonction mystere()
renvoie le couple des coordonnées du
point $B$ symétrique de $A$ par rapport à $I$ :
Écrire une fonction Python qui prend pour paramètre un nombre entier de secondes et qui renvoie la valeur correspondante en heures, minutes, secondes.
s
désigne un nombre entier de secondes.
h ← quotient de la division euclidienne de s par 3600
s ← reste de la division euclidienne de s par 3600
m ← quotient de la division euclidienne de s par 60
s ← reste de la division euclidienne de s par 60
En fin d'algorithme, h
est le nombre entier d'heures
contenues dans le nombre de secondes initial,
m
est le nombre entier de minutes contenu dans le
nombre initial de secondes après retrait des h
heures
et s
désigne le nombre entier de secondes restantes.
Cet exercice a été donné en classe à des élèves de seconde. Il est révélateur
des incompréhensions qui peuvent naître chez les élèves en abusant trop des
instructions input()
et print()
.
On considère la fonction ci-dessous, définie en langage Python :
def e(a, b):
a = a+b
b = a-b
a = a-b
return a, b
e(5, 2)
?e(-8, 4)
?e()
?Répondez aux questions avant de passer à la suite.
e(5, 2)
renvoie le couple (2, 5)
tandis que
e(-8, 4)
renvoie le couple (4, -8)
.
Contenu de a |
Contenu de b | |
---|---|---|
Valeur initiale | a |
b |
Ligne 2 | a+b |
b |
Ligne 3 | a+b |
a+b-b = a |
Ligne 4 | a+b-a = b |
a |
e()
serait clairement mieux définie si elle était
nommée echange()
par exemple.
Afin qu'ils s'habituent à la syntaxe du langage, il leur a été demandé de concevoir une interaction avec l'utilisateur. Voici le programme qui en a résulté :
Lors de la mise en commun, un élève a posé la question :
« Pourquoi le programme ne fonctionne-t-il pas dans l'ordre ? »
Il sous-entendait par là l'ordre de lecture, c'est-à-dire l'ordre des numéros de lignes.
Réponse apportée aux élèves : « très souvent un exercice de mathématiques définit une fonction en début d'énoncé même si celle-ci n'est « utilisée » qu'à la 2ème ou à la 3ème question... »
Un autre argument est susceptible d'expliquer ce problème d'ordre lors de l'utilisation des fonctions.
En sauvegardant et en exécutant un programme contenant uniquement la définition de la fonction echange()
,
celle-ci est « mise en attente », hors du flux de l'interpréteur.
La fonction echange()
ne revient dans le flux d'exécution que lorsqu'on y fait appel.
vitesse_aller_retour()
et respectant le
cahier des charges suivant :
Paramètres | la vitesse moyenne $v_1$ sur un parcours aller, la vitesse moyenne $v_2$ sur le parcours retour |
---|---|
Valeur renvoyée | la vitesse moyenne sur l'aller-retour |
Quelques essais semblent montrer l'impossibilité de la demande. Ce peut être l'occasion de parler des approximations en machine. Ainsi, en prenant une seconde vitesse très grande ($10^{20}$ par exemple), la valeur renvoyée est celle recherchée :
>>> vitesse_aller_retour(60, 10**20) 120.0
L'exercice peut alors être poursuivi par un simple exercice de résolution d'équation (ou en terminale par un exercice sur les limites) :
$$ 120 = \frac{2}{\frac{1}{60} + \frac{1}{v_2}} \Longleftrightarrow \frac{1}{60} + \frac{1}{v_2} = \frac{1}{60} \dots $$Guido aimerait écrire un script lui permettant d'actualiser la moyenne de ses notes.
A chaque nouvelle note de contrôle, son script doit :
Écrire un tel script Python.
n = int(input("Saisir le nombre de notes précédentes : "))
m = float(input("Saisir la moyenne avec ces notes : "))
nv = float(input("Saisir la nouvelle note : "))
nv_moyenne = (n*m + nv)/(n+1)
print("La nouvelle moyenne est {:.2f}.".format(nv_moyenne))
:.2f
permet un formatage (deux décimales) de l'affichage du résultat.