Programmer en Python en 2nde

Exercices utilisant les booléens

Somme de trois entiers consécutifs

  1. Écrire une fonction en Python somme_de_trois_consecutifs() qui respecte la spécification suivante :
    Paramètre un entier relatif n
    Valeur renvoyée la somme des trois entiers consécutifs dont n est le milieu.
  2. Écrire une fonction en Python divisible_par_3() qui respecte la spécification suivante :
    Paramètre un entier relatif n
    Valeur renvoyée True si n est multiple de 3, False sinon.
  3. On applique la fonction divisible_par_3() à un résultat de la fonction somme_de_trois_consecutifs(). Quel résultat obtient-on ? Justifier.
  • Question 1
  • Question 2
  • Question 3

def somme_de_trois_consecutifs(n):
    return (n-1)+n+(n+1)
	
	
print(somme_de_trois_consecutifs(5))

On peut coder ceci de diverses façons. En voici une :


def divisible_par_3(n):
    return n%3 == 0
	

n = 5
print("{} est-il multiple de 3 ? {}.".format(n, divisible_par_3(n)))

def somme_de_trois_consecutifs(n):
    return (n-1)+n+(n+1)
	
	
def divisible_par_3(n):
    return n%3 == 0
	

n = int(input("Entrez un entier relatif : "))
resultat = divisible_par_3(somme_de_trois_consecutifs(n))
print("Réponse : ", resultat)

La somme (n-1)+n+(n+1) étant égale à 3n, on obtient évidemment toujours True.

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.
  • Utilité
  • Un programme possible
  • Un second programme
  • Commentaire

Si \(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.


def mystere(a, b, c) :
    a, b, c = a**2, b**2, c**2
    return a+b+c == 2*max(a,b,c)
	
	
print(mystere(3,4,5))
print(mystere(4,5,6)) 

Voici un exemple de programme qui n'utilise pas de fonction :


	
a = int(input("Entrez la valeur de a : "))
b = int(input("Entrez la valeur de b : "))
c = int(input("Entrez la valeur de c : "))
	
A, B, C = a**2, b**2, c**2
if A+B+C == 2*max(A,B,C) :
    print("Il existe un triangle rectangle de longueurs de côtés {}, {}, {}.".format(a,b,c))
else :
    print("Il n'existe pas de triangle rectangle de longueurs de côtés {}, {}, {}.".format(a,b,c))

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 retourne un booléen True ou False.

La 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 retourne 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é.