|
8 | 8 | "# ⌨️ Sintassi base di Python\n", |
9 | 9 | "\n", |
10 | 10 | "---\n", |
11 | | - "Dopo aver configurato il tuo ambiente e aver scritto il tuo primo programma, è il momento di esplorare la grammatica di base del linguaggio. In questa lezione, vedremo la sintassi fondamentale di Python: come si scrivono i commenti, l'importanza dell'indentazione, le variabili, i tipi di dati più comuni, le strutture di controllo del flusso e i cicli. Questi sono i concetti essenziali che userai in ogni programma." |
| 11 | + "Dopo aver configurato l'ambiente di lavoro e aver scritto il primo programma, è il momento di esplorare la grammatica di base del linguaggio. In questa lezione, vedremo la sintassi fondamentale di Python: come si scrivono i commenti, l'importanza dell'indentazione, le variabili, i tipi di dati più comuni, le strutture di controllo del flusso e i cicli. Questi sono i concetti essenziali che si useranno in ogni programma." |
12 | 12 | ] |
13 | 13 | }, |
14 | 14 | { |
15 | 15 | "cell_type": "markdown", |
16 | 16 | "id": "d00ff8aa", |
17 | 17 | "metadata": {}, |
18 | 18 | "source": [ |
19 | | - "## 1. Commenti\n", |
| 19 | + "## Commenti\n", |
20 | 20 | "I commenti sono righe di testo nel codice che vengono ignorate dall'interprete Python. Servono per spiegare cosa fa una determinata parte del codice, renderlo più leggibile e documentarlo. Sono uno strumento essenziale per una buona programmazione.\n", |
21 | 21 | "\n", |
22 | 22 | "### Commento su singola riga\n", |
|
61 | 61 | "metadata": {}, |
62 | 62 | "source": [ |
63 | 63 | "---\n", |
64 | | - "## 2. Indentazione: Perché è così importante? 🤔\n", |
| 64 | + "## Indentazione: Perché è così importante? 🤔\n", |
65 | 65 | "\n", |
66 | 66 | "L'**indentazione** è uno dei concetti più importanti e unici della sintassi di Python. A differenza di molti altri linguaggi (come Java o C++) che usano parentesi graffe `{}` per definire blocchi di codice, Python usa lo spazio bianco. Ogni blocco di codice, come quello all'interno di un'istruzione `if` o di un ciclo `for`, deve essere indentato con la stessa quantità di spazi.\n", |
67 | 67 | "\n", |
68 | 68 | "### Perché Python usa l'indentazione?\n", |
69 | | - "A prima vista può sembrare una scelta strana, ma ci sono ottime ragioni dietro. I creatori di Python hanno voluto **forzare gli sviluppatori a scrivere codice più pulito e leggibile**. In altri linguaggi, l'indentazione è una convenzione di stile (puoi scrivere tutto su una riga se vuoi), ma in Python è una regola sintattica. Questo ha due vantaggi principali:\n", |
| 69 | + "I creatori di Python hanno voluto **forzare gli sviluppatori a scrivere codice più pulito e leggibile**. In altri linguaggi, l'indentazione è una convenzione di stile (si può scrivere tutto su una riga se vuoi), ma in Python è una regola sintattica. Questo ha due vantaggi principali:\n", |
70 | 70 | "\n", |
71 | 71 | "1. **Maggiore leggibilità:** Il codice indentato è più facile da leggere e da seguire visivamente. Quando tutti i programmatori seguono la stessa regola, la manutenzione del codice diventa molto più semplice, specialmente in team di sviluppo.\n", |
72 | 72 | "2. **Meno errori:** Non c'è ambiguità. Un blocco di codice inizia con un'indentazione maggiore e finisce quando l'indentazione torna al livello precedente. Non ci sono parentesi graffe da dimenticare, il che elimina una fonte comune di bug.\n", |
73 | 73 | "\n", |
74 | | - "La convenzione (consigliata dallo standard PEP 8) è usare **4 spazi** per ogni livello di indentazione. Non mescolare spazi e tabulazioni per evitare errori, i moderni editor di testo lo gestiscono in automatico." |
| 74 | + "La convenzione (consigliata dallo standard PEP 8) è usare **4 spazi** per ogni livello di indentazione. Non bisogna mescolare spazi e tabulazioni per evitare errori, i moderni editor di testo lo gestiscono in automatico." |
75 | 75 | ] |
76 | 76 | }, |
77 | 77 | { |
|
114 | 114 | "metadata": {}, |
115 | 115 | "source": [ |
116 | 116 | "---\n", |
117 | | - "## 3. Variabili e assegnazioni\n", |
| 117 | + "## Variabili e assegnazioni\n", |
118 | 118 | "\n", |
119 | | - "Una **variabile** è un contenitore a cui assegni un valore. In Python, non è necessario dichiarare il tipo di una variabile in anticipo; l’interprete lo deduce automaticamente dal valore che le assegni. Questo approccio si chiama **tipizzazione dinamica** ed è stato scelto per rendere il linguaggio più **semplice e veloce da scrivere**, soprattutto per chi inizia o per chi sviluppa prototipi. Non dover specificare il tipo riduce la quantità di codice “boilerplate” e permette di concentrarsi sulla logica.\n", |
| 119 | + "Una **variabile** è un contenitore a si assegna un valore. In Python, non è necessario dichiarare il tipo di una variabile in anticipo; l’interprete lo deduce automaticamente dal valore che le viene assegnato. Questo approccio si chiama **tipizzazione dinamica** ed è stato scelto per rendere il linguaggio più **semplice e veloce da scrivere**, soprattutto per chi inizia o per chi sviluppa prototipi. Non dover specificare il tipo riduce la quantità di codice “boilerplate” e permette di concentrarsi sulla logica.\n", |
120 | 120 | "\n", |
121 | 121 | "I nomi delle variabili devono iniziare con una lettera o un underscore (`_`) e possono contenere lettere, numeri e underscore. Inoltre, sono **case-sensitive**: ad esempio `variabile`, `Variabile` e `VARIABILE` sono considerati tre identificatori distinti.\n", |
122 | 122 | "\n", |
|
151 | 151 | "metadata": {}, |
152 | 152 | "source": [ |
153 | 153 | "---\n", |
154 | | - "## 4. Tipi di dati\n", |
| 154 | + "## Tipi di dati\n", |
155 | 155 | "\n", |
156 | | - "Ogni informazione che manipoliamo in Python ha un tipo. I tipi di dati più comuni sono:\n", |
| 156 | + "Ogni informazione che viene manipolata in Python ha un tipo. I tipi di dati più comuni sono:\n", |
157 | 157 | "\n", |
158 | 158 | "| Tipo | Descrizione | Esempio |\n", |
159 | 159 | "|-----------|--------------------------------------------|-----------------------|\n", |
|
166 | 166 | "| `dict` | Collezione non ordinata di coppie chiave-valore | `{'nome': 'Anna', 'età': 30}` |\n", |
167 | 167 | "| `set` | Collezione non ordinata di elementi unici | `{1, 2, 3}` |\n", |
168 | 168 | "\n", |
169 | | - "Per conoscere il tipo di un dato o di una variabile, puoi usare la funzione `type()`." |
| 169 | + "Per conoscere il tipo di un dato o di una variabile, si può usare la funzione `type()`." |
170 | 170 | ] |
171 | 171 | }, |
172 | 172 | { |
|
203 | 203 | "### Tipi di dato complessi\n", |
204 | 204 | "\n", |
205 | 205 | "- **List (`list`)**: Una lista è una collezione di elementi **ordinata** e **modificabile**. È la struttura dati più versatile per memorizzare insiemi di dati che possono cambiare.\n", |
206 | | - "- **Tuple (`tuple`)**: Simile a una lista, ma una tupla è **immutabile**, il che significa che non puoi aggiungere, rimuovere o modificare i suoi elementi dopo la creazione. Questo la rende più efficiente in alcuni casi e ideale per dati che non devono cambiare.\n", |
| 206 | + "- **Tuple (`tuple`)**: Simile a una lista, ma una tupla è **immutabile**, il che significa che non si possono aggiungere, rimuovere o modificare i suoi elementi dopo la creazione. Questo la rende più efficiente in alcuni casi e ideale per dati che non devono cambiare.\n", |
207 | 207 | "- **Dictionary (`dict`)**: Un dizionario è una collezione di dati non ordinata che memorizza le informazioni come coppie di **chiave-valore**. È perfetta per associare un valore a una chiave specifica, come un nome a un'età o un codice a un prodotto.\n", |
208 | 208 | "- **Set (`set`)**: Un set è una collezione di elementi non ordinata e **senza duplicati**. Viene usata per testare rapidamente l'appartenenza di un elemento o per eliminare i duplicati da una collezione." |
209 | 209 | ] |
|
242 | 242 | "source": [ |
243 | 243 | "---\n", |
244 | 244 | "### Conversione di tipo (casting)\n", |
245 | | - "Puoi convertire un tipo in un altro usando funzioni come `int()`, `float()`, `str()`, `bool()`. Questo è spesso necessario, ad esempio, per convertire l'input di un utente da stringa a numero." |
| 245 | + "E' possibile convertire un tipo in un altro usando funzioni come `int()`, `float()`, `str()`, `bool()`. Questo è spesso necessario, ad esempio, per convertire l'input di un utente da stringa a numero." |
246 | 246 | ] |
247 | 247 | }, |
248 | 248 | { |
|
269 | 269 | "metadata": {}, |
270 | 270 | "source": [ |
271 | 271 | "---\n", |
272 | | - "## 5. Operatori aritmetici\n", |
| 272 | + "## Operatori aritmetici\n", |
273 | 273 | "\n", |
274 | 274 | "Python supporta le classiche operazioni matematiche sui numeri.\n", |
275 | 275 | "\n", |
|
303 | 303 | "metadata": {}, |
304 | 304 | "source": [ |
305 | 305 | "---\n", |
306 | | - "## 6. Operatori di confronto e logici\n", |
| 306 | + "## Operatori di confronto e logici\n", |
307 | 307 | "\n", |
308 | 308 | "Gli operatori di confronto e logici sono usati per prendere decisioni nel codice. Le loro espressioni restituiscono sempre un valore booleano (`True` o `False`).\n", |
309 | 309 | "\n", |
|
365 | 365 | "metadata": {}, |
366 | 366 | "source": [ |
367 | 367 | "---\n", |
368 | | - "## 7. Controllo del flusso: `if`, `elif`, `else`\n", |
| 368 | + "## Controllo del flusso: `if`, `elif`, `else`\n", |
369 | 369 | "\n", |
370 | | - "Il **controllo del flusso** ti permette di eseguire blocchi di codice in base a una condizione. Si usano le parole chiave `if`, `elif` (else if), e `else`.\n", |
| 370 | + "Il **controllo del flusso** permette di eseguire blocchi di codice in base a una condizione. Si usano le parole chiave `if`, `elif` (else if), e `else`.\n", |
371 | 371 | "\n", |
372 | 372 | "Sintassi di base:\n", |
373 | 373 | "```python\n", |
|
377 | 377 | " # code block se condition1 is False but condition2 is True\n", |
378 | 378 | "else:\n", |
379 | 379 | " # code block if none of the previous conditions are true\n", |
380 | | - "```\n", |
381 | | - "Remember that indentation is essential to define code blocks!!" |
| 380 | + "```\n" |
382 | 381 | ] |
383 | 382 | }, |
384 | 383 | { |
|
403 | 402 | "metadata": {}, |
404 | 403 | "source": [ |
405 | 404 | "---\n", |
406 | | - "## 8. Cicli: `for` e `while`\n", |
| 405 | + "## Cicli: `for` e `while`\n", |
407 | 406 | "\n", |
408 | 407 | "I cicli servono a ripetere un blocco di codice più volte.\n", |
409 | 408 | "\n", |
|
451 | 450 | "metadata": {}, |
452 | 451 | "source": [ |
453 | 452 | "---\n", |
454 | | - "## 9. Funzioni base: definizione e chiamata\n", |
| 453 | + "## Funzioni base: definizione e chiamata\n", |
455 | 454 | "\n", |
456 | 455 | "Una **funzione** è un blocco di codice riutilizzabile che esegue un compito specifico. Le funzioni rendono il codice organizzato, modulare e più facile da gestire. Si definiscono con la parola chiave `def`.\n", |
457 | 456 | "\n", |
|
461 | 460 | " # The code inside here runs only when the function is called\n", |
462 | 461 | " print(f\"Hello, {user_name}!\")\n", |
463 | 462 | "```\n", |
464 | | - "Dopo la definizione, la funzione non esegue il codice. Devi **chiamarla** per attivarla." |
| 463 | + "Dopo la definizione, la funzione non esegue il codice, occorre **chiamarla** per attivarla." |
465 | 464 | ] |
466 | 465 | }, |
467 | 466 | { |
|
483 | 482 | "metadata": {}, |
484 | 483 | "source": [ |
485 | 484 | "---\n", |
486 | | - "## 10. Funzioni di input e output\n", |
| 485 | + "## Funzioni di input e output\n", |
487 | 486 | "\n", |
488 | 487 | "### Funzione `print()`\n", |
489 | 488 | "La funzione `print()` serve per visualizzare l'output a schermo. È estremamente versatile e supporta la formattazione avanzata con le **f-string** (`f-string`), un modo potente per incorporare variabili all'interno di una stringa in modo leggibile e conciso.\n", |
|
519 | 518 | "## Esercizi\n", |
520 | 519 | "\n", |
521 | 520 | "### Esercizio 1: Variabili e tipi\n", |
522 | | - "- Crea una variabile `user_name` e assegnale il tuo nome come stringa.\n", |
523 | | - "- Crea una variabile `age` con la tua età come intero.\n", |
524 | | - "- Stampa una frase del tipo: \"Hello, my name is <user_name> and I am <age> years old.\"\n", |
| 521 | + "- Creare una variabile `user_name` e assegnarle il proprio nome come stringa.\n", |
| 522 | + "- Creare una variabile `age` con la propria età come intero.\n", |
| 523 | + "- Stampare una frase del tipo: \"Hello, my name is <user_name> and I am <age> years old.\"\n", |
525 | 524 | "\n", |
526 | 525 | "### Esercizio 2: Operatori e confronto\n", |
527 | | - "- Scrivi un programma che chiede due numeri all’utente.\n", |
528 | | - "- Stampa se il primo numero è maggiore, minore o uguale al secondo.\n", |
| 526 | + "- Scrivere un programma che chiede due numeri all’utente.\n", |
| 527 | + "- Stampare se il primo numero è maggiore, minore o uguale al secondo.\n", |
529 | 528 | "\n", |
530 | 529 | "### Esercizio 3: Controllo del flusso\n", |
531 | | - "- Scrivi un programma che chiede un voto (0-100).\n", |
| 530 | + "- Scrivere un programma che chiede un voto (0-100).\n", |
532 | 531 | "- Se il voto è maggiore o uguale a 60, stampa “Passed”.\n", |
533 | 532 | "- Se il voto è tra 40 e 59, stampa “Remedial”.\n", |
534 | 533 | "- Altrimenti stampa “Failed”.\n", |
535 | 534 | "\n", |
536 | 535 | "### Esercizio 4: Ciclo for\n", |
537 | | - "- Stampa i numeri da 1 a 10 usando un ciclo `for`.\n", |
| 536 | + "- Stampare i numeri da 1 a 10 usando un ciclo `for`.\n", |
538 | 537 | "\n", |
539 | 538 | "### Esercizio 5: Ciclo while\n", |
540 | | - "- Chiedi all’utente di indovinare un numero segreto (ad esempio 7).\n", |
541 | | - "- Continua a chiedere finché non indovina." |
| 539 | + "- Chiedere all’utente di indovinare un numero segreto (ad esempio 7).\n", |
| 540 | + "- Continuare a chiedere finché non indovina." |
542 | 541 | ] |
543 | 542 | }, |
544 | 543 | { |
|
0 commit comments