-----------------------------------------------
1. Introduzione agli operatori di appartenenza
-----------------------------------------------
Verificare se un elemento è contenuto in una stringa
Esempio: controllo se un carattere è presente in un testo
Verificare se una parola è contenuta in una lista
Esempio: lista della spesa, controllare presenza elemento
Verificare se un valore NON è contenuto in una lista
Esempio: controllo blacklist (not in)
Membership su tuple
Dimostrare che funziona anche su tuple (immutabili)
Membership su dizionario (solo sulle chiavi!)
Esempio: controllare se una chiave è presente in un inventario
Membership su dizionario usando valori
Usare: value in dict.values()
-----------------------------------------------
2. Confronto di tipo con type()
-----------------------------------------------
Usare type() per verificare se una variabile è di tipo int
Esempio: verificare input numerico
Confronto errato da evitare:
type(x) == float (accettabile ma meno consigliato)
mostrare che type() NON considera le sottoclassi
Esempio: bool è sottoclasse di int → type() è rigido
-----------------------------------------------
3. Confronto di tipo con isinstance()
-----------------------------------------------
Usare isinstance(x, int) come metodo preferibile
isinstance con più tipi contemporaneamente
Esempio: isinstance(x, (int, float)) per numeri in generale
isinstance con oggetti personalizzati
Esempio con classi (base + derivata)
-----------------------------------------------
4. Combina membership e type checking
-----------------------------------------------
Verifica che un elemento sia nella lista E che sia di tipo int
Esempio: lista con input misti, filtrare solo numeri validi
Verifica che una variabile sia stringa e contenga un carattere specifico
Esempio: controllo validità username
-----------------------------------------------
5. Not in + type checking
-----------------------------------------------
Verificare che un elemento NON appartenga a una lista
E che sia del tipo corretto prima di aggiungerlo
Esempio: aggiunta sicura a una rubrica o inventario
-----------------------------------------------
6. Membership in strutture complesse
-----------------------------------------------
Membership in liste di tuple (controllo su elementi complessi)
Membership in liste di dizionari (mostrare perché 'in' è diverso)
Verificare appartenenza di una chiave dentro una lista di dizionari
Esempio: prodotto 'id' presente nei record
-----------------------------------------------
7. Controlli utili nella pratica
-----------------------------------------------
Input utente: verificare che sia una stringa e NON vuota
Validazione di password:
- verificare che sia stringa
- verificare presenza di caratteri speciali con 'in'
Validazione elenco:
Verificare che tutti gli elementi siano numeri (isinstance)
Utilizzare all() per controllo globale
-----------------------------------------------
8. Errori comuni da mostrare
-----------------------------------------------
Usare x in y su un numero → errore concettuale
Esempio: 3 in 5 → non funziona
Controllo tipo errato:
type(x) == "str" (sbagliato, confronta con la stringa)
Confusione tra:
elemento in dizionario → controlla SOLO le chiavi
elemento in dizionario.values() → controlla valori