Programmer en Python en 2nde

Instructions conditionnelles : exercices supplémentaires

Crédits

Toute la structure html/css/js et une grande partie du contenu ont été réalisés par Nicolas Buyle-Bodin professeur au lycée Lacassagne, avec l'aide de Jean-Manuel Mény, professeur au lycée de la plaine de l'Ain. Ils ont travaillé pendant plusieurs centaines d'heures pour créer un site de formation à destination des enseignants du secondaire de l'académie de Lyon d'une grande qualité visible sur le portail Mathématiques du site académique. Ils ont eu la gentillesse de placer leur code source sous licence Creative Commons BY-NC-SA Respect de la Paternité - Pas d'utilisation commerciale - Partage des conditions initiales à l'identique..

Nous les en remercions chaleureusement.

Jeu de dé

On lance un dé (équilibré, six faces). Le joueur gagne 3 euros s'il tombe sur une face paire inférieure à 6 et gagne 4 euros s'il tombe sur 6. Il perd 2 euros s'il tombe sur une face impaire.

Écrire un programme qui simule un lancer de dé et affiche le gain correspondant.

  • Comment lancer un dé ?
  • Une solution

Le langage Python contient des fonctions prédéfinies comme input(), print(), type(), etc... Il est aussi possible d'importer des bibliothèques de fonctions supplémentaires appelées module.

On peut simuler le lancer d'un dé en utilisant la fonction randint() du module random. Pour cela, il faut commencer par importer cette fonction supplémentaire. C'est le rôle de la première ligne dans le script ci-dessous :


		
		

from random import randint

def jeter_le_de(n):
    """ n : nombres de faces du dé. 
    On tire au hasard un entier parmi 1, 2, 3, ..., n."""
    return randint(1,n)
	
	
def gain(jet):
    if jet == 2 or jet == 4 :
        return 3
    elif jet == 6 :
        return 4
    else :
        return -2
	
	
jet = jeter_le_de(6)
print(gain(jet))

					
					

Équation de droite

Écrire une fonction (procédure) en Python qui respecte la spécification suivante :

Paramètres xA, yA, xB, yB coordonnées des points A et B dans un repère du plan
Valeur renvoyée /
Affichage écranéquation de la droite (AB)

					
					
  • Une solution

def f(xA,yA,xB,yB):
    if xA == xB:		# ou utilisation de isclose()...
        print("Equation de la droite (AB)  : x = ", xA)
    else :
        m = (yB-yA)/(xB-xA)
        p = yA - m * xA
        print( "Equation de la droite (AB) : y = ", m, "x + ", p)		
		
f(1,2,5,9)

Position relative de droites

  1. Écrire une fonction en Python qui respecte la spécification suivante :
    Paramètres m coefficient directeur d'une droite d.
    a coefficient directeur d'une droite d'.
    Valeur renvoyée True si les droites sont parallèles, False sinon
  2. Écrire une fonction (procédure) en Python qui respecte la spécification suivante :
    Paramètres m, p coefficient directeur et ordonnée à l'origine d'une droite d.
    a, b coefficient directeur et ordonnée à l'origine d'une droite d'.
    Valeur renvoyée /
    Affichage L'intersection des droites d et d'

					
					
  • Question 1
  • Question 2


def sont_paralleles(m, a):
    return m == a   		# ou utilisation de isclose()...
	 
		
print(sont_paralleles(2,3))

		
def intersection(m,p, a,b) :
    print("Intersection des droites  d'équation y={}x+{} et y={}x+{}.".format(m,p,a,b) )
    if m == a :
        if p != b:
            print("Ensemble vide.") 
        else :
            print("La droite.")
    else :
        x = (b-p)/(m-a)
        print("L'ensemble réduit au point de coordonnées ({}; {}).".format( x, m*x+p) ) 
		
 

intersection(2,3, 2,4) 
intersection(2,3, 2,3)  
intersection(2,3, 4,1)   

Triangle possible ?

  1. Écrire une fonction en Python qui respecte la spécification suivante :
    Paramètres a, b, c réels
    Valeur renvoyée Celui des trois nombres qui est compris entre les deux autres.
  2. Écrire une fonction en Python qui respecte la spécification suivante :
    Paramètres a, b, c réels
    Valeur renvoyée la plus petite des trois valeurs
  3. Écrire une fonction en Python qui respecte la spécification suivante :
    Paramètres a, b, c réels
    Valeur renvoyée la plus grande des trois valeurs
  4. Écrire une fonction en Python qui respecte la spécification suivante :
    Paramètres a, b, c réels strictement positifs.
    Valeur renvoyée True si l'on peut construire un triangle de côtés a, b, c. False sinon.
  • Question 1
  • Question 2
  • Question 3
  • Question 4

def intermediaire(a,b,c) :
    if a <= b <= c or c <= b <= a : return b
    if b <= a <= c or c <= a <= b : return a
    else : return c 
	
a = int(input("Entrez a : "))
b = int(input("Entrez b : "))
c = int(input("Entrez c : "))

print(intermediaire(a,b,c))


def mini(a,b,c) :
    if a <= b and a <= c : return a
    if b <= a and b <= c : return b
    else : return c
	
	
a = int(input("Entrez a : "))
b = int(input("Entrez b : "))
c = int(input("Entrez c : "))

print(mini(a,b,c))

def maxi(a,b,c) :
    if a >= b and a >= c : return a
    if b >= a and b >= c : return b
    else : return c
	
a = int(input("Entrez a : "))
b = int(input("Entrez b : "))
c = int(input("Entrez c : "))

print(maxi(a,b,c))

def intermediaire(a,b,c) :
    if a <= b <= c or c <= b <= a : return b
    if b <= a <= c or c <= a <= b : return a
    else : return c 
	
def maxi(a,b,c) :
    if a >= b and a >= c : return a
    if b >= a and b >= c : return b
    else : return c
	
def mini(a,b,c) :
    if a <= b and a <= c : return a
    if b <= a and b <= c : return b
    else : return c
	
	
def triangle_possible(a,b,c) :
    return maxi(a,b,c) < mini(a,b,c) + intermediaire(a,b,c)

a = int(input("Entrez a : "))
b = int(input("Entrez b : "))
c = int(input("Entrez c : "))

print(triangle_possible(a,b,c))

Identification de triangles

Écrire un programme qui demande en entrée les longueurs des trois côtés d'un triangle et affiche ensuite s'il est rectangle ou non, et s'il est rectangle affiche s'il est isocèle ou non.

  • Warning
  • Une solution
  • Une solution améliorée

Attention, on rappelle que pour comparer des float, l'utilisation de == ne donnera pas un comportement du script satisfaisant.

Utilisez un test (distance inférieure à une borne epsilonesque) ou utilisez la fonction isclose du module math.

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


from math import isclose

a = float(input("Entrez la longueur du premier côté : "))
b = float(input("Entrez la longueur du second côté : "))
c = float(input("Entrez la longueur du troisième côté : "))



print("Rappel : il s'agit de calculs numériques en machine.")
print("Les conclusions ne sont donc que conjectures.")

# on range les trois nombres en ordre croissant :
if a > b: a,b = b,a
if b > c: b,c = c,b
if a > b: a,b = b,a

if not(isclose(c*c, a*a + b*b)) :
    print("Triangle non rectangle")
elif isclose(a,b) :
    print("Triangle rectangle isocèle.")
else :
    print("Triangle rectangle non isocèle.")

L'usage de fonctions clarifie l'ensemble (séparation des fonctions de calcul et des instructions ne servant qu'à l'échange avec l'utilisateur).


from math import isclose



def est_rectangle(a, b, c) :
    return isclose(c*c, a*a + b*b) or isclose(a*a, c*c + b*b) or isclose(b*b, c*c + a*a)
	
	
def est_isocele(a, b, c) :
    return isclose(a, b) or isclose(a, c) or isclose(c, b) 
	

def message_avertissement() :
    print("\n#######################################################")
    print("Rappel : il s'agit de calculs numériques en machine.")
    print("Les conclusions ne sont donc que conjectures.")
    print("#######################################################\n")
	
		 

a = float(input("Entrez la longueur du premier côté : "))
b = float(input("Entrez la longueur du second côté : "))
c = float(input("Entrez la longueur du troisième côté : "))

message_avertissement() 

if not(est_rectangle(a, b, c)):
    print("Triangle non rectangle")
elif est_isocele(a, b, c):
    print("Triangle rectangle isocèle.")
else:
    print("Triangle rectangle non isocèle.")