Python en mathématiques - Niveau 1

Fonctions - Exercices supplémentaires

Plus tard ! Les exercices de cette page peuvent (doivent) être réservés à une seconde lecture.

Fonction mystère

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().

  • Réponse

La fonction mystere() renvoie le couple des coordonnées du point $B$ symétrique de $A$ par rapport à $I$ :


					
					

Des secondes aux heures, minutes, secondes

Écrire une fonction Python qui prend pour paramètre un nombre entier de secondes et qui renvoie la valeur correspondante en heures, minutes, secondes.


					
					
  • Algorithme
  • Une solution

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.


					
					

Ordre de lecture

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().

Partie 1 : Travail en salle de classe

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
		
  1. Que renvoie l'instruction e(5, 2) ?
  2. Que renvoie l'instruction e(-8, 4) ?
  3. Que semble réaliser cette fonction ?
  4. Prouver mathématiquement cette conjecture.
  5. Quel nom plus explicite aurait-on pu donner à la fonction e() ?

Répondez aux questions avant de passer à la suite.

  • Questions 1°/ et 2°/
  • Question 3°/
  • Question 4°/
  • Question 5°/
e(5, 2) renvoie le couple (2, 5) tandis que e(-8, 4) renvoie le couple (4, -8).
Cette fonction semble permuter, échanger, les valeurs des paramètres d'entrée.
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
Cette fonction e() serait clairement mieux définie si elle était nommée echange() par exemple.

Partie 2 : Travail en salle informatique :

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.

  • Portée des variables
Le programmeur averti aura remarqué que nous n'abordons pas la notion de portée d'une variable. Tout se passe très bien avec les types de base, profitons-en.

Histoire de vitesse

  1. Écrire en Python le code d'une fonction nommée 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
  2. Marie a fait un aller à 60 km/h. A quelle vitesse doit-elle rouler au retour pour que sa vitesse moyenne sur l'aller-retour soit le double de sa vitesse à l'aller ? Faîtes quelques essais avec la fonction définie précédemment. Conjecturer une réponse puis prouver.
  • Question 1
  • Question 2

					
					

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 $$

Moyenne

Guido aimerait écrire un script lui permettant d'actualiser la moyenne de ses notes.

A chaque nouvelle note de contrôle, son script doit :

  1. Demander la moyenne avant cette nouvelle note (que Guido connaît puisqu'il calcule sa nouvelle moyenne à chaque nouvelle note).
  2. Demander le nombre de notes avant cette nouvelle note.
  3. Demander la nouvelle note.
  4. Afficher la nouvelle moyenne.

Écrire un tel script Python.

  • Une solution

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.