Skip to content

Commit 597c981

Browse files
committed
added iterator and operators * and ** to section 03
1 parent 064581c commit 597c981

File tree

1 file changed

+192
-5
lines changed

1 file changed

+192
-5
lines changed

03_strutture_dati.ipynb

Lines changed: 192 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,80 @@
245245
"- **Metodi utili**: `.keys()`, `.values()`, `.items()`, `.get()`."
246246
]
247247
},
248+
{
249+
"cell_type": "markdown",
250+
"metadata": {},
251+
"source": [
252+
"---",
253+
"\n",
254+
"## 5. Iteratori e la parola chiave `for`\n",
255+
"\n",
256+
"In Python, la maggior parte delle strutture dati, come liste, tuple e dizionari, sono **oggetti iterabili**. Un oggetto `iterable` è un contenitore che, quando gli viene richiesto, può produrre un **iteratore**.\n",
257+
"\n",
258+
"- Un **Iterable** è un oggetto che sai *puoi* percorrere (es. una lista).\n",
259+
"- Un **Iteratore** è un oggetto che tiene traccia della tua posizione corrente mentre percorri l'iterable, e sa come passare all'elemento successivo. L'iteratore è il vero e proprio motore del processo di iterazione.\n",
260+
"\n",
261+
"### Come funziona il ciclo `for`?\n",
262+
"Quando scrivi un ciclo `for`, Python fa il lavoro pesante per te. Ad esempio, `for elemento in lista:` esegue questi passaggi:\n",
263+
"\n",
264+
"1. Chiama la funzione `iter()` sulla `lista` per ottenere un **iteratore**.\n",
265+
"2. Ripete la chiamata alla funzione `next()` sull'iteratore per ottenere l'elemento successivo.\n",
266+
"3. Quando non ci sono più elementi, l'iteratore solleva un'eccezione speciale chiamata `StopIteration`.\n",
267+
"4. Il ciclo `for` cattura questa eccezione e termina automaticamente, senza sollevare errori per l'utente.\n",
268+
"\n",
269+
"Questo meccanismo è la base di ogni ciclo `for` in Python e permette di percorrere qualsiasi tipo di collezione di dati in modo uniforme."
270+
]
271+
},
272+
{
273+
"cell_type": "markdown",
274+
"metadata": {},
275+
"source": [
276+
"---",
277+
"\n",
278+
"## 6. Spacchettare le collezioni: gli operatori `*` e `**`\n",
279+
"\n",
280+
"In Python, i caratteri `*` e `**` sono molto utili quando si lavora con le funzioni, specialmente per **spacchettare** (unpacking) il contenuto di collezioni come liste e dizionari, trasformandoli in argomenti singoli.\n",
281+
"\n",
282+
"### `*` (asterisco singolo): Spacchettare liste e tuple\n",
283+
"\n",
284+
"L'asterisco singolo viene usato per spacchettare elementi di un iterabile (come liste e tuple) e passarli a una funzione come **argomenti posizionali separati**.\n",
285+
"\n",
286+
"```python\n",
287+
"def descrivi_prodotto(nome, prezzo, quantita):\n",
288+
" print(f\"Prodotto: {nome}, Prezzo: {prezzo}€, Quantità: {quantita}\")\n",
289+
"\n",
290+
"dati_prodotto = ['Computer', 1200, 5]\n",
291+
"\n",
292+
"# Usando * per spacchettare la lista in argomenti posizionali\n",
293+
"descrivi_prodotto(*dati_prodotto)\n",
294+
"```\n",
295+
"\n",
296+
"In questo caso, `*dati_prodotto` è come chiamare `descrivi_prodotto('Computer', 1200, 5)`.\n",
297+
"\n",
298+
"### `**` (doppio asterisco): Spacchettare dizionari\n",
299+
"\n",
300+
"Il doppio asterisco viene usato per spacchettare un dizionario e passare le sue coppie chiave-valore a una funzione come **argomenti nominali (keyword arguments)**.\n",
301+
"\n",
302+
"```python\n",
303+
"def crea_profilo(nome, cognome, eta):\n",
304+
" print(f\"Creato profilo per {nome} {cognome}, che ha {eta} anni.\")\n",
305+
"\n",
306+
"dettagli = {\"nome\": \"Alice\", \"cognome\": \"Bianchi\", \"eta\": 25}\n",
307+
"\n",
308+
"# Usando ** per spacchettare il dizionario in argomenti nominali\n",
309+
"crea_profilo(**dettagli)\n",
310+
"```\n",
311+
"\n",
312+
"Qui, `**dettagli` è come chiamare `crea_profilo(nome='Alice', cognome='Bianchi', eta=25)`.\n"
313+
]
314+
},
248315
{
249316
"cell_type": "markdown",
250317
"id": "9197d902",
251318
"metadata": {},
252319
"source": [
320+
"---",
321+
"\n",
253322
"## Esercizi\n",
254323
"\n",
255324
"---"
@@ -291,11 +360,58 @@
291360
"Crea un dizionario `studente` con chiavi `nome`, `età` e `corso`. Stampane i valori."
292361
]
293362
},
363+
{
364+
"cell_type": "markdown",
365+
"metadata": {},
366+
"source": [
367+
"### Esercizio 5: Comprendere gli iteratori\n",
368+
"Dato l'elenco di colori `colori = ['rosso', 'verde', 'blu']`, simula il comportamento di un ciclo `for`. Ottieni l'iteratore dalla lista usando la funzione `iter()` e, all'interno di un ciclo `while` con un blocco `try-except`, stampa ogni elemento usando `next()`. Gestisci l'eccezione `StopIteration` per terminare il ciclo correttamente."
369+
]
370+
},
371+
{
372+
"cell_type": "code",
373+
"execution_count": null,
374+
"metadata": {},
375+
"outputs": [],
376+
"source": []
377+
},
378+
{
379+
"cell_type": "markdown",
380+
"metadata": {},
381+
"source": [
382+
"### Esercizio 6: Spacchettare una lista (*)\n",
383+
"Data una funzione `somma_tre_numeri(a, b, c)` che calcola la somma di tre numeri, e una lista `numeri = [10, 20, 30]`, usa l'operatore `*` per spacchettare la lista e passare i suoi elementi alla funzione. Stampa il risultato."
384+
]
385+
},
386+
{
387+
"cell_type": "code",
388+
"execution_count": null,
389+
"metadata": {},
390+
"outputs": [],
391+
"source": []
392+
},
393+
{
394+
"cell_type": "markdown",
395+
"metadata": {},
396+
"source": [
397+
"### Esercizio 7: Spacchettare un dizionario (**)\n",
398+
"Data una funzione `registra_utente(username, password)` e un dizionario `credenziali = {'username': 'admin', 'password': 'pass_sicura'}`, usa l'operatore `**` per spacchettare il dizionario e passare le credenziali alla funzione. La funzione dovrebbe stampare un messaggio di conferma."
399+
]
400+
},
401+
{
402+
"cell_type": "code",
403+
"execution_count": null,
404+
"metadata": {},
405+
"outputs": [],
406+
"source": []
407+
},
294408
{
295409
"cell_type": "markdown",
296410
"id": "8b2811d0",
297411
"metadata": {},
298412
"source": [
413+
"---",
414+
"\n",
299415
"## Soluzioni\n",
300416
"\n",
301417
"---"
@@ -306,7 +422,7 @@
306422
"id": "17781a63",
307423
"metadata": {},
308424
"source": [
309-
"### Esercizio 1: Lista numeri\n"
425+
"### Soluzione Esercizio 1: Lista numeri\n"
310426
]
311427
},
312428
{
@@ -326,7 +442,7 @@
326442
"id": "39825875",
327443
"metadata": {},
328444
"source": [
329-
"### Esercizio 2: Tuple coordinate\n"
445+
"### Soluzione Esercizio 2: Tuple coordinate\n"
330446
]
331447
},
332448
{
@@ -345,7 +461,7 @@
345461
"id": "a7c94f75",
346462
"metadata": {},
347463
"source": [
348-
"### Esercizio 3: Set animali\n"
464+
"### Soluzione Esercizio 3: Set animali\n"
349465
]
350466
},
351467
{
@@ -365,7 +481,7 @@
365481
"id": "9bcee695",
366482
"metadata": {},
367483
"source": [
368-
"### Esercizio 4: Dizionario studente\n"
484+
"### Soluzione Esercizio 4: Dizionario studente\n"
369485
]
370486
},
371487
{
@@ -378,6 +494,77 @@
378494
"studente = {\"nome\": \"Anna\", \"età\": 21, \"corso\": \"Informatica\"}\n",
379495
"print(studente.values())\n"
380496
]
497+
},
498+
{
499+
"cell_type": "markdown",
500+
"metadata": {},
501+
"source": [
502+
"### Soluzione Esercizio 5: Comprendere gli iteratori"
503+
]
504+
},
505+
{
506+
"cell_type": "code",
507+
"execution_count": null,
508+
"metadata": {},
509+
"outputs": [],
510+
"source": [
511+
"colori = ['rosso', 'verde', 'blu']\n",
512+
"\n",
513+
"# Otteniamo l'iteratore dalla lista\n",
514+
"iteratore_colori = iter(colori)\n",
515+
"\n",
516+
"# Simula il ciclo for con un ciclo while e try-except\n",
517+
"while True:\n",
518+
" try:\n",
519+
" colore = next(iteratore_colori)\n",
520+
" print(colore)\n",
521+
" except StopIteration:\n",
522+
" # L'iteratore ha esaurito gli elementi, usciamo dal ciclo\n",
523+
" break"
524+
]
525+
},
526+
{
527+
"cell_type": "markdown",
528+
"metadata": {},
529+
"source": [
530+
"### Soluzione Esercizio 6: Spacchettare una lista (*)"
531+
]
532+
},
533+
{
534+
"cell_type": "code",
535+
"execution_count": null,
536+
"metadata": {},
537+
"outputs": [],
538+
"source": [
539+
"def somma_tre_numeri(a, b, c):\n",
540+
" return a + b + c\n",
541+
"\n",
542+
"numeri = [10, 20, 30]\n",
543+
"\n",
544+
"risultato = somma_tre_numeri(*numeri)\n",
545+
"print(f\"La somma dei numeri è: {risultato}\")"
546+
]
547+
},
548+
{
549+
"cell_type": "markdown",
550+
"metadata": {},
551+
"source": [
552+
"### Soluzione Esercizio 7: Spacchettare un dizionario (**)"
553+
]
554+
},
555+
{
556+
"cell_type": "code",
557+
"execution_count": null,
558+
"metadata": {},
559+
"outputs": [],
560+
"source": [
561+
"def registra_utente(username, password):\n",
562+
" print(f\"Utente {username} registrato con successo con la password {password}!\")\n",
563+
"\n",
564+
"credenziali = {'username': 'admin', 'password': 'pass_sicura'}\n",
565+
"\n",
566+
"registra_utente(**credenziali)"
567+
]
381568
}
382569
],
383570
"metadata": {
@@ -401,4 +588,4 @@
401588
},
402589
"nbformat": 4,
403590
"nbformat_minor": 5
404-
}
591+
}

0 commit comments

Comments
 (0)