Python en mathématiques - Niveau 1

Exercices utilisant les booléens

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

Année bissextile

On rappelle que les années bissextiles sont les années divisibles par 4, à l'exception de celles qui sont divisibles par 100 sans l'être par 400.

Par exemple :

  • 2000 est une année bissextile (2000 est divisible par 4. 2000 est divisible par 100 mais aussi par 400 : ne fait donc pas partie des exceptions).
  • 2012 est divisible par 4 (et pas par 100) : 2012 est bissextile.
  • 1900 est divisible par 4, par 100 mais pas par 400. 1900 n'est pas bissextile.

Écrire une fonction Python, nommée bissextile(), qui respecte la spécification suivante :

Paramètre un entier naturel n
Valeur renvoyée True si l'année n est bissextile, False sinon
  • Un code possible

def bissextile(n) :
    regle = (n%4 == 0)
    exception = (n%100 == 0 and n%400 != 0)
    return regle and not(exception)

>>> bissextile(1900)
False

>>> bissextile(2000)
True

>>> bissextile(2002)
False

>>> bissextile(2012)
True
	

réunion d'intervalles (bis)

  1. On considère la fonction suivante :
    
    def reunion1(x):
        return ( x > 17 ) or ( x < 7 )
    			
    Donnez un code qui renverra les mêmes réponses mais utilisant not et and au lieu de or.
  2. Définir la fonction reunion3() qui correspondrait à des réponses True pour tous les réels x (et uniquement ceux-là) qui ne sont pas dans l'ensemble $ [ -10; 5 ] \cup ] 7; +\infty [ $.
  3. Écrire une fonction Python, nommée n_est_pas_dans_union() qui respecte la spécification suivante :
    Paramètres trois réels x, a, b
    Valeur renvoyée False si $ x\in ]-\infty; a] \cup [b; +\infty[ $, True sinon.
  • Question 1
  • Question 2
  • Question 3

Être dans $ ]-\infty ; 7 [ \cup ] 17 ; +\infty[ $, c'est ne pas être dans $ [7 ; 17 ] $.


def reunion1(x):
    return not( 7 <= x and  x <= 17)

ou encore :


def reunion1(x):
    return not( 7 <= x <= 17)

def reunion3(x):
    return not( (-10 <= x <= 5) or  x > 7 )

Dans cette proposition de solution, on a fait le choix de définir une fonction supplémentaire pour simplifier les instructions et favoriser la réutilisation ultérieure de code :

p>

		
		

Algorithme mystère

  1. a, b, c désignent trois entiers. On considère l'algorithme suivant :
    
    A ← a²
    B ← b²
    C ← c²
    test ← la valeur de vérité de ( A+B+C = 2 maximum(A, B, C) )
    	
    Quelle peut être l'utilité de cet algorithme ?
  2. Programmer cet algorithme en langage Python. Donner un ou deux exemples d'utilisation.
    On peut utiliser la fonction max() pré-programmée en Python.
  • Utilité
  • Un programme possible
  • Un second programme
  • Commentaire important

Lorsque $a^2$ est le plus grand des trois entiers $ a^2, b^2, c^2$, la variable test contient la valeur « vrai » si l'on a $ a^2+b^2+c^2 = 2a^2 $, c'est-à-dire si $ b^2 + c^2 = a^2 $. Cette variable test contiendra la valeur « faux » si $ b^2 + c^2 \neq a^2 $.

test a la valeur « vrai » lorsqu'un triangle de côtés de longueurs a, b, c est rectangle et la valeur « faux » sinon.


		
		

Voici un exemple de programme qui n'utilise pas de fonction. Même si cette version est déconseillée par les instructions officielles, nous vous la proposons au cas où un élève rendrait ce type de code.


		
		

En demandant une programmation Python « ouverte » (sans préciser si l'on veut utiliser une fonction ou non par exemple), on constate qu'un même algorithme (même très simple) peut donner lieu à des programmes différents. Cela permet de mieux faire saisir la différence entre algorithme et programmation :

  • Un algorithme, c'est décrire comment on calcule ce que l'on doit calculer.
  • La façon dont on s'en sert ensuite est un problème de programmation, ce n'est plus le sujet de l'algorithme.

Fonction mystère

On considère la fonction Python suivante :


def mystere(a, b, c) :
    return a+b+c == 2*max(a, b, c)

A quoi cette fonction peut-elle servir ? Donner un ou deux exemples.

  • Réponse
  • Commentaire

La fonction renvoie un booléen True ou False.

Cette fonction peut servir à vérifier l'alignement de trois points.

Soient $P$, $Q$, $R$ trois points et $a = PQ$, $b = QR$, $c = PR$.

  1. Plaçons-nous dans le cas où $a$ est la plus grande valeur. La fonction retourne True si $ b+c = a $, c'est à dire si $QR+RP = PQ$ et False sinon.

    • Si $R$ est sur le segment $[QP]$, on a égalité.
    • Sinon il n'y a pas égalité.
  2. Les entrées étant les longueurs $a = PQ$, $b = QR$, $c = PR$, la fonction renvoie True si et seulement si l'un des trois points est sur le segment d'extrémités les deux autres, c'est-à-dire si et seulement si les trois points sont alignés.

On n'oubliera pas qu'avec des valeurs de paramètres de type float, on risque d'avoir une réponse False même lorsque, mathématiquement, on s'attend à une égalité.

Nature d'un quadrilatère

Quatre points $A$, $B$, $C$, $D$ sont donnés par leurs coordonnées (entières pour éviter les problèmes de représentation des nombres en machine) $x_A$, $y_A$, $x_B$, $y_B$, $x_C$, $y_C$, $x_D$, $y_D$.

Écrire des fonctions renvoyant True ou False selon que le quadrilatère $ABCD$ est un parallélogramme, un losange, un carré, etc...

  • Un code possible

Pour simplifier les tests d'égalité, on se place dans le cas où tous les sommets ont des coordonnées entières.

On voit ici que l'usage des chaînes de documentation peuvent être utiles même dans le cadre du programme de seconde ne faisant intervenir que des fonctions de code très bref. On peut imaginer construire au fur et à mesure de l'année un petit utilitaire avec les élèves comme celui qui commence à se dessiner ci-dessous. Les chaînes de documentation proprement renseignées permettraient dans ce cas une utilisation à long terme (c'est là un de leur rôle !)