QCM☘
QCM 1☘
Antoine doit écrire une fonction qui prend en paramètre un entier n et renvoie True si cet entier est pair, et False si cet entier est impair.
Il écrit le code suivant:
def f(n):
if n%2 == 0:
return True
else:
return False
Que peut-on reprocher à ce code:
- la fonction est mal nommée.
- il manque le docstring.
- le corps est mal écrit.
Réponse
- la fonction est mal nommée.
- il manque le docstring.
-
le corps est mal écrit.
-
La fonction est mal nommée. Nommer toujours explicitement une fonction par un nom rappelant son rôle. On pourra appeler cette fonction
estPair
par exemple. - Il manque effectivement le docstring, indispensable.
- Le code de cette fonction sera plus lisible sans instruction inutile:
def estPair(n):
"""
n -- entier
renvoie True si n est pair, False si n est impair.
>>> estPair(0)
True
>>> estPair(1)
False
>>> estPair(100)
True
>>> estPair(2013)
False
"""
return n%2 == 0
QCM 2☘
On considère la fonction suivante, le paramètre n désignant un entier strictement positif.
def f(n):
p = 1
for k in range(1,n+1):
p = p*k
return p
Que renvoie l'interpréteur python:
>>> f(4)
- 6
- 24
- 1
- une erreur
Réponse
- 6
- 24
- 1
- une erreur
Complétons le docstring de f et ajoutons une assertion pour contrôler la précondition sur n:
def f(n):
"""
n -- entier naturel non nul
renvoie le produit des entiers de 1 à n: 1*2*3*...*n.
>>> f(0)
Attention, le paramètre doit être un entier >0.
>>> f(1)
1
>>> f(2)
2
>>> f(3)
6
>>> f(9)
362880
"""
assert isinstance(n, int) and n > 0, "Attention, le paramètre doit être un entier >0."
p = 1
for k in range(1,n+1):
p = p*k
return p
QCM 3☘
On considère la fonction suivante:
def g(n):
s = 0
for i in range(0, n, 2):
s = s+i
return s
Avec:
>>> g(10)
on obtient:
- 30
- 20
- 45
- 55
Réponse
- 30
- 20
- 45
- 55
def g(n):
"""
n -- entier naturel
renvoie la somme des entiers naturels pairs
strictement inférieurs à n.
>>> g(0)
0
>>> g(1)
0
>>> g(2)
0
>>> g(3)
2
>>> g(4)
2
>>> g(5)
6
"""
s = 0
for i in range(0, n, 2):
s = s+i
return s
QCM 4☘
On considère le code python:
def division(a,b):
"""
a -- entier naturel
b -- entier naturel non nul
renvoie le couple (quotient, reste) de la division entière de a par b.
"""
q = 0
r = a
while r >= b:
r = r-b
q = q+1
return q, r
On veut tester cette fonction.
Quel jeu de tests est le plus approprié:
- division(2,9), division(11,2), division(91,9), division(10,4)
- division(9,2), division(1,1), division(91,91), division(10,4)
- division(0,7), division(2,8), division(9,9), division(10,4)
Réponse
- division(2,9), division(11,2), division(91,9), division(10,4)
- division(9,2), division(1,1), division(91,91), division(10,4)
- division(0,7), division(2,8), division(9,9), division(10,4)
En présence d'une boucle while, on essaie de tester:
- au moins un cas où l'on n'entre pas dans la boucle (division(0,7), division(2,8)),
- au moins un cas d'égalité pour la comparaison du while (division(9,9)),
- au moins un cas "générique" (on entre dans la boucle avec r > b, ici division(10,4)).
Pour être complet ici, on pourrait ajouter des assertions pour contrôler le respect des préconditions sur a et b:
def division(a,b):
"""
a -- entier naturel
b -- entier naturel non nul
renvoie le couple (quotient, reste) de la division entière de a par b.
>>> division(0,7)
(0, 0)
>>> division(2,7)
(0, 2)
>>> division(9,9)
(1, 0)
>>> division(10,4)
(2, 2)
"""
assert isinstance(a, int) and a >= 0, "Attention a doit être un entier positif ou nul."
assert isinstance(b, int) and b > 0, "Attention b doit être un entier strictement positif."
q = 0
r = a
while r >= b:
r = r-b
q = q+1
return q, r
QCM 5☘
Avec le code suivant:
def g(x):
a = a + x
return a
a = 5
print(g(2))
on obtient:
- une erreur
- l'affichage de la valeur 7
Réponse
- une erreur
- l'affichage de la valeur 7
La présence d'une affectation a = a+x
fait de a
une variable locale. De ce fait, on essaie
d'augmenter de 2 la valeur de a
alors que a
n'a pas de valeur affectée.
On obtient donc l'erreur local variable 'a' referenced before assignment
.
QCM 6☘
Avec le code suivant:
def g(x):
y = a + x
return y
a = 5
print(g(2))
on obtient:
- une erreur
- l'affichage de la valeur 7
Réponse
- une erreur
- l'affichage de la valeur 7
Cette fois, il n'y a pas d'affectation sur a
, a
désigne donc la variable globale
et avec y = a + x
, y reçoit la valeur 7.