Menu
CoddyTech

Opérateurs logiques, partie 4

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

Lorsque nous travaillons avec des expressions logiques, nous devons parfois les simplifier ou les réorganiser. Cela est particulièrement utile lorsque nous traitons des conditions complexes qui combinent plusieurs opérateurs and et or.

Lois de De Morgan fournissent des règles pour transformer des expressions logiques. Ces transformations permettent de rendre le code plus lisible et plus facile à comprendre.

Première loi : not (A and B) est équivalent à (not A) or (not B)

Remarque deux choses qui se produisent lorsque tu distribues 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. not ne fait pas que nier les valeurs ; il change aussi l’opérateur qui les relie.

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)  # True

Deuxième loi : not (A or B) équivaut à (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. Pense à cela ainsi : distribuer not inverse toujours and ↔ or tout en niant chaque partie.

Par exemple :

# Vérifier qu’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)  # True

Exemple complexe avec AND et OR : Parfois, tu as besoin de conditions qui combinent les deux opérateurs. Voici un exemple pratique :

# Vérification de l’impossibilité d’accepter une candidature à un emploi
# Nous rejetons si : (aucune expérience AND aucun diplôme) OR la condition d’âge n’est pas remplie
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ée car aucune expérience AND aucun diplôme)
# Cela peut aussi s'écrire en utilisant les lois de De Morgan :
# accept = (experience OR degree) AND meets age; 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 faciliter la lecture des conditions négatives
  • Pour simplifier les expressions logiques complexes
  • Pour convertir différentes représentations d’une même logique
challenge icon

Défi

Débutant

Tu aides une animalerie à créer un système pour déterminer si elle peut vendre un animal à un client.

Initialise les variables suivantes :

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

Écris des expressions logiques pour déterminer si :

  • can_sell_regular_pet : le client peut acheter un animal de compagnie ordinaire s'il possède SOIT une licence SOIT de l'expérience, ET il doit avoir de la place
  • can_sell_exotic_pet : le client peut acheter un animal exotique s'il possède À LA FOIS une licence ET de l'expérience, ET il doit avoir de la place
  • cannot_sell_any_pet : l'animalerie NE PEUT vendre aucun animal si le client n'a AUCUNE licence ET AUCUNE expérience, OU s'il n'a PAS de place

Résultats attendus avec les valeurs données :

  • can_sell_regular_pet : True (possède une licence et a de la place)
  • can_sell_exotic_pet : False (n'a pas d'expérience)
  • cannot_sell_any_pet : False (possède à la fois une licence et de la place)

Essayez vous-même

# Initialisez les variables

# Évaluez les conditions
# Remplacez chaque valeur provisoire ci-dessous par l’expression logique correcte
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# Ne supprimez pas 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 Fondamentaux

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