# -*- coding: utf-8 -*- # Fonctions #EXERCICE 1 #1 def imc(m: float, t: float) -> int: """ Renvoie la classe d'Indice de Masse Corporelle selon la formule IMC = masse / taille² Paramètres : m : float (masse en kg) t : float (taille en mètres) Préconditions : m > 0 t > 0 Retourne : int : 0, 1 ou 2 selon la classe (sous-poids / normal / surpoids) """ assert(m > 0) assert(t > 0) res = m / t **2 if res < 18.5: return 0 # sous-poids elif res > 25: return 2 # sur-poids else : return 1 # normal # Tests unitaires assert(imc(50, 1.7) == 0) assert(imc(60, 1.65) == 1) assert(imc(70, 1.6) == 2) #2 def max2(a:int, b:int) -> int: """ Renvoie le plus grand des 2 entiers Parameters ---------- a : int un entier. b : int un entier. Returns ------- int le plus grand. """ if(a > b): return a return b assert(max2(0,1)==1) assert(max2(10,1)==10) #3 def max3(a:int, b:int, c:int) -> int: if(a > b): if(a > c): return a else: return c else: if(b > c): return b else: return c assert(max3(0,1,2) ==2) assert(max3(1,0,2)==2) assert(max3(2,1,0)==2) assert(max3(0,2,1)==2) # EXERCICE 2 #2.1 def aumoinsun(a : int, b :int, c:int) -> bool: if(a >= 0): return True if(b >= 0): return True if(c >= 0): return True return False assert(aumoinsun(-1,-1,-1)==False) assert(aumoinsun(0,-1,-1)==True) assert(aumoinsun(-1,0,-1)==True) assert(aumoinsun(-1,-1,0)==True) #2.2 def tous(a:int, b :int, c:int) -> bool: if(a >= 0 and b >= 0 and c >= 0): return True return False assert(tous(-1,-1,-1) == False) assert(tous(0,-1,-1) == False) assert(tous(-1,0,-1) == False) assert(tous(-1,-1,0) == False) assert(tous(0,0,0) == True) # 2.3 def croissant(a:int, b :int, c:int) -> bool: if(a <= b and b <= c): return True return False assert(croissant(0,1,2) == True) assert(croissant(0,10,20) == True) assert(croissant(10,1,2) == False) assert(croissant(0,10,2) == False) assert(croissant(10,100,2) == False) #2.4 def bissextile(a:int) -> bool: if(a%400 == 0 or (a%100 != 0 and a%4 == 0)): return True return False assert(bissextile(400) == True) assert(bissextile(104) == True) assert(bissextile(2000) == True) assert(bissextile(2023) == False) # ENTRAÎNEMENT 1 def mention(note:float) -> str: assert(note >= 0 and note <= 20) if(note < 10): return "R" if(note < 12): return "A" if(note < 14): return "AB" if(note < 16): return "B" return "TB" assert(mention(0) == "R") assert(mention(10) == "A") assert(mention(12) == "AB") assert(mention(14) == "B") assert(mention(16) == "TB") # EXERCICE 3 import random #3.1 def sommeDe(n:int) -> int: assert(n > 0) somme = 0 for i in range(n): somme += random.randint(1,6) assert(somme >= 6 and somme <= 6*n) return somme res = sommeDe(10) assert(res >=10 and res <= 60) #3.2 def urne() -> int: # 5 boules "1" + 3 boules "2" + 2 boules "3" boules = [1,1,1,1,1,2,2,2,3,3] return random.choice(boules) res = urne() assert(res == 1 or res == 2 or res ==3) # ENTRAÎNEMENT 2 #1 def moyenneDe(n:int)->float: assert(n > 0) return sommeDe(n) / n res = moyenneDe(10) assert(res >= 1 and res <=60) #2 def premier6() -> int: rang = 1 de = random.randint(1, 6) while(de != 6): rang += 1 de = random.randint(1, 6) return rang assert(premier6() > 0) #3 def tempsAttente(n:int) -> float: assert(n > 0) somme = 0 for i in range(n): somme += premier6() return somme assert(tempsAttente(10) > 0)