Menu
Coddy logo textTech

Operatori logici Parte 4

Fa parte della sezione Fondamenti del percorso Python di Coddy. Lezione 19 di 77.

Quando lavoriamo con espressioni logiche, a volte dobbiamo semplificarle o riorganizzarle. Questo è particolarmente utile quando abbiamo a che fare con condizioni complesse che combinano più operatori and e or.

Leggi di De Morgan forniscono regole per trasformare le espressioni logiche. Queste trasformazioni aiutano a rendere il codice più leggibile e facile da comprendere.

Prima legge: not (A and B) equivale a (not A) or (not B)

Nota che quando distribuisci not nell’espressione succedono due cose: ogni operando viene negato (A diventa not A, B diventa not B), e l’operatore si inverte: and diventa or. not non si limita a negare i valori; cambia anche l’operatore che li collega.

Per esempio:

# Verifichiamo se un numero NON è (tra 1 e 10)
number = 15
# Queste due espressioni sono equivalenti:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1)  # True
print(result2)  # True

Seconda legge: not (A or B) equivale a (not A) and (not B)

Qui si applica la stessa regola in due passaggi: ogni operando viene negato e l'operatore si inverte. Questa volta or diventa and. Pensala così: distribuire not inverte sempre and ↔ or mentre nega ciascuna parte.

Per esempio:

# Verifica se una persona NON è (studente o occupata)
is_student = False
is_employed = False
# Queste due espressioni sono equivalenti:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1)  # True
print(result2)  # True

Esempio complesso con AND e OR: A volte hai bisogno di condizioni che combinano entrambi gli operatori. Ecco un esempio pratico:

# Verifichiamo se NON possiamo accettare una candidatura di lavoro
# Rifiutiamo se: (nessuna esperienza E nessun titolo di studio) O non soddisfa il requisito di età
has_experience = False
has_degree = False
meets_age = True
# Condizione complessa che usa sia E sia O
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application)  # True (rifiutata perché senza esperienza E senza titolo di studio)
# Questo può essere scritto anche usando le leggi di De Morgan:
# accept = (experience OR degree) AND soddisfa il requisito di età; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2)  # True (stesso risultato, logica diversa)

Quando usare le leggi di De Morgan:

  • Per rendere più leggibili le condizioni negative
  • Per semplificare le espressioni logiche complesse
  • Per convertire tra diverse rappresentazioni della stessa logica
challenge icon

Sfida

Principiante

Stai aiutando un negozio di animali a creare un sistema per determinare se può vendere un animale domestico a un cliente.

Inizializza le seguenti variabili:

  • has_license con il valore True
  • has_space con il valore True
  • has_experience con il valore False

Scrivi espressioni logiche per determinare se:

  • can_sell_regular_pet: Il cliente può acquistare un animale domestico comune se ha una licenza OPPURE esperienza, E deve avere spazio
  • can_sell_exotic_pet: Il cliente può acquistare un animale domestico esotico se ha SIA una licenza SIA esperienza, E deve avere spazio
  • cannot_sell_any_pet: Il negozio NON PUÒ vendere alcun animale domestico se il cliente NON ha una licenza E NON ha esperienza, OPPURE non ha spazio

Risultati attesi con i valori forniti:

  • can_sell_regular_pet: True (ha una licenza e spazio)
  • can_sell_exotic_pet: False (non ha esperienza)
  • cannot_sell_any_pet: False (ha sia una licenza sia spazio)

Provalo tu

# Inizializza le variabili

# Calcola le condizioni
# Sostituisci ciascun valore segnaposto qui sotto con l'espressione logica corretta
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# Non eliminare le righe qui sotto
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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Python online