Opérateurs logiques, partie 4
Fait partie de la section Fundamentals du Journey Python de Coddy — leçon 19 sur 77.
Lorsque l'on travaille avec des expressions logiques, nous avons parfois besoin de les simplifier ou de les réorganiser. C'est particulièrement utile lorsque l'on traite des conditions complexes qui combinent plusieurs opérateurs and et or.
Les lois de De Morgan fournissent des règles pour transformer les expressions logiques. Ces transformations aident à rendre le code plus lisible et plus facile à comprendre.
Première loi : not (A and B) est identique à (not A) or (not B)
Remarquez que deux choses se produisent lorsque vous distribuez not dans l'expression : chaque opérande est nié (A devient not A, B devient not B), et l'opérateur s'inverse — and devient or. Le not ne se contente pas de nier les valeurs ; il change également l'opérateur de liaison entre elles.
Par exemple :
# Vérifions si un nombre n'est PAS (compris entre 1 et 10)
number = 15
# Ces deux expressions sont équivalentes :
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1) # True
print(result2) # TrueDeuxième loi : not (A or B) est identique à (not A) and (not B)
La même règle en deux étapes s'applique ici : chaque opérande est nié, et l'opérateur s'inverse — cette fois or devient and. Considérez cela comme : distribuer not inverse toujours and ↔ or tout en niant chaque partie.
Par exemple :
# Vérifier si une personne n'est PAS (étudiante ou employée)
is_student = False
is_employed = False
# Ces deux expressions sont équivalentes :
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1) # True
print(result2) # TrueExemple complexe avec AND et OR : Parfois, vous avez besoin de conditions qui combinent les deux opérateurs. Voici un exemple pratique :
# Vérifier si nous NE POUVONS PAS accepter une candidature
# Nous rejetons si : (pas d'expérience ET pas de diplôme) OU ne remplit pas les conditions d'âge
has_experience = False
has_degree = False
meets_age = True
# Condition complexe utilisant à la fois AND et OR
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application) # True (rejeté car pas d'expérience ET pas de diplôme)# Cela peut également être écrit en utilisant les lois de De Morgan :
# acceptation = (expérience OU diplôme) ET âge requis ; rejet = non acceptation
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2) # True (même résultat, logique différente)Quand utiliser les lois de De Morgan :
- Pour rendre les conditions négatives plus faciles à lire
- Pour simplifier les expressions logiques complexes
- Pour convertir entre différentes représentations de la même logique
Défi
DébutantVous aidez une animalerie à créer un système pour déterminer si elle peut vendre un animal à un client.
Initialisez les variables suivantes :
has_licenseavec la valeurTruehas_spaceavec la valeurTruehas_experienceavec la valeurFalse
Écrivez des expressions logiques pour déterminer si :
can_sell_regular_pet: Le client peut acheter un animal ordinaire s'il a SOIT une licence SOIT de l'expérience, ET il doit avoir de l'espacecan_sell_exotic_pet: Le client peut acheter un animal exotique s'il a à la fois une licence ET de l'expérience, ET il doit avoir de l'espacecannot_sell_any_pet: La boutique NE PEUT vendre aucun animal si le client n'a NI licence NI expérience, OU s'il n'a PAS d'espace
Résultats attendus avec les valeurs données :
can_sell_regular_pet:True(a une licence et de l'espace)can_sell_exotic_pet:False(pas d'expérience)cannot_sell_any_pet:False(a à la fois une licence et de l'espace)
Aide-mémoire
Lois de De Morgan — règles pour transformer des expressions logiques :
not (A and B)→(not A) or (not B)not (A or B)→(not A) and (not B)
Lors de la distribution de not : chaque opérande est inversé et l'opérateur bascule (and ↔ or).
# Exemple de la première loi
result = not (number >= 1 and number <= 10)
result = (not number >= 1) or (not number <= 10) # équivalent
# Exemple de la deuxième loi
result = not (is_student or is_employed)
result = (not is_student) and (not is_employed) # équivalentEssayez vous-même
# Initialiser les variables
# Calculer les conditions
can_sell_regular_pet =
can_sell_exotic_pet =
cannot_sell_any_pet =
# Ne pas supprimer les lignes ci-dessous
print("Can sell regular pet:", can_sell_regular_pet)
print("Can sell exotic pet:", can_sell_exotic_pet)
print("Cannot sell any pet:", cannot_sell_any_pet)Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fundamentals
4Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 3Opérateurs logiques, partie 47Calculateur de partage d'addition
Message de bienvenueSaisie des données10FizzBuzz avec une variante
Présentation du jeuLa fonction FizzBuzz2Variables
NombresChaînes de caractèresBooléensConventions de nommageVariables videsRécapitulatif - Initialiser des variables8Boucles
Boucle ForBoucle WhileBreakContinueRécapitulatif - FactorielleLa fonction RangeBoucles imbriquéesRécapitulatif - Saisie dynamique3Les opérateurs, partie 1
Opérateurs arithmétiquesOpérateur moduloRaccourcis arithmétiquesRécapitulatif - Calculs simplesOpérateurs de comparaison6E/S de base
SortieSortie avec des variablesEntréeCastRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux9Fonctions
Déclarer une fonctionArgumentsRetourner une valeurRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validationValeurs par défaut