Skip to content

Commit b2d12c1

Browse files
committed
wording ref v 3.1
1 parent 633f095 commit b2d12c1

14 files changed

+531
-401
lines changed

.github/workflows/generate-pdfs-on-release.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ jobs:
2323
run: |
2424
sudo apt-get update
2525
sudo apt-get install -y pandoc texlive-xetex texlive-fonts-recommended texlive-plain-generic
26+
sudo apt-get install -y poppler-utils
2627
pip install jupyter==1.1.1 nbconvert==7.16.6
2728
2829
- name: Convert notebooks to PDF
@@ -38,6 +39,12 @@ jobs:
3839
echo "Converting $notebook to PDF..."
3940
jupyter nbconvert --to pdf "$notebook" --output-dir=pdfs || echo "Warning: Failed to convert $notebook"
4041
done
42+
43+
# Merge all PDFs into one
44+
echo "Merging PDFs..."
45+
pdfunite pdfs/*.pdf corso-python-basic.pdf
46+
find pdfs -type f -name "*.pdf" ! -name "corso-python-basic.pdf" -delete
47+
echo "✅ Conversion complete! Final merged file: corso-python-basic.pdf"
4148
4249
- name: Upload PDFs to release
4350
env:

00_sommario_corso.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"source": [
88
"# 📚 Sommario del Corso Python per Principianti\n",
99
"\n",
10-
"Questo corso è un percorso introduttivo pensato per aiutarti a muovere i primi passi nel linguaggio Python. È uno dei pochi corsi per principianti di questo tipo disponibili interamente in italiano, progettato per offrirti un apprendimento chiaro e accessibile.\n",
10+
"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",
1313
"## 🧠 Python nell'Era dell'Intelligenza Artificiale\n",

01_primi_passi.ipynb

Lines changed: 47 additions & 44 deletions
Large diffs are not rendered by default.

02_sintassi_base.ipynb

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
"# ⌨️ Sintassi base di Python\n",
99
"\n",
1010
"---\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."
1212
]
1313
},
1414
{
1515
"cell_type": "markdown",
1616
"id": "d00ff8aa",
1717
"metadata": {},
1818
"source": [
19-
"## 1. Commenti\n",
19+
"## Commenti\n",
2020
"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",
2121
"\n",
2222
"### Commento su singola riga\n",
@@ -61,17 +61,17 @@
6161
"metadata": {},
6262
"source": [
6363
"---\n",
64-
"## 2. 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",
6868
"### 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",
7070
"\n",
7171
"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",
7272
"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",
7373
"\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."
7575
]
7676
},
7777
{
@@ -114,9 +114,9 @@
114114
"metadata": {},
115115
"source": [
116116
"---\n",
117-
"## 3. Variabili e assegnazioni\n",
117+
"## Variabili e assegnazioni\n",
118118
"\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",
120120
"\n",
121121
"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",
122122
"\n",
@@ -151,9 +151,9 @@
151151
"metadata": {},
152152
"source": [
153153
"---\n",
154-
"## 4. Tipi di dati\n",
154+
"## Tipi di dati\n",
155155
"\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",
157157
"\n",
158158
"| Tipo | Descrizione | Esempio |\n",
159159
"|-----------|--------------------------------------------|-----------------------|\n",
@@ -166,7 +166,7 @@
166166
"| `dict` | Collezione non ordinata di coppie chiave-valore | `{'nome': 'Anna', 'età': 30}` |\n",
167167
"| `set` | Collezione non ordinata di elementi unici | `{1, 2, 3}` |\n",
168168
"\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()`."
170170
]
171171
},
172172
{
@@ -203,7 +203,7 @@
203203
"### Tipi di dato complessi\n",
204204
"\n",
205205
"- **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",
207207
"- **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",
208208
"- **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."
209209
]
@@ -242,7 +242,7 @@
242242
"source": [
243243
"---\n",
244244
"### 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."
246246
]
247247
},
248248
{
@@ -269,7 +269,7 @@
269269
"metadata": {},
270270
"source": [
271271
"---\n",
272-
"## 5. Operatori aritmetici\n",
272+
"## Operatori aritmetici\n",
273273
"\n",
274274
"Python supporta le classiche operazioni matematiche sui numeri.\n",
275275
"\n",
@@ -303,7 +303,7 @@
303303
"metadata": {},
304304
"source": [
305305
"---\n",
306-
"## 6. Operatori di confronto e logici\n",
306+
"## Operatori di confronto e logici\n",
307307
"\n",
308308
"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",
309309
"\n",
@@ -365,9 +365,9 @@
365365
"metadata": {},
366366
"source": [
367367
"---\n",
368-
"## 7. Controllo del flusso: `if`, `elif`, `else`\n",
368+
"## Controllo del flusso: `if`, `elif`, `else`\n",
369369
"\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",
371371
"\n",
372372
"Sintassi di base:\n",
373373
"```python\n",
@@ -377,8 +377,7 @@
377377
" # code block se condition1 is False but condition2 is True\n",
378378
"else:\n",
379379
" # 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"
382381
]
383382
},
384383
{
@@ -403,7 +402,7 @@
403402
"metadata": {},
404403
"source": [
405404
"---\n",
406-
"## 8. Cicli: `for` e `while`\n",
405+
"## Cicli: `for` e `while`\n",
407406
"\n",
408407
"I cicli servono a ripetere un blocco di codice più volte.\n",
409408
"\n",
@@ -451,7 +450,7 @@
451450
"metadata": {},
452451
"source": [
453452
"---\n",
454-
"## 9. Funzioni base: definizione e chiamata\n",
453+
"## Funzioni base: definizione e chiamata\n",
455454
"\n",
456455
"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",
457456
"\n",
@@ -461,7 +460,7 @@
461460
" # The code inside here runs only when the function is called\n",
462461
" print(f\"Hello, {user_name}!\")\n",
463462
"```\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."
465464
]
466465
},
467466
{
@@ -483,7 +482,7 @@
483482
"metadata": {},
484483
"source": [
485484
"---\n",
486-
"## 10. Funzioni di input e output\n",
485+
"## Funzioni di input e output\n",
487486
"\n",
488487
"### Funzione `print()`\n",
489488
"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,26 +518,26 @@
519518
"## Esercizi\n",
520519
"\n",
521520
"### 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",
525524
"\n",
526525
"### 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",
529528
"\n",
530529
"### 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",
532531
"- Se il voto è maggiore o uguale a 60, stampa “Passed”.\n",
533532
"- Se il voto è tra 40 e 59, stampa “Remedial”.\n",
534533
"- Altrimenti stampa “Failed”.\n",
535534
"\n",
536535
"### 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",
538537
"\n",
539538
"### 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."
542541
]
543542
},
544543
{

0 commit comments

Comments
 (0)