Chapitre 4

Chapitre 4

4.1 Valeurs booléennes

1.
c. "True" utilise des guillemets, la valeur est donc une chaîne de caractères.
2.
b. is_vegetable est un entier et peut être utilisé dans des opérations arithmétiques.
3.
a. Une variable à laquelle est affectée la valeur True ou False est une variable booléenne.
4.
a. Une variable booléenne représente la valeur True ou False .
5.
b. True et False sont les deux seules valeurs possibles pour une variable booléenne.
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 .
8.
a. Un nombre négatif est non nul et se convertit en True .
9.
b. La chaîne vide est la seule chaîne de caractères qui se convertit en False .
10.
a. "0" est une chaîne non vide et est convertie en True .
11.
a. L'entrée est lue sous forme de chaîne de caractères, donc bool("False") donne True .
12.
b. True converti en flottant donne 1.0. False converti en flottant donne 0.0.
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 .
15.
b. 14 est supérieur à 13, donc 14 n'est pas inférieur ou égal à 13.
16.
a. 0 est inférieur à 0.4, donc 0 n'est pas égal à 0.4.
17.
b. 4 est égal à 4.0, donc 4 n'est pas inférieur à 4.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

1.
b. age < 12 se trouve entre "if" et « : » et est une expression qui s'évalue à True ou False .
2.
c. Le programme exécute le corps lorsque la condition est vraie.
3.
b. Le corps, à la ligne 3, n'est pas exécuté car la condition est fausse.
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 .
7.
a. 40 > 30, le corps de l'instruction if est donc exécuté. y = 40 - 10 = 30.
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

1.
a. 2500 < 3000 est True , et 2.5 > 1.0 est True , donc Jaden peut entrer.
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.
3.
b. False and True donne False .
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 .
5.
a. (21 < 30) or False s'évalue à True or False, ce qui donne True .
6.
c. La réduction ne s'applique pas pour les âges compris entre 12 et 65 ans inclus.
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.
8.
a. not(13 < 10) s'évalue à not(False), ce qui donne True .
9.
b. not(18 > 15 and 18 < 20) s'évalue à not(True and True), puis not(True), et enfin, False .
10.
a. 65 > 60 est True , donc is_turn reçoit la valeur not(False), ce qui donne True .

4.4 Priorité des opérateurs

1.
b. L'exponentiation a la priorité la plus élevée, puis la division, puis l'addition.
2.
a. La multiplication a la priorité la plus élevée, puis supérieur à, puis not.
3.
b. La division a la priorité la plus élevée, puis l'égalité et inférieur à, puis and .
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.
5.
b. L'exponentiation est associative à droite et a une priorité supérieure à la multiplication.
6.
c. L'expression est valide et se décompose en comparaisons reliées par and .
7.
a. L'opérateur d'égalité, ==, a une priorité plus élevée que le and logique.
8.
a. L'expression est évaluée comme x + (3*y) - 5. 8 + (3*9) - 5 = 30.
9.
b. Les expressions entre parenthèses sont évaluées en premier. (8+3) * (9-5) = 11 * 4 = 44.

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.
3.
a. Si x < 0, Body 1 s'exécute. Sinon si x == 0, Body 2 s'exécute.
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.
6.
b. La troisième branche s'exécute si hour < 8 and hour < 12 est False et hour < 13 est True .
7.
c. Un elif peut être enchaîné à un autre elif pour former une décision enchaînée plus longue.
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

1.
c. leaf_count == 3 est False , donc le corps du else ' externe est exécuté.
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.
2.
a. 100 < 100 est False , donc result reçoit la valeur x - offset = 100 - 10 = 90.
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.