Menu
Coddy logo textTech

Opérateurs logiques, partie 4

Fait partie de la section Fundamentals du Journey Python de Coddy. Leçon 19 sur 77.

Lorsqu'on travaille avec des expressions logiques, il est parfois nécessaire de les simplifier ou de les réorganiser. Cela est particulièrement utile lorsque l'on manipule 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 la même chose que (not A) or (not B)

Remarquez que deux choses se produisent lorsque vous distribuez not dans l'expression : chaque opérande est inversé (A devient not A, B devient not B), et l'opérateur s'inverseand devient or. Le not ne fait pas que négativer les valeurs ; il inverse also l'opérateur de liaison between elles.

Par exemple :

# Vérifions si un nombre n'est PAS (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)  # True

Seconde 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 inversée, et l'opérateur bascule — cette fois or devient and. Considérez cela ainsi : distribuer not fait toujours basculer andor tout en inversant chaque partie.

Par exemple :

# Vérifier si une personne n'est PAS (un étudiant ou employé)
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)  # True

Exemple complexe avec à la fois AND et OR : Vous avez parfois besoin de conditions qui combinent les deux opérateurs. Voici un exemple pratique :

# Vérification si on NE PEUT PAS accepter une candidature
# On rejette si : (pas d'expérience AND pas de diplôme) OR ne répond pas à l'exigence 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 AND pas de diplôme)
# Ceci peut également être écrit en utilisant les lois de De Morgan :
# accept = (expérience OR diplôme) AND répond à l'âge ; reject = not accept
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 des expressions logiques complexes
  • Pour convertir entre différentes représentations de la même logique
challenge icon

Défi

Débutant

Vous aidez une dumperie à créer un système pour déterminer si elle peut vendre un animal de compagnie à un client.

Initialisez les variables suivantes :

  • has_license avec la valeur True
  • has_space avec la valeur True
  • has_experience avec la valeur False

É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 qu'il a de l'espace
  • can_sell_exotic_pet : Le client peut acheter un animal exotique s'il a À LA FOIS une licence ET de l'expérience, ET qu'il a de l'espace
  • cannot_sell_any_pet : Magasin NE PEUT VENDRE aucun animal si le client n'a PAS de licence ET PAS d'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)

Essayez vous-même

# Initialiser les variables

# Calculer les conditions
# Remplacer chaque valeur d'espace réservé ci-dessous par l'expression logique correcte
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# 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)
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Python en ligne