Accès rapide :
La vidéo
Prologue
La classe bool
Les opérateurs booléens
L'opérateur and
L'opérateur or
L'opérateur not
L'opérateur is
Travaux pratiques
L'énoncé
La correction
Cette vidéo introduit le type bool et les différents mots clés et opérateurs qui lui sont associés.
George Boole, né en 1815 et mort en 1864, est un logicien, mathématicien et philosophe britannique. Il est connu pour être le créateur de la logique moderne, fondée sur une structure algébrique et sémantique, que l'on appelle désormais algèbre de Boole. A partir de 1854, il commence à travailler sur une algèbre binaire, n'acceptant que deux valeurs numériques : le 0 et le 1 : vous l'avez compris, les booléens sont nés.
La classe bool
(le type booléen, si vous préférez) est un type de données qui
définit deux états : l'état vrai et l'état faux. Ces deux états sont associés aux mots clés True
(l'état vrai) et False
(l'état faux).
>>> type(True) <class 'bool'> >>> type(False) <class 'bool'> >>>
True
, False
et
None
, qui commencent tous les trois pas une lettre majuscule. Il faut donc bien faire attention ;-)
>>> true Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'true' is not defined >>> True True >>>
L'exemple de code suivant demande la saisie d'un nom de commande à partir du clavier. Tant que ce dernier est différent de la chaîne "exit"
le programme simule l'exécution de cette commande et redemande de nouveau la saisie d'une nouvelle commande.
1 2 3 4 5 6 7 8 9 10 11 |
is_running= True while is_running: command = input("Veuillez saisir une commande : ") if command == "exit": is_running = False else: print("On imagine exécuter la commande", command, ";-)") print("Bye bye") |
while is_running == True:
.
Mais cela est inutile car l'expression is_running == True
calcule la valeur de la variable is_running
.
Si vous persistez, l'IDE PyCharm vous proposera de simplifier le code, comme le montre la capture d'écran suivante.
Et voici un exemple d'exécution de ce programme.
Veuillez saisir une commande : dir On imagine exécuter la commande dir ;-) Veuillez saisir une commande : ping On imagine exécuter la commande ping ;-) Veuillez saisir une commande : exit Bye bye
Il est parfois nécessaire de coder des conditions complexes. Dans ce cas vous pourrez compter sur quatre opérateurs agissant sur des valeurs booléennes :
and
, or
, not
et is
. Regardons-les, un à un, de plus près.
L'opérateur and
permet de tester que les deux expressions (à gauche et à droite de l'opérateur) sont bien toutes les deux vraies.
Si tel est le cas, la valeur True
est considérée, sinon la valeur False
sera calculée.
Le comportement de l'opérateur and
peut être résumé ainsi :
Expression | Résultat |
---|---|
True and True |
True |
True and False |
False |
False and True |
False |
False and False |
False |
Voici quelques exemples d'utilisation : testez-les-vous aussi dans un interpréteur interactif.
>>> a = 5 >>> b = 7 >>> >>> if a < 10 and b < 10: ... print("Les deux variables sont bien inférieures à 10") ... Les deux variables sont bien inférieures à 10 >>> >>> state1 = a < 10 >>> state2 = b < 10 >>> >>> if state1 and state2: ... print("C'est la même chose") ... C'est la même chose >>>
L'opérateur or
est assez similaire à l'opérateur and
: il permet de vérifier si ou moins l'une des deux expressions testé est
vraie. Si tel est le cas, la valeur True
est retournée, sinon la valeur False
sera calculée.
Le comportement de l'opérateur or
peut être résumé ainsi :
Expression | Résultat |
---|---|
True or True |
True |
True or False |
True |
False or True |
True |
False or False |
False |
Voici quelques nouveaux exemples.
>>> a = 5 >>> b = 50 >>> >>> if a < 10 or b < 10: ... print("Au moins une des deux variables est inférieure à 10") ... Au moins une des deux variables est inférieure à 10 >>> >>> state1 = a < 10 >>> state2 = b < 10 >>> >>> if state1 or state2: ... print("C'est la même chose") ... C'est la même chose >>>
L'opérateur not
permet d'inverser une valeur booléenne.
Le comportement de l'opérateur or
peut être résumé ainsi :
Expression | Résultat |
---|---|
not True |
False |
not False |
True |
Et voici quelques nouveaux exemples d'utilisation.
>>> state = True >>> print(state) True >>> state = not state >>> print(state) False >>> a = 75 >>> b = 50 >>> if not (a < 10 or b < 10): ... print("Aucune variable n'est inférieur à 10") ... Aucune variable n'est inférieur à 10 >>>
Enfin, l'opérateur is
permet de tester une valeur booléenne, bien qu'on puisse aussi utiliser les opérateurs de comparaison.
>>> state = True >>> state is True # ou state == True True >>> state is False # ou state == False False >>>
Vous devez écrire un programme qui demande à l'utilisateur de saisir un login et son mot de passe. Si le login vaut "james" et le mot de passe vaut "007", alors l'utilisateur est accepté. Sinon, l'identité est rejetée et on demande de nouveau à l'utilisateur de s'authentifier. Au bout de trois tentatives en échec, le programme doit s'arrêter.
Bon courage et, bien entendu, essayez de faire l'exercice sans regarder directement la correction ci-dessous. ;-)
Voici ma proposition de code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
is_authentification = True try_count = 0 while is_authentification: login = input("Login : ") password = input("Password : ") try_count += 1 if login == "james" and password == "007": # Calcule un booléen is_authentification = False print("Welcome", login) elif try_count == 3: # Calcule un booléen is_authentification = False print("Vous êtes un hacker. Bye bye") else: print("Bad identity. Please retry") if try_count == 3: # Calcule aussi un booléen exit() print("Suite de l'application") print("Bye bye") |
Voici un exemple d'utilisation.
Login : jason Password : treadstone Bad identity. Please retry Login : james Password : 007 Welcome james Suite de l'application Bye bye
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :