Compléments - Logique
Attention
N'étudier ce qui suit qu'après avoir étudié les fonctions en Python
I. Les redondances : mauvaise pratique⚓︎
Strictement négatif
Tester ci dessous :
Les deux fonctions est_strictement_negatif_1
et est_strictement_negatif_2
sont-elles équivalentes ?
Solution
Ces deux fonctions sont équivalentes, et il est de bonne pratique de ne pas utiliser est_strictement_negatif_1
mais est_strictement_negatif_2
.
En effet, nbre < 0
est une expression booléenne évaluée à True
ou False
. La valeur renvoyée est celle de nbre < 0
Multiples de 6
Compléter en une ligne (ligne 12) la fonction est_multiple_de_6_v2
pour qu'elle renvoie True
si ,nbre
est un multiple de 6
et False
sinon.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Résumé
II. Evaluation séquentielle :⚓︎
Tester
Essayer de comprendre ce qu'il se passe :
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Solution
True
or ... est évalué automatiquement àTrue
. Pas la peine d'évaluer ce qui est à droite duor
False
and ... est évalué automatiquement àFalse
. Pas la peine d'évaluer ce qui est à droite duor
- Pour les autres cas, il faut évaluer ce qui est à gauche et ce qui est à droite de l'opérateur booléen.
Vous pouvez ajouter vos propres essais.
Tester
Essayer de comprendre ce qu'il se passe :
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Si à gauche de l'opérateur and
se trouve False
, le membre de droite ne sera pas évalué. La fonction sqrt
ne sera pas appelée si x est négatif (ce qui provoquerait une erreur que l'on observe si on intervertit les deux membres).
III. Conversions implicites utilisées par Python⚓︎
Attention
Ne pas utiliser ce qui suit. Nous le mentionnons pour comprendre certains comportements qui pourraient étonner.
Tester
Essayer de comprendre ce qu'il se passe :
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Solution
True
est converti en 1 et False
en 0
IV. Attention au langage courant⚓︎
Un jeu de dé
Le jeu consiste à lancer un dé. Si on obtient 1 ou 6, on gagne, sinon on perd.
Un élève a écrit le code suivant : le tester, puis le corriger
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Le comportement n'est évidemment pas celui qui est attendu. En effet pour mieux comprendre ce qu'il se passe, on peut ajouter des parenthèses. Les opérateurs de comparaison étant prioritaires sur les opérateurs logiques, nous obtenons :
if (nbre == 1) or (6)
.
(nbre == 1)
est bien évalué àTrue
ouFalse
suivant les cas.- Par contre 6 est un entier différent de zéro, donc
il est évalué en
True
, (0 serait évalué àFalse
).
La ligne 2 est donc équivalente à if (nbre == 1) or True
, ce qui est toujours évalué à True
.
Une solution correcte est donc :
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)