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)
(Alt+: ; 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)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Trueor ... est évalué automatiquement àTrue. Pas la peine d'évaluer ce qui est à droite duorFalseand ... 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)
(Alt+: ; 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)
(Alt+: ; 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)
(Alt+: ; 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é àTrueouFalsesuivant 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)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)