Python en Mathématiques - Niveau 2

Distance

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

Les choix de structures ou de types pour représenter un concept peuvent être importants en programmation. Y compris dans le cadre de programmes très simples.

Dans cette page, nous illustrons un simple exercice d'écriture d'une fonction calculant la distance entre deux points avec plusieurs choix de représentation du point en Python.

  1. Le premier choix est le plus simple : on utilise quatre variables indépendantes pour les deux abscisses et les deux ordonnées. Ce choix a l'avantage de n'avoir pas à en apprendre plus sur le langage.
  2. Le second choix utilise le type tuple. Ce choix a l'avantage d'une écriture proche de l'écriture mathématique.
  3. Le troisième choix est très proche du second. Il utilise le type list plutôt que le type tuple. Ce choix pourrait être privilégié par le fait qu'enseigner le type list est recommandé dès la classe de 1ère (dans le cadre des programmes sur les statistiques ou sur les fonctions notamment).
  4. Le quatrième choix utilise le type dict (dictionnaire). Ce choix est très proche des deux précédents, l'avantage est ici de pouvoir nommer les attributs (ici abscisse et ordonnee), ce qui permet d'écrire des formules plus explicites, plus faciles à décrypter.
  5. Le choix suivant utilise les namedtuple. Ce choix présente l'intérêt de pouvoir nommer les attributs (abscisse, ordonnee) mais également de pouvoir donner un nom explicite au nouveau type utilisé (ici Point).
  6. Le dernier choix s'appuie sur la méthode générique de création d'un nouveau type. Ce dernier choix présente de nombreux avantages (mais est plus long à maîtriser, c'est un outil pour l'enseignant et non pour l'élève). On peut ici nommer les attributs, nommer le nouveau type mais aussi définir des méthodes sur l'objet.

Distance entre deux points

Écrire une fonction Python nommée distance() qui respecte les spécifications suivantes :

Paramètres xA, yA, xB, yB quatre nombres
Valeur renvoyée La distance entre le point A(xA, yA) et B(xB, yB) (coordonnées cartésiennes dans un repère orthonormé).
  • Un code

		
		

Distance entre deux points, bis

On veut à nouveau écrire le code d'une fonction distance() entre deux points.

Mais on décide à présent de représenter un point par un couple de deux nombres. En Python, les couples sont naturellement représentés par le type tuple.

Par exemple (un repère orthonormé du plan étant fixé), le code A = (2, 3) représentera le point $A$ de coordonnées $(2 ; 3)$. On accède à l'abscisse de $A$ par le code A[0] et à son ordonnée par le code A[1].

Écrire une fonction Python nommée distance() qui respecte les spécifications suivantes :

Paramètres A, B deux points représentés comme indiqué ci-dessus.
Valeur renvoyée La distance entre le point A(xA, yA) et B(xB, yB) (coordonnées cartésiennes dans un repère orthonormé).
  • Un code

		
		

Distance entre deux points, ter

On veut à nouveau écrire le code d'une fonction distance() entre deux points.

Mais on décide à présent de représenter un point par une liste de deux nombres.

Par exemple (un repère orthonormé du plan étant fixé), le code A = [2, 3] représentera le point $A$ de coordonnées $(2 ; 3)$. On accède à l'abscisse de $A$ par le code A[0] et à son ordonnée par le code A[1].

Écrire une fonction Python nommée distance() qui respecte les spécifications suivantes :

Paramètres A, B deux points représentés comme indiqué ci-dessus.
Valeur renvoyée La distance entre le point A(xA, yA) et B(xB, yB) (coordonnées cartésiennes dans un repère orthonormé).
  • Un code

		
		

Distance entre deux points, quater

On veut à nouveau écrire le code d'une fonction distance() entre deux points.

Mais on décide à présent de représenter un point par un dictionnaire.

Par exemple (un repère orthonormé du plan étant fixé), le code A = {'abscisse' : 2, 'ordonnée' : 3} représentera le point $A$ de coordonnées $(2 ; 3)$. On accède à l'abscisse de $A$ par le code A['abscisse'] et à son ordonnée par le code A['ordonnée'].

Écrire une fonction Python nommée distance() qui respecte les spécifications suivantes :

Paramètres A, B deux points représentés comme indiqué ci-dessus.
Valeur renvoyée La distance entre le point A(xA, yA) et B(xB, yB) (coordonnées cartésiennes dans un repère orthonormé).
  • Un code

		
		

Distance entre deux points, quinquies

Un autre choix :


from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
 
A = Point(2, 3)
print(A)
print(A.x)
print(A.y)

On obtient :

Point(x=2, y=3)
2
3

Écrire une fonction Python nommée distance() qui respecte les spécifications suivantes :

Paramètres A, B deux points représentés comme indiqué ci-dessus.
Valeur renvoyée La distance entre le point A(xA, yA) et B(xB, yB) (coordonnées cartésiennes dans un repère orthonormé).
  • Un code

from collections import namedtuple

##----- Définition de la nouvelle structure -----##
Point = namedtuple('Point', ['x', 'y'])
  

##----- Définition des fonctions -----##
def distance(A, B) :
	return  ( (B.x - A.x)**2 + (B.y - A.y)**2 )**0.5
	

##----- Tests et interaction -----##
M = Point(2, 3)
N = Point(3, 4)
print("Distance de M  à N  : ", distance(M, N) )

Distance entre deux points, sexies

De façon générique, on peut définir un nouveau type en déclarant une classe.

Nous ne donnons ici pas plus de détails que l'exemple ci-dessous. Bien étudier ce code avant de passer à la page suivante.


from math import sqrt

##----- Définition de la classe -----##
class Point :
	def __init__(self, abscisse = 0, ordonnée = 0) :
		self.x = abscisse
		self.y = ordonnée

 
##----- Définition des fonctions -----##
def distance(A, B) :
	return sqrt( (B.x- A.x)**2 + (B.y - A.y)**2 )
	

##----- Tests et interaction -----##
M = Point(2, 3)
N = Point(3, 4)
print("Distance de M  à N  : ", distance(M, N) )