DM NSI

Identification

Infoforall

3 - DM NSI Boucles, tests et fonctions


Vous pouvez le rendre en markdown sur le site ou en version papier.

Attention, le soin est noté et les codes markdown identiques seront sanctionnés à moins de noter clairement que vous avez travaillé avec un autre élève de la classe.

Le but est de consolider les notions de base.

1 - Test

01° Expliquer le plus clairement possible pourquoi la fonction renvoie la valeur affichée. Le mieux est sans doute de fournir le cheminement ligne par ligne.

1 2 3 4 5 6 7 8 9 10
def calcul_sous_condition(n) : resultat = 0 if n < 4 : resultat = resultat + n*2 else : resultat = resultat + n return resultat*10 x = calcul_sous_condition(6) print(x)

02° Même question avec une fonction différente.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
def calcul_sous_condition(n) : resultat = 0 if n < 4 : resultat = resultat + n*2 else : if n < 10 : n = n + 10 else : n = n // 2 resultat = resultat + n return resultat*10 x = calcul_sous_condition(6) print(x)

2 - Boucle bornée FOR

03° La fonction fournie ne fonctionne pas. Elle doit permettre de trouver la somme des entiers jusqu'à n inclus.

somme(10) renvoie 1+2+3+4+5+6+7+8+9+10. Ca doit donner 55.

Modifier la fonction pour qu'elle fonctionne correctement quelque soit la valeur de n.

1 2 3 4 5 6 7 8 9 10 11 12
def somme(n) : '''Fonction FAUSSE qui renvoie la somme des nombres jusqu'à n inclus ::param n(int) :: la borne finale de la somme ::return (int) :: la somme de 1 à n (n=3, renvoie 1+2+3=6) ''' somme = 0 for x in range(2): somme = somme + x return somme x =somme(10) print(x)

04° Créer une fonction qui renvoie la somme de 1 + 22 + 32 + ... n2.

Il faudra compléter le prototype fourni :

1 2 3 4 5 6 7 8 9 10
def somme_carre(n) : '''Fonction qui renvoie la somme des carrés de nombres jusqu'à n inclus ::param n(int) :: la borne finale de la somme ::return (int) :: la somme de 1 à n (n=3, renvoie 1+4+9=14) ''' somme = 0 return somme x =somme_carre(10) print(x)

Avec 3, ca doit donner 14 et avec 10, ça doit donner 385.

Nous allons maintenant associer le for et le if : on vous demande de créer une fonction qui fait la somme des entiers impairs uniquement.

Pour rappel, un nombre est impair si le reste de sa division par deux ne donne pas 0 : x % 2 != 0.

Le principe de l'algorithme est donc le suivant

  • On lance un paramètre n
  • On initialise somme à 0
  • On boucle sur un compteur x allant de 0 à n inclus
    • Si x est impair : on l'additionne à somme.
    • Sinon : on ne fait rien !

05° Modifier la fonction somme_impair.

Il faudra compléter le prototype fourni :

1 2 3 4 5 6 7 8 9 10 11 12
def somme_impair(n) : '''Fonction qui renvoie la somme des nombres impairs jusqu'à n inclus ::param n(int) :: la borne finale de la somme ::return (int) :: la somme de 1 à n (n=3, renvoie 1+3=4) ''' somme = 0 for x in range(n+1) : somme = somme + x return somme x =somme_impair(10) print(x)

Avec 3, ca doit donner 4 et avec 10, ça doit donner 25.

3 - while

06° Expliquer étape par étape comment fonctionne la fonction carre_inf qui renvoie le nombre carré juste inférieur au nombre entier naturel n fourni en paramètre.

Pour 10 à 15, la fonction renvoie 9 (3*3).

Pour 16 à 24, la fonction renvoie renvoie 16 (4*4).

1 2 3 4 5 6 7 8 9 10 11 12 13 14
def carre_inf(n) : '''Fonction qui renvoie le carré juste inférieur ou égal à n ::param n(int) :: le nombre dont on cherche le carré juste inférieur ::return (int) :: la valeur du carré juste inférieur ou égal à n ''' nombre = 0 while (nombre+1)*(nombre+1) <= n : nombre = nombre + 1 return nombre*nombre x = carre_inf(10) print(x) x2 = carre_inf(18) print(x2)

07° Même question mais avec la fonction carre_inf2 qui fait pareil mais avec un code légerement différent.

Pour 10 à 15, la fonction renvoie toujours 9 (3*3).

Pour 16 à 24, la fonction renvoie toujours renvoie 16 (4*4).

1 2 3 4 5 6 7 8 9 10 11 12 13 14
def carre_inf2(n) : '''Fonction qui renvoie le carré juste inférieur ou égal à n ::param n(int) :: le nombre dont on cherche le carré juste inférieur ::return (int) :: la valeur du carré juste inférieur ou égal à n ''' nombre = 0 while nombre*nombre <= n : nombre = nombre + 1 return (nombre-1)*(nombre-1) x = carre_inf2(10) print(x) x2 = carre_inf2(18) print(x2)

Votre petite soeur ou votre petit frère, ou un cousin ou cousine, apprend que vous êtes en informatique au lycée. Malheur ! Il n'arrête pas de vous demander de lui fabriquer un jeu. Pour calmer ses ardeurs, vous décidez de lui concevoir un jeu de multiplication : la fonction tire deux nombres au hasard et demande le résultat de la multiplication tant que le résultat n'est pas bon. La fonction renvoie le nombre de tentatives, un au minimum donc.

08° Compléter la fonction multiplication pour qu'elle fonctionne correctement.

Il faudra juste trouver la bonne condition à mettre sur le while à la place de True.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import random as rd def multiplication(max_a, max_b): '''Fonction qui tire au hasard deux nombres et demande à l'utilisateur le résultat de leur multiplication, tant que le résultat n'est pas bon ! ::param max_a(int) :: la valeur maximale du premier tirage ::param max_b(int) :: la valeur maximale du deuxième tirage ::return (int) : renvoie le nombre essai de tentatives ''' a = rd.randint(1, max_a) b = rd.randint(1, max_b) m = 0 # m contiendra la valeur que l'utilisateur pense être a*b essai = 0 while True : m = input(f"Que vaut {a} x {b} = ? : ") m = int(m) essai = essai + 1 return essai print("Donne le résultat des multiplications suivantes.") nbr = 0 for x in range(10) : nbr = multiplication(10,10) + nbr print(f"{nbr} tentatives pour trouver 10 multiplications !")

Activité publiée le 04 11 2019
Dernière modification : 04 11 2019
Auteur : ows. h.