Skip to content

Commit 29a6725

Browse files
committed
v 5.0
1 parent 5491ccc commit 29a6725

16 files changed

+227
-156
lines changed

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ server/package-lock.json
2828

2929
.ipynb_checkpoints/
3030

31-
# PDF files (generated by CI/CD)
3231
*.pdf
33-
pdfs/
32+
output_pdf/
33+
venv_pdf/
34+
pdf.sh

00_sommario_corso.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
"id": "9283dcca",
66
"metadata": {},
77
"source": [
8-
"# 📚 Sommario del Corso Python per Principianti\n",
8+
"# Sommario del Corso Python per Principianti\n",
99
"\n",
1010
"Questo corso è un percorso introduttivo pensato per imparare a muovere i primi passi nel linguaggio Python. È uno dei pochi corsi per principianti di questo tipo disponibili interamente in italiano, progettato per offrire un apprendimento chiaro e accessibile.\n",
1111
"\n",
1212
"---\n",
13-
"## 🧠 Python nell'Era dell'Intelligenza Artificiale\n",
13+
"## Python nell'Era dell'Intelligenza Artificiale\n",
1414
"\n",
1515
"Saper programmare in Python oggi non significa solo imparare un linguaggio, ma acquisire una competenza fondamentale in particolare nel campo dell'Intelligenza Artificiale (AI) e dei Large Language Model (LLM).\n",
1616
"\n",
@@ -26,7 +26,7 @@
2626
"id": "47009f70",
2727
"metadata": {},
2828
"source": [
29-
"## 📖 Moduli del corso\n",
29+
"## Moduli del corso\n",
3030
"1. [Primi passi con Python](01_primi_passi.ipynb)\n",
3131
"2. [Sintassi base di Python](02_sintassi_base.ipynb)\n",
3232
"3. [Strutture dati](03_strutture_dati.ipynb)\n",
@@ -40,7 +40,7 @@
4040
"11. [Decorator, closure e funzioni avanzate](11_decorator_closure.ipynb)\n",
4141
"12. [Progetto conclusivo](12_progetto.ipynb)\n",
4242
"\n",
43-
"## 🎯 Obiettivi del Corso\n",
43+
"## Obiettivi del Corso\n",
4444
"- Imparare la sintassi base di Python.\n",
4545
"- Eseguire codice con Jupyter Notebook.\n",
4646
"- Capire variabili, tipi e strutture di controllo, cicli.\n",

01_primi_passi.ipynb

Lines changed: 109 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"id": "8db108fa",
66
"metadata": {},
77
"source": [
8-
"# 🐍 Primi passi con Python\n",
8+
"# Primi passi con Python\n",
99
"\n",
1010
"In questa lezione, vedremo cosa serve per iniziare, partendo dalle competenze di base agli strumenti per scrivere i primi programmi.\n",
1111
"\n",
@@ -17,7 +17,7 @@
1717
"id": "038c35b4",
1818
"metadata": {},
1919
"source": [
20-
"## Pre-requisiti e strumenti necessari 🛠️\n",
20+
"## Pre-requisiti e strumenti necessari\n",
2121
"\n",
2222
"### Competenze richieste\n",
2323
"\n",
@@ -42,27 +42,112 @@
4242
]
4343
},
4444
{
45-
"cell_type": "markdown",
46-
"id": "5697c534",
47-
"metadata": {},
48-
"source": [
45+
"cell_type": "markdown",
46+
"id": "installazione_python_dettagliata",
47+
"metadata": {},
48+
"source": [
4949
"### Installazione di Python e dell'editor\n",
5050
"\n",
51-
"A seconda del sistema operativo in uso, i passaggi sono leggermente diversi. Prima di iniziare a programmare occorre assicurarsi di avere Python installato e configurato correttamente prima di procedere.\n",
51+
"Per iniziare a programmare in Python occorre assicurarsi che l’interprete sia installato correttamente sul proprio sistema.\n",
52+
"I passaggi variano leggermente a seconda del sistema operativo.\n",
5253
"\n",
53-
"**Su Linux**\n",
54-
"- **Python:** È quasi sempre preinstallato. Si può verificare con il comando `python3 --version`.\n",
55-
"- **Editor:** [Opzionale] Si può installare **VS Code** dal sito ufficiale o tramite il gestore di pacchetti (ad es., `sudo snap install code --classic`).\n",
54+
"#### Installare Python su Linux\n",
5655
"\n",
57-
"**Su macOS**\n",
58-
"- **Python:** Scaricare l'installer dal **[sito ufficiale di Python](https://www.python.org/downloads/)** o usa Homebrew (`brew install python3`).\n",
59-
"- **Editor:** [Opzionale] Si può installare **[VS Code](https://code.visualstudio.com/)** dal sito ufficiale.\n",
56+
"La maggior parte delle distribuzioni Linux include già Python, ma spesso la versione usata dal sistema è diversa da quella che si vorrebbe usare per programmare.\n",
6057
"\n",
61-
"**Su Windows**\n",
62-
"- **Python:** Scaricare l'installer dal **[sito ufficiale di Python](https://www.python.org/downloads/)**. **Ricorda di spuntare la casella `Add Python to PATH`** durante l'installazione.\n",
63-
"- **Editor:** [Opzionale] Si può installare **[VS Code](https://code.visualstudio.com/)** dal sito ufficiale."
64-
]
65-
},
58+
"Verificare se Python è installato dal terminale:\n",
59+
"```bash\n",
60+
"python3 --version\n",
61+
"```\n",
62+
"\n",
63+
"**Ubuntu / Debian**\n",
64+
"```bash\n",
65+
"sudo apt update\n",
66+
"sudo apt install python3 python3-pip python3-venv\n",
67+
"```\n",
68+
"\n",
69+
"**Fedora**\n",
70+
"```bash\n",
71+
"sudo dnf install python3 python3-pip python3-virtualenv\n",
72+
"```\n",
73+
"\n",
74+
"**Arch Linux / Manjaro**\n",
75+
"```bash\n",
76+
"sudo pacman -S python python-pip\n",
77+
"```\n",
78+
"\n",
79+
"#### Installare Python su macOS\n",
80+
"\n",
81+
"Il metodo consigliato è quello di usare l'installer ufficiale che si può scaricare da: https://www.python.org/downloads/\n",
82+
"\n",
83+
"Come alternativa è possibile utilizzare il gestore di pacchetti Homebrew.\n",
84+
"\n",
85+
"**Che cos’è Homebrew?**\n",
86+
"\n",
87+
"Homebrew è un gestore di pacchetti per macOS, utile per installare software tramite terminale.\n",
88+
"\n",
89+
"Installazione Homebrew:\n",
90+
"```bash\n",
91+
"/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n",
92+
"```\n",
93+
"\n",
94+
"Una volta installato Homebrew è possibile installare Python tramite Homebrew:\n",
95+
"```bash\n",
96+
"brew update\n",
97+
"brew install python\n",
98+
"```\n",
99+
"\n",
100+
"#### Installare Python su Windows\n",
101+
"\n",
102+
"1. Andare su: https://www.python.org/downloads/\n",
103+
"2. Scaricare l’installer.\n",
104+
"3. **Attivare l’opzione `Add Python to PATH`**.\n",
105+
"4. Verificare l'installazione:\n",
106+
"```powershell\n",
107+
"python --version\n",
108+
"```\n",
109+
"\n",
110+
"### Installazione dell’editor (VS Code)\n",
111+
"Il metodo consigliato è quello di scaricare VS Code dal sito ufficiale https://code.visualstudio.com/\n",
112+
"\n",
113+
"**macOS (Homebrew):**\n",
114+
"\n",
115+
"VS Code è disponibile anche attraverso Homebrew:\n",
116+
"```bash\n",
117+
"brew install --cask visual-studio-code\n",
118+
"```\n",
119+
"\n",
120+
"### Gestire più versioni di Python con pyenv\n",
121+
"\n",
122+
"Quando si lavora con Python, può essere necessario utilizzare **versioni diverse** per progetti differenti. Per evitare conflitti, si può usare **pyenv**, uno strumento che permette di installare e gestire più versioni di Python sullo stesso sistema.\n",
123+
"\n",
124+
"**Installazione macOS e Linux:**\n",
125+
"Installare tramite script ufficiale:\n",
126+
"```bash\n",
127+
"curl https://pyenv.run | bash\n",
128+
"```\n",
129+
"\n",
130+
"Aggiungere al file della shell (ad esempio ~/.bashrc o ~/.zshrc):\n",
131+
"```bash\n",
132+
"export PATH=\"$HOME/.pyenv/bin:$PATH\"\n",
133+
"eval \"$(pyenv init -)\"\n",
134+
"```\n",
135+
"\n",
136+
"**Installazione su Windows):**\n",
137+
"Usare il progetto pyenv-win:\n",
138+
"\n",
139+
"```powershell\n",
140+
"Invoke-WebRequest -UseBasicParsing -Uri \"https://pyenv-win.github.io/pyenv-win/install.ps1\" | Invoke-Expression\n",
141+
"```\n",
142+
"\n",
143+
"**Comandi principali:**\n",
144+
"- Lista versioni disponibili: `pyenv install --list`\n",
145+
"- Installare una versione: `pyenv install 3.12.1`\n",
146+
"- Impostare versione globale: `pyenv global 3.12.1`\n",
147+
"- Impostare versione locale: `pyenv local 3.11.6`"
148+
]
149+
}
150+
,
66151
{
67152
"cell_type": "markdown",
68153
"id": "5050cc32",
@@ -114,7 +199,7 @@
114199
"id": "a57a03aa",
115200
"metadata": {},
116201
"source": [
117-
"### Interazione con l'utente: la funzione `input()` 💬\n",
202+
"### Interazione con l'utente: la funzione `input()`\n",
118203
"\n",
119204
"Mentre `print()` permette di mostrare un output, la funzione **`input()`** consente di chiedere all'utente di inserire dei dati. Quando Python incontra `input()`, il programma si ferma e attende che l'utente scriva qualcosa e prema Invio. Il testo che l'utente inserisce viene restituito come una stringa. Spiegheremo in dettaglio come funziona `input()` più avanti nel corso, qui si può vederla in azione nel prossimo esempio."
120205
]
@@ -148,7 +233,7 @@
148233
"id": "af5a1f21",
149234
"metadata": {},
150235
"source": [
151-
"### Il costrutto `if __name__ == \"__main__\":` 🤔\n",
236+
"### Il costrutto `if __name__ == \"__main__\":`\n",
152237
"\n",
153238
"Il primo blocco che viene all'attenzione è il blocco `if __name__ == \"__main__\":`. Questo è un costrutto comune e importante in Python. Serve a controllare se il file Python viene eseguito direttamente o se viene importato come modulo in un altro script.\n",
154239
"\n",
@@ -165,7 +250,7 @@
165250
"id": "7151f687",
166251
"metadata": {},
167252
"source": [
168-
"### Passare argomenti esterni al programma 🚀\n",
253+
"### Passare argomenti esterni al programma\n",
169254
"\n",
170255
"Spesso, invece di chiedere all'utente di inserire dati con `input()`, si vuole che il programma li riceva direttamente quando viene eseguito da terminale. Questo è possibile farlo usando il modulo della libreria standard `sys` e in particolare la lista `sys.argv`.\n",
171256
"\n",
@@ -206,7 +291,7 @@
206291
"\n",
207292
"Python ha una ricca **libreria standard** di moduli che si può importare per estendere le funzionalità all'interno di un codice. Le librerie sono collezioni di funzioni e strumenti predefiniti.\n",
208293
"\n",
209-
"### Come e dove Python cerca i moduli 🗺️\n",
294+
"### Come e dove Python cerca i moduli\n",
210295
"\n",
211296
"Quando un'istruzione `import` viene eseguita, Python cerca i moduli in una lista di percorsi predefinita, accessibile tramite la lista **`sys.path`** del modulo integrato `sys`. Questo meccanismo è fondamentale per capire come vengono trovate sia le librerie standard che quelle installate di terze parti.\n",
212297
"\n",
@@ -450,9 +535,9 @@
450535
"metadata": {},
451536
"source": [
452537
"---\n",
453-
"## 💡 Soluzioni\n",
538+
"## Soluzioni\n",
454539
"\n",
455-
"> 📂 **[Clicca qui per vedere il codice delle soluzioni](code/01/solutions)**\n",
540+
"> **[Clicca qui per vedere il codice delle soluzioni](code/01/solutions)**\n",
456541
"\n",
457542
"---"
458543
]

02_sintassi_base.ipynb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"id": "7c690cce",
66
"metadata": {},
77
"source": [
8-
"# ⌨️ Sintassi base di Python\n",
8+
"# Sintassi base di Python\n",
99
"\n",
1010
"---\n",
1111
"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."
@@ -61,7 +61,7 @@
6161
"metadata": {},
6262
"source": [
6363
"---\n",
64-
"## Indentazione: Perché è così importante? 🤔\n",
64+
"## Indentazione: Perché è così importante?\n",
6565
"\n",
6666
"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",
6767
"\n",
@@ -483,7 +483,7 @@
483483
"---\n",
484484
"## Funzioni di input e output\n",
485485
"\n",
486-
"### Funzione `print()` 🖨️\n",
486+
"### Funzione `print()`\n",
487487
"La funzione `print()` serve per visualizzare **dati o messaggi a schermo**. È estremamente flessibile e consente di:\n",
488488
"- stampare più valori contemporaneamente,\n",
489489
"- personalizzare il separatore (`sep`) e il termine della riga (`end`),\n",
@@ -552,7 +552,7 @@
552552
"Le **f-string** sono considerate la scelta **più moderna, leggibile e veloce**.\n",
553553
"\n",
554554
"---\n",
555-
"### Funzione `input()` ⌨️\n",
555+
"### Funzione `input()`\n",
556556
"La funzione `input()` serve per **leggere dati dall’utente**. Restituisce sempre una **stringa**, quindi è spesso necessario convertirla per usarla in calcoli numerici.\n",
557557
"\n",
558558
"```python\n",
@@ -638,9 +638,9 @@
638638
"metadata": {},
639639
"source": [
640640
"---\n",
641-
"## 💡 Soluzioni\n",
641+
"## Soluzioni\n",
642642
"\n",
643-
"> 📂 **[Clicca qui per vedere il codice delle soluzioni](code/02/solutions)**\n",
643+
"> **[Clicca qui per vedere il codice delle soluzioni](code/02/solutions)**\n",
644644
"\n",
645645
"---"
646646
]

03_strutture_dati.ipynb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"id": "e5d7700c",
66
"metadata": {},
77
"source": [
8-
"# 📦 Strutture Dati in Python\n",
8+
"# Strutture Dati in Python\n",
99
"\n",
1010
"---\n",
1111
"In questo capitolo esploriamo le principali **strutture dati** in Python: liste, tuple, dizionari e insiemi. Sono contenitori fondamentali per gestire e organizzare collezioni di dati in modo efficiente."
@@ -16,7 +16,7 @@
1616
"id": "0655afda",
1717
"metadata": {},
1818
"source": [
19-
"## A cosa servono le Strutture Dati? 🤔\n",
19+
"## A cosa servono le Strutture Dati?\n",
2020
"\n",
2121
"Si può pensare alle strutture dati come a diversi tipi di **contenitori** specializzati, ognuno progettato per un compito specifico. Mentre una variabile può contenere un singolo valore (come un numero o una stringa), una struttura dati può tenere insieme un'intera collezione di valori, organizzandoli in un modo particolare.\n",
2222
"\n",
@@ -89,7 +89,7 @@
8989
"metadata": {},
9090
"source": [
9191
"---\n",
92-
"### Il metodo `join()` 🧩\n",
92+
"### Il metodo `join()`\n",
9393
"\n",
9494
"Il metodo **`join()`** è un potente metodo delle stringhe, ma viene utilizzato per operare su strutture dati iterabili come le liste. Serve a concatenare tutti gli elementi di una lista (o tupla) in una singola stringa, utilizzando un **separatore** specificato.\n",
9595
"\n",
@@ -281,7 +281,7 @@
281281
"source": [
282282
"---",
283283
"\n",
284-
"## Come accedere agli elementi (Indicizzazione, Chiavi e Slicing) 🎯\n",
284+
"## Come accedere agli elementi (Indicizzazione, Chiavi e Slicing)\n",
285285
"\n",
286286
"Per accedere a un singolo elemento in una struttura dati si usano le **parentesi quadre `[]`**.\n",
287287
"\n",
@@ -375,7 +375,7 @@
375375
"metadata": {},
376376
"source": [
377377
"---\n",
378-
"## La parola chiave `yield` 🔄\n",
378+
"## La parola chiave `yield`\n",
379379
"\n",
380380
"In Python, la parola chiave **`yield`** viene usata all’interno di una funzione per trasformarla in un **generatore**. \n",
381381
"Un generatore è una funzione speciale che produce una sequenza di valori uno alla volta, **senza calcolare tutti i risultati in anticipo**. \n",
@@ -454,7 +454,7 @@
454454
"metadata": {},
455455
"source": [
456456
"---\n",
457-
"## Perché Python non ha gli array primitivi? 🤔\n",
457+
"## Perché Python non ha gli array primitivi?\n",
458458
"\n",
459459
"A differenza di linguaggi come C, C++ o Java, Python non include un tipo di dato primitivo per gli array. La ragione risiede nella filosofia del linguaggio, che predilige la **flessibilità** e la **generalità** rispetto all'ottimizzazione di basso livello per casi specifici.\n",
460460
"\n",
@@ -470,7 +470,7 @@
470470
"metadata": {},
471471
"source": [
472472
"---\n",
473-
"## Comprehensions ed Espressioni Generatrici 🌟\n",
473+
"## Comprehensions ed Espressioni Generatrici\n",
474474
"\n",
475475
"Le *comprehensions* sono una delle caratteristiche più eleganti e potenti di Python. Permettono di creare nuove collezioni (liste, dizionari o insiemi) in modo **compatto**, **leggibile** e spesso più **efficiente** rispetto ai cicli tradizionali.\n",
476476
"\n",
@@ -697,9 +697,9 @@
697697
"metadata": {},
698698
"source": [
699699
"---\n",
700-
"## 💡 Soluzioni\n",
700+
"## Soluzioni\n",
701701
"\n",
702-
"> 📂 **[Clicca qui per vedere il codice delle soluzioni](code/03/solutions)**\n",
702+
"> **[Clicca qui per vedere il codice delle soluzioni](code/03/solutions)**\n",
703703
"\n",
704704
"---"
705705
]

04_gestione_errori.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"# ⚠️ Gestione degli Errori in Python\n",
7+
"# Gestione degli Errori in Python\n",
88
"\n",
99
"---\n",
1010
"\n",
@@ -175,9 +175,9 @@
175175
"metadata": {},
176176
"source": [
177177
"---\n",
178-
"## 💡 Soluzioni\n",
178+
"## Soluzioni\n",
179179
"\n",
180-
"> 📂 **[Clicca qui per vedere il codice delle soluzioni](code/04/solutions)**\n",
180+
"> **[Clicca qui per vedere il codice delle soluzioni](code/04/solutions)**\n",
181181
"\n",
182182
"---"
183183
]

0 commit comments

Comments
 (0)