QCM : Fonctions Python et calculs
[enonce]
Ce QCM porte sur l'utilisation des fonctions Python pour effectuer des calculs : appels, fonctions par morceaux et fonctions contenant des boucles. Choisissez la bonne réponse parmi les quatre propositions.
[/enonce]
[etape]
On définit la fonction Python ci-dessous :
def carre(x) :
return x * x
Que vaut carre(7) ?
[qcm]
[option]$14$[/option]
[option correct="true"]$49$[/option]
[option]$7$[/option]
[option]$2$[/option]
[reponse statut="correct"]Exact !
La fonction renvoie $x \times x$. Pour $x = 7$ : $7 \times 7 = 49$.[/reponse]
[reponse motif="$14$"]Non.
$14 = 2 \times 7$ : vous avez effectué le double, pas le carré. Le carré est $x \times x$, pas $2x$.[/reponse]
[reponse motif="$7$"]Non.
$7$ est la valeur passée en paramètre, pas la valeur renvoyée. La fonction effectue bien une multiplication.[/reponse]
[reponse motif="$2$"]Non.
$2$ n'apparaît nulle part dans la fonction. Remplacer x par $7$ dans l'expression x * x.[/reponse]
[reponse statut="incorrect"]Non.
Remplacer x par $7$ dans l'expression x * x.[/reponse]
[/qcm]
[/etape]
[etape]
On définit la fonction Python ci-dessous :
def f(x) :
if x < 0 :
return -x
else :
return x ** 2
Que vaut f(-3) ?
[qcm]
[option]$-3$[/option]
[option]$9$[/option]
[option correct="true"]$3$[/option]
[option]$-9$[/option]
[reponse statut="correct"]Bonne réponse !
Comme $-3 < 0$, la condition du if est vraie et la fonction renvoie $-x = -(-3) = 3$.[/reponse]
[reponse motif="$-3$"]Non.
La fonction renvoie -x, c'est-à-dire l'opposé de $x$. L'opposé de $-3$ est $+3$, pas $-3$.[/reponse]
[reponse motif="$9$"]Non.
$9 = (-3)^2$ correspond à la formule de la branche else. Or $-3 < 0$, donc c'est la première branche qui s'exécute, pas le else.[/reponse]
[reponse motif="$-9$"]Non.
Ce résultat ne correspond à aucune des deux formules de la fonction. Identifier d'abord quelle branche s'applique pour $x = -3$.[/reponse]
[reponse statut="incorrect"]Non.
Étape 1 : évaluer la condition pour savoir quelle branche s'exécute. Étape 2 : appliquer la formule.[/reponse]
[/qcm]
[/etape]
[etape]
On reprend la même fonction Python :
def f(x) :
if x < 0 :
return -x
else :
return x ** 2
Que vaut f(4) ?
[qcm]
[option]$-4$[/option]
[option]$8$[/option]
[option correct="true"]$16$[/option]
[option]$4$[/option]
[reponse statut="correct"]Bravo !
Comme $4 \geqslant 0$, la condition x < 0 est fausse : c'est la branche else qui s'exécute. La fonction renvoie donc $x^2 = 4^2 = 16$.[/reponse]
[reponse motif="$-4$"]Non.
$-4$ correspondrait à la branche x < 0 qui renvoie -x. Or $4 \geqslant 0$, c'est l'autre branche qui s'applique.[/reponse]
[reponse motif="$8$"]Non.
$8 = 2 \times 4$ : le symbole ** n'est pas une multiplication, c'est la puissance. $x^{**}2$ signifie $x^2$, donc $4^2 = 16$.[/reponse]
[reponse motif="$4$"]Non.
$4$ est la valeur passée en paramètre, pas celle renvoyée. La fonction applique une opération ; ici, elle élève au carré.[/reponse]
[reponse statut="incorrect"]Non.
Pour $x \geqslant 0$, la fonction renvoie x ** 2, c'est-à-dire $x^2$.[/reponse]
[/qcm]
[/etape]
[etape]
On définit la fonction Python ci-dessous :
def somme_carres(n) :
S = 0
for i in range(1, n+1) :
S = S + i**2
return S
Que vaut somme_carres(3) ?
[qcm]
[option]$6$[/option]
[option correct="true"]$14$[/option]
[option]$9$[/option]
[option]$36$[/option]
[reponse statut="correct"]Parfait !
range(1, 4) fait parcourir à i les valeurs $1, 2, 3$. La fonction calcule donc $1^2 + 2^2 + 3^2 = 1 + 4 + 9 = 14$.[/reponse]
[reponse motif="$6$"]Non.
$6 = 1 + 2 + 3$ est la somme des entiers, pas celle des carrés. L'instruction i**2 élève i au carré avant de l'ajouter.[/reponse]
[reponse motif="$9$"]Non.
$9 = 3^2$ est le dernier carré ajouté, pas le total. La variable S cumule tous les carrés depuis $1^2$.[/reponse]
[reponse motif="$36$"]Non.
$36 = (1 + 2 + 3)^2 = 6^2$ correspond au carré de la somme. Ici on calcule la somme des carrés : $1^2 + 2^2 + 3^2 = 14$, ce n'est pas la même chose.[/reponse]
[reponse statut="incorrect"]Non.
Lister les valeurs de i dans range(1, n+1) puis sommer les carrés un à un.[/reponse]
[/qcm]
[/etape]
[etape]
On définit la fonction Python ci-dessous :
def somme(a, b) :
return a + b
Que vaut somme(somme(2, 3), somme(4, 5)) ?
[qcm]
[option]$9$[/option]
[option]$20$[/option]
[option correct="true"]$14$[/option]
[option]$5$[/option]
[reponse statut="correct"]Exactement !
On évalue les appels internes d'abord : somme(2, 3) = 5 et somme(4, 5) = 9. Puis l'appel externe : somme(5, 9) = 14.[/reponse]
[reponse motif="$9$"]Non.
$9$ est le résultat de somme(4, 5), pas le résultat de l'appel externe. Il faut encore additionner avec somme(2, 3) = 5.[/reponse]
[reponse motif="$20$"]Non.
$20 = 2 + 3 + 4 + 5 + 6$ ou similaire : ce total ne correspond pas à l'expression. Seules quatre valeurs apparaissent : $2, 3, 4, 5$, dont la somme est $14$.[/reponse]
[reponse motif="$5$"]Non.
$5$ est le résultat de somme(2, 3), un sous-calcul. L'appel complet additionne ce résultat à somme(4, 5).[/reponse]
[reponse statut="incorrect"]Non.
Évaluer d'abord les appels internes (somme(2, 3) et somme(4, 5)), puis l'appel externe.[/reponse]
[/qcm]
[/etape]
[etape]
On définit la fonction Python ci-dessous :
def compter_pairs(n) :
c = 0
for i in range(1, n+1) :
if i % 2 == 0 :
c = c + 1
return c
Que vaut compter_pairs(10) ?
[qcm]
[option]$10$[/option]
[option correct="true"]$5$[/option]
[option]$4$[/option]
[option]$0$[/option]
[reponse statut="correct"]Tu as raison !
La boucle fait parcourir à i les valeurs $1, 2, 3, \ldots, 10$. Les valeurs paires sont $2, 4, 6, 8, 10$ : il y en a $5$. La fonction renvoie donc $5$.[/reponse]
[reponse motif="$10$"]Non.
$10$ est le nombre total d'entiers parcourus, pas le nombre d'entiers pairs. Le compteur n'est incrémenté que si la condition est vraie.[/reponse]
[reponse motif="$4$"]Non.
Piège : dans range(1, n+1) avec $n=10$, on parcourt $1, 2, \ldots, 10$ (avec $10$). $10$ est pair : il doit être compté.[/reponse]
[reponse motif="$0$"]Non.
La condition i % 2 == 0 est vraie au moins une fois (dès que $i = 2$). Le compteur est donc bien incrémenté.[/reponse]
[reponse statut="incorrect"]Non.
Lister les entiers de $1$ à $10$ et compter les pairs.[/reponse]
[/qcm]
[/etape]