Chapitre 4
4.1 Valeurs booléennes
6.
b.
Affecter un
int
à un booléen entraîne une conversion de type implicite. Cette conversion de type peut causer des problèmes ultérieurement dans le code si le programmeur suppose que is_dessert est toujours un booléen.
7.
b.
Tout type numérique représentant 0 se convertit en
False
. Les nombres non nuls se convertissent en
True
.
13.
b.
True
converti en chaîne de caractères donne
"True"
. False converti en chaîne de caractères donne
"False"
.
14.
b.
Lorsqu'un booléen est converti en un type numérique,
True
est converti en
1
, et
False
est converti en
0
.
18.
c.
Les types numériques ne peuvent pas être comparés à des chaînes de caractères à l'aide des opérateurs de comparaison : >, <, >=, <=. L'utilisation de == ou != produira un booléen.
19.
b.
Les chaînes de caractères sont comparées en comparant les valeurs Unicode de chaque caractère. Les lettres ont des valeurs Unicode croissantes selon l'ordre alphabétique (et sont sensibles à la casse).
"c"
et
"c"
sont égaux, donc
"i"
est comparé à
"o"
.
"i"
n'est pas égal à
"o"
, donc
False
est produit, bien que cilantro et coriander proviennent de la même plante.
20.
b.
Les lettres ont des valeurs Unicode croissantes selon l'ordre alphabétique (et sont sensibles à la casse).
"d"
est supérieur, et non inférieur, à
"c"
, donc
False
est produit.
4.2 Instructions if-else
4.
c.
-10 < 0 est vrai, donc num reçoit la valeur
25
. Ensuite, 25 < 100, donc num reçoit la valeur 25 + 50, ce qui donne
75
.
5.
b.
La ligne 4 n'est pas indentée, donc
positive_num reçoit toujours la valeur
0
. La valeur d'entrée positive est perdue.
6.
c.
La branche
if
est empruntée lorsque x >= 15, donc la branche
else
est empruntée lorsque x n'est pas supérieur ou égal à
15
.
8.
b.
L'une des branches est toujours empruntée dans une instruction
if-else. Selon la valeur de x', y aura pour valeur finale
30
ou
105
.
4.3 Opérations booléennes
2.
b.
3000 > 3000 est
False
. False and True donne
False
. False and False donne
False
. Ainsi, aucune valeur de hrs_to_close ne permettra à Darcy d'entrer.
4.
b.
(8 < 10) and (21 > 20) s'évalue à True and True, ce qui donne
True
. Le corps du
if
est donc exécuté, et z reçoit la valeur
5
.
7.
a.
(9%2==0 and 10%2 ==1) s'évalue à (False and False), ce qui donne
False
. (9%2 == 1 and 10%2 == 0) s'évalue à (True and True), ce qui donne
True
. False or True donne
True
. L'instruction
if
vérifie si les nombres forment une paire pair-impair ou impair-pair.
4.4 Priorité des opérateurs
4.
b.
La multiplication et la division ont la priorité la plus élevée, sont associatives à gauche et ont une priorité supérieure à l'addition.
4.5 Décisions enchaînées
1.
b.
elif
évaluera condition_2 si condition_1 est
False
et exécutera Body 2 si condition_2 est
True
.
2.
b.
x > 44, soit 42 > 44, est
False
, donc x < 50 est évaluée. 42 < 50 est
True
, donc y = 0 + 5. Une seule des branches
if
et
elif
est empruntée.
4.
a.
Le
elif
doit être enchaîné à une instruction précédente et situé au même niveau d'indentation.
5.
c.
Les instructions
if
et if-elif ne sont pas enchaînées. Le premier
if
s'évalue à
True
et s'exécute. Ensuite, le if-elif est évalué et la branche
elif
s'exécute.
8.
a.
Une seule branche est exécutée dans une instruction de décision enchaînée.
-1 < 0 and -2 < 0 est
True
, donc y = 10.
9.
c.
La première branche s'exécute si
price < 9.99. La deuxième branche s'exécute si price < 19.99 et que la première condition n'est pas remplie : c'est-à-dire price >= 9.99. La troisième branche s'exécute si la première et la deuxième conditions échouent : c'est-à-dire price >= 19.99. L'enchaînement permet de simplifier les structures de décision.
4.6 Décisions imbriquées
2.
c.
num_dancers est positif, donc la branche
else
est empruntée. num_dancers est impair, donc l'erreur est affichée avant que le programme ne poursuive après le
if
imbriqué et n'affiche num_dancers.
3.
b.
256 == 513 est
False
, et 256 < 513 est
True
, donc la branche
elif
est empruntée et Body 2 s'exécute. 513 >= 512 est
True
, donc Body 3 s'exécute.
4.
c.
Le premier
else
n'est pas indenté et est traité comme le
else
du
if
initial. Ainsi, le second
else
n'est rattaché à aucune instruction
if
et produit une erreur.
4.7 Expressions conditionnelles
1.
c.
L'expression conditionnelle affectera à
response la valeur
"even"
si x est pair. response reçoit la valeur
"odd"
si x est impair.
3.
c.
min_num ne peut pas recevoir min_num = y. L'expression correcte est min_num = x if x < y else y"
4.
b.
Les expressions conditionnelles qui s'évaluent en un booléen sont redondantes. Il convient d'utiliser directement l'expression booléenne à la place.
5.
b.
L'expression est évaluée sous la forme
(fee + 10) if hours > 12 else 2. Ainsi, si hours > 12, le résultat sera fee + 10 ; sinon, le résultat sera 2.