Participer au site avec un Tip
Rechercher
 

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 :

Manipulation de valeurs booléennes

Les chaînes formatées « à la C » Conversions de données


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

La vidéo

Cette vidéo introduit le type bool et les différents mots clés et opérateurs qui lui sont associés.


Manipulation de valeurs booléennes

Prologue

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

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'>
>>>
les mots clés du langage Python sont quasiment tous orthographiés en minuscules. Il y a trois exceptions : 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")
Utilisation d'une variable booléenne pour contrôler une boucle
peut-être auriez-vous préféré écrire la boucle ainsi 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.
L'IDE PyCharm propose de simplifier le code

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

Les opérateurs booléens

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

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
Comportement de l'opérateur and

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

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
Comportement de l'opérateur or

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

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
Comportement de l'opérateur not

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
>>>

L'opérateur is

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
>>>

Travaux pratiques

L'énoncé

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. ;-)

La correction

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")
Exemple de manipulation de valeurs booléennes

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


Les chaînes formatées « à la C » Conversions de données