diff --git a/curriculum/challenges/italian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md b/curriculum/challenges/italian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
index 9e65b0be39..d45ef39b24 100644
--- a/curriculum/challenges/italian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
+++ b/curriculum/challenges/italian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
@@ -9,7 +9,7 @@ dashedName: create-a-more-complex-shape-using-css-and-html
# --description--
-Una delle forme più comuni al mondo è la forma del cuore, e in questa sfida ne creerai una utilizzando solo CSS. Per prima cosa però è necessario capire gli pseudo-elementi `::before` e `::after`. Questi pseudo-elementi sono usati per aggiungere qualcosa prima o dopo un elemento selezionato. Nell'esempio seguente, uno pseudo-elemento `::before` viene utilizzato per aggiungere un rettangolo a un elemento di classe `heart`:
+Una delle forme più comuni al mondo è la forma del cuore, e in questa sfida ne creerai una utilizzando solo CSS. Per prima cosa però è necessario capire gli pseudo-elementi `::before` e `::after`. `::before` crea uno pseudo-elemento che è il primo figlio dell'elemento selezionato; `::after` crea uno pseudo-elemento che è l'ultimo figlio dell'elemento selezionato. Nell'esempio seguente, uno pseudo-elemento `::before` viene utilizzato per aggiungere un rettangolo a un elemento di classe `heart`:
```css
.heart::before {
diff --git a/curriculum/challenges/italian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md b/curriculum/challenges/italian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
index c0d7f7d9db..493f7e8575 100644
--- a/curriculum/challenges/italian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
+++ b/curriculum/challenges/italian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
@@ -14,7 +14,7 @@ Costruisci un'app JavaScript full-stack che sia funzionalmente simile a questa:
- Usare [la nostra bozza di progetto su Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-filemetadata) per completare il tuo progetto.
- Usare un costruttore di siti di tua scelta per completare il progetto. Assicurati di incorporare tutti i file del nostro repository GitHub.
-Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente dei tuoi progetti nel campo `GitHub Link`.
+Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente del tuo progetto nel campo `GitHub Link`.
# --instructions--
diff --git a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/arithmetic-formatter.md b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/arithmetic-formatter.md
index a5cadd163c..931ef9bf3c 100644
--- a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/arithmetic-formatter.md
+++ b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/arithmetic-formatter.md
@@ -8,21 +8,83 @@ dashedName: arithmetic-formatter
# --description--
-Crea una funzione che riceve una lista di stringhe che sono problemi aritmetici e restituisce i problemi disposti verticalmente e fianco a fianco.
-
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-arithmetic-formatter).
-
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-arithmetic-formatter).
Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-
-
- Video corso Python for Everybody (14 ore)
-
- -
- Video corso Learn Python (2 ore)
-
-
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
+Gli studenti delle elementari spesso scrivono l problemi aritmetici in colonna per risolverli più facilmente. Per esempio, "235 + 52" diventa:
+
+```py
+ 235
++ 52
+-----
+```
+
+Crea una funzione che riceve una lista di stringhe che sono problemi aritmetici e restituisce i problemi disposti verticalmente e fianco a fianco. La funzione dovrebbe accettare un secondo argomento facoltativo. Quando il secondo argomento ha valore di `True`, devono essere mostrati anche i risultati.
+
+## Esempio
+
+Chiamata della funzione:
+
+```py
+arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
+```
+
+Output:
+
+```py
+ 32 3801 45 123
++ 698 - 2 + 43 + 49
+----- ------ ---- -----
+```
+
+Chiamata della funzione:
+
+```py
+arithmetic_arranger(["32 + 8", "1 - 3801", "9999 + 9999", "523 - 49"], True)
+```
+
+Output:
+
+```py
+ 32 1 9999 523
++ 8 - 3801 + 9999 - 49
+---- ------ ------ -----
+ 40 -3800 19998 474
+```
+
+## Regole
+
+La funzione restituirà la conversione corretta se i problemi dati sono correttamente formattati, altrimenti, deve **restituire** una **stringa** che descrive un errore significativo per l'utente.
+
+
+- Situazioni che devono restituire un errore:
+ - Se ci sono **troppi problemi** dati alla funzione. Il limite è **cinque**, più di ciò deve restiture: `Error: Too many problems.`
+ - Gli operatori appropriati che la funzione accetterà sono **addizione** e **sottrazione**. Moltiplicazione e divisione devono dare un errore. Altri operatori non menzionati in questa lista non serve che vengano testati. L'errore restituito deve essere: `Error: Operator must be '+' or '-'.`
+ - Ogni numero (operando) deve contenere solo cifre. Altrimenti, la funzione deve restituire: `Error: Numbers must only contain digits.`
+ - Ogni operando (numero da ogni lato dell'operatore) ha una lunghezza di massimo 4 cirre. Altrimenti, la funzione deve restituire: `Error: Numbers cannot be more than four digits.`
+- Se l'utente ha dato i problemi nel formato corretto, la conversione che restituisci deve seguire le seguenti regole:
+ - Ci deve essere un singolo spazio tra l'operatore e il più lungo dei due operandi, l'operatore deve essere sulla stessa riga del secondo operando, entrambi gli operandi devono essere nell'ordine dato (il primo in alto, il secondo in basso.
+ - I numeri devono essere allineati a destra.
+ - Devono esserci quattro spazi tra ogni problema.
+ - Ci devono essere dei trattini sotto ogni problema. I trattini devono avere la stessa larghezza del singolo problema. (L'esempio sopra mostra come deve apparire.)
+
+## Sviluppo
+
+Scrivi il tuo codice in `arithmetic_arranger.py`. Per lo sviluppo, puoi usare `main.py` per testare la tua funzione `arithmetic_arranger()`. Usa il bottone "run" e `main.py` eseguirà.
+
+## Testare
+
+I test unitari per questo progetto sono in `test_module.py`. Stiamo eseguendo i test da `test_module.py` in `main.py` per la tua convenienza. I test eseguiranno automaticamente quando usi il bottone "run". In alternativa puoi eseguire i test eseguendo `pytest` nella console.
+
+## Consegnare
+
+Copia l'URL del tuo progetto e consegnalo nell'input wua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md
index d6dabef976..ad2c7f4ba9 100644
--- a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md
+++ b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md
@@ -8,22 +8,86 @@ dashedName: budget-app
# --description--
-Crea una classe "Category" che possa essere utilizzata per creare diverse categorie di budget.
-
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-budget-app).
-
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-budget-app).
Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
+Completa la classe `Category` in `budget.py`. Dovrebbe essere in grado di instanziare oggetti basati su diverse categorie di budget, come *food*, *clothing*, e *entertainment*. Quando gli oggetti sono creati, ricevono come argomento il nome della categoria. La classe dovrebbe avere una classe di istanza chiamata `ledger` che è una lista. La classe dovrebbe anche contenere i seguenti metodi:
+
+- Un metodo di deposito `deposit` che accetta un valore e una descrizione. Se non è data alcuna descrizione, dovrebbe essere una stringa vuota come default. Il metodo dovrebbe aggiungere un oggetto alla lista ledger nella forma di `{"amount": valore, "description": descrizione}`.
+- Un metodo di prelievo `withdraw` che è simile al metodo `deposit`, ma il valore dato come argomento dovrebbe essere salvato in ledger come un valore negativo. Se non ci sono abbastanza fondi, nulla dovrebbe essere aggiunto al ledger. Il metodo dovrebbe restituire `True` se il prelievo ha avuto atto, e `False` altrimenti.
+- Un metodo per ottenere la giacenza attuale `get_balance` che restituisce l'ammontare nella categoria del budget basato su depositi e prelievi che hanno avuto luogo.
+- Un metodo di trasferimento `transfer` che accetta un ammontare e un'altra categoria come argomenti. Il metodo dovrebbe aggungere un prelievo con l'ammontare e la descrizione "Transfer to [Categoria del budget di destinazione]". Il metodo dovrebbe aggiungere un deposito all'altra categoria del budget con l'ammontare e la descrizione "Transfer from [Categoria del Budget di origine]". Se non ci sono abbastanza fondi, nulla dovrebbe essere aggiunto a nessuno dei due ledger. Questo metodo dovrebbe restituire `True` se il trasferimento ha avuto luogo, e `False` altrimenti.
+- Un metodo `check_funds` che accetta un ammontare come argomento. Restituisce `False` se l'ammontare è più grande del saldo della categoria del budget e `True` altrimenti. Questo metodo dovrebbe essere usato sia dal metodo `withdraw` che dal metodo `transfer`.
+
+Quando l'oggetto budget è stampato dovrebbe mostrare:
+
+- Una riga di titolo di 30 caratteri dove il nome della cateria è centrato in una riga di caratteri `*`.
+- Una lista delle transazioni nel ledger. Ogni linea dovrebbe mostrare la descrizione e l'ammontare. I primi 23 caratteri della descrizione dovrebbero essere mostrati, poi l'ammontare. L'ammontare dovrebbe essere allineato a destra, avere due cifre decimali, e mostrare un massimo di 7 caratteri.
+- Una riga che mostra il totale della categoria.
+
+Ecco un esempio dell'output:
+
+```bash
+*************Food*************
+initial deposit 1000.00
+groceries -10.15
+restaurant and more foo -15.89
+Transfer to Clothing -50.00
+Total: 923.96
+```
+
+Oltre la classe `Category`, crea una funzione, al di fuori della classe, chiamata `create_spend_chart` che prende una lista di categorie come argomento. Dovrebbe restituire una stringa che è un grafico a barre.
+
+Il grafico dovrebbe mostrare la percentuale spesa in ogni categoria passata alla funzione. La percentuale spesa dovrebbe essere calcolata solo con i prelievi e non i depositi. Lungo il lato sinistro del grafico dovrebbero esserci etichette 0 - 100. Le barre nel grafico dovrebbero essere fatte di caratteri "o". L'altezza di ogni barra dovrebbe essere arrotondata per difetto alla decina più vicina. La linea orizzontale sotto le barre dovrebbe finire due caratteri dopo l'ultima barra. Ogni nome di categoria dovrebbe essere scritto verticalmente sotto la barra. Dovrebbe esserci un titolo in cima che dice "Percentage spent by category".
+
+Questa funzione sarà testata con al massimo quattro categorie.
+
+Guarda all'esempio di output qui sotto con attenzione e assicurati che gli spazi dell'output combacino esattamente con l'esempio.
+
+```bash
+Percentage spent by category
+100|
+ 90|
+ 80|
+ 70|
+ 60| o
+ 50| o
+ 40| o
+ 30| o
+ 20| o o
+ 10| o o o
+ 0| o o o
+ ----------
+ F C A
+ o l u
+ o o t
+ d t o
+ h
+ i
+ n
+ g
+```
+
+I test unitari per questo progetto sono in `test_module.py`.
+
+## Sviluppo
+
+Scrivi il tuo codice in `budget.py`. Per lo sviluppo, puoi usare `main.py` per testare la tua funzione `Category`. Usa il bottone "run" e `main.py` eseguirà.
+
+## Testare
+
+Abbiamo impotato i test da `test_module.py` in `main.py` per la tua convenienza. I test eseguiranno automaticamente quando usi il bottone "run".
+
+## Consegnare
+
+Copia l'URL del tuo progetto e consegnalo nell'input wua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md
index a8e3019c9e..6feaabed60 100644
--- a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md
+++ b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/polygon-area-calculator.md
@@ -8,22 +8,96 @@ dashedName: polygon-area-calculator
# --description--
-In questo progetto utilizzerai la programmazione orientata agli oggetti per creare una classe Rettangolo (Rectangle) e una classe Quadrato (Square). La classe Square dovrebbe essere una sottoclasse di Rectangle ed ereditare metodi ed attributi.
-
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-polygon-area-calculator).
-
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-polygon-area-calculator).
Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
+In questo progetto utilizzerai la programmazione orientata agli oggetti per creare una classe Rettangolo (Rectangle) e una classe Quadrato (Square). La classe Square dovrebbe essere una sottoclasse di Rectangle ed ereditare metodi ed attributi.
+
+## Classe Rectangle
+
+Quando viene creato un oggetto Rectangle, dovrebbe essere inizializzato con attributi `width` (larghezza) e `height` (altezza). La classe dovrebbe anche contenere i seguenti metodi:
+
+- `set_width`
+- `set_height`
+- `get_area`: Restituisce l'area (`width * height`)
+- `get_perimeter`: Restituisce il perimetro (`2 * width + 2 * height`)
+- `get_diagonal`: Restituisce la diagonale (`(width ** 2 + height ** 2) ** .5`)
+- `get_picture`: Restituisce una stringa che rappresenta la forma usando linee di "\*". Il numero di righe dovrebbe essere uguale all'altezza e il numero di "\*" in ogni riga dovrebbe essere uguale alla larghezza. Ci dovrebbe essere un carattere di nuova linea (`\n`) alla fine di ogni riga. Se la larghezza o l'altezza è maggiore di 50, questo dovrebbe restituire la stringa: `"Too big for picture."`.
+- `get_amount_inside`: Prende un'altra forma (quadrato o rettangolo) come argomento. Restituisce il numero di volte che la forma passata potrebbe adattarsi all'interno della forma (senza rotazioni). Per esempio, un rettangolo con una larghezza di 4 e un'altezza di 8 potrebbe contenere due quadrati con lati di 4.
+
+Inoltre, se un'istanza di Rectangle è rappresentata come una stringa, dovrebbe apparire come: `Rectangle(width=5, height=10)`
+
+## Classe Square
+
+La classe Square dovrebbe essere una sottoclasse di Rectangle. Quando viene creato un oggetto Square, viene passata la lunghezza di un singolo lato. Il metodo `__init__` dovrebbe memorizzare la lunghezza del lato sia nell'attributo `width` che in `height` della classe Rectangle.
+
+La classe Square dovrebbe essere in grado di accedere ai metodi della classe Rectangle, ma dovrebbe anche contenere un metodo `set_side`. Se un'istanza di un quadrato è rappresentata come una stringa, dovrebbe apparire come `Square(side=9)`
+
+Inoltre, i metodi `set_width` e `set_height` della classe Square dovrebbero impostare sia la larghezza che l'altezza.
+
+## Esempio di utilizzo
+
+```py
+rect = shape_calculator.Rectangle(10, 5)
+print(rect.get_area())
+rect.set_height(3)
+print(rect.get_perimeter())
+print(rect)
+print(rect.get_picture())
+
+sq = shape_calculator.Square(9)
+print(sq.get_area())
+sq.set_side(4)
+print(sq.get_diagonal())
+print(sq)
+print(sq.get_picture())
+
+rect.set_height(8)
+rect.set_width(16)
+print(rect.get_amount_inside(sq))
+```
+
+Tale codice deve restituire:
+
+```bash
+50
+26
+Rectangle(width=10, height=3)
+**********
+**********
+**********
+
+81
+5.656854249492381
+Square(side=4)
+****
+****
+****
+****
+
+8
+```
+
+I test unitari per questo progetto sono in `test_module.py`.
+
+## Sviluppo
+
+Scrivi il tuo codice in `shape_calculator.py`. Per lo sviluppo, puoi usare `main.py` per testare la tua funzione `shape_calculator()`. Usa il bottone "run" e `main.py` eseguirà.
+
+## Test
+
+Abbiamo importato i test da `test_module.py` in `main.py` per la tua convenienza. I test eseguiranno automaticamente quando usi il bottone "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e consegnalo nell'input qua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md
index c0c7d11fa0..b009f39901 100644
--- a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md
+++ b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md
@@ -8,20 +8,70 @@ dashedName: probability-calculator
# --description--
-Scrivi un programma per determinare la probabilità approssimativa di estrarre certe palle in modo casuale da un cappello.
-
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-probability-calculator). Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-probability-calculator).
Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
+Supponiamo che ci sia un cappello contenente 5 palline blu, 4 palline rosse e 2 palline verdi. Qual è la probabilità che una pescata casuale di 4 palline contenga almeno 1 pallina rossa e 2 palline verdi? Mentre sarebbe possibile calcolare la probabilità utilizzando la matematica avanzata, un modo più facile è quello di scrivere un programma per eseguire un gran numero di esperimenti per stimare una probabilità approssimativa.
+
+Per questo progetto, scriverai un programma per determinare la probabilità approssimativa di pescare a caso determinate palline da un cappello.
+
+Per prima cosa, crea una classe `Hat` (cappello) in `prob_calculator.py`. La classe deve prendere un numero variabile di argomenti che specificano il numero di palline di ogni colore che sono nel cappello. Ad esempio, un oggetto di classe potrebbe essere creato in uno qualsiasi di questi modi:
+
+```py
+hat1 = Hat(yellow=3, blue=2, green=6)
+hat2 = Hat(red=5, orange=4)
+hat3 = Hat(red=5, orange=4, black=1, blue=0, pink=2, striped=9)
+```
+
+Un cappello sarà sempre creato con almeno una pallina. Gli argomenti passati all'oggetto cappello alla creazione dovrebbero essere convertiti in una variabile di istanza `contents`. `contents` dovrebbe essere una lista di stringhe contenente un elemento per ogni pallina nel cappello. Ogni elemento nella lista dovrebbe essere il nome del colore che rappresenti una singola sfera di quel colore. Ad esempio, se il tuo cappello è `{"red": 2, "blue": 1}`, `contents` dovrebbe essere `["red", "red", "blue"]`.
+
+La classe `Hat` dovrebbe avere un metodo `draw` che accetta un argomento che indica il numero di palline da prelevare dal cappello. Questo metodo dovrebbe rimuovere palline a caso da `contents` e restituire quelle palline come un elenco di stringhe. Le palle non devono tornare nel cappello durante il pescaggio, simile all'esperimento con un'urna senza sostituzione. Se il numero di palline da pescare supera la quantità disponibile, restituisci tutte le palline.
+
+Successivamente, crea una funzione `experiment` in `prob_calculator.py` (non all'interno della classe `Hat`). Questa funzione dovrebbe accettare i seguenti argomenti:
+
+- `hat`: Un oggetto cappello contenente palline che dovrebbero essere copiate all'interno della funzione.
+- `expected_balls`: Un oggetto che indica il gruppo esatto di palline che tentiamo di attingere dal cappello per l'esperimento. Ad esempio, per determinare la probabilità di pescare 2 palline blu e 1 pallina rossa dal cappello, imposta `expected_balls` a `{"blue":2, "red":1}`.
+- `num_balls_drawn`: Il numero di palline da pescare dal cappello in ogni esperimento.
+- `num_experiments`: Il numero di esperimenti da eseguire. (Più esperimenti eseguiti, più precisa sarà la probabilità approssimativa.)
+
+La funzione `experiment` dovrebbe restituire una probabilità.
+
+Ad esempio, diciamo che si vuole determinare la probabilità di ottenere almeno 2 palline rosse e 1 pallina verde quando si pescano 5 palline da un cappello contenente 6 nere, 4 rosse e 3 verdi. Per farlo, eseguiamo `N` esperimenti, contiamo quante volte `M` riceviamo almeno 2 palline rosse e 1 pallina verde, e stimiamo la probabilità come `M/N`. Ogni esperimento consiste nell'iniziare con un cappello contenente le palline specificate, pascare un certo numero di palline, e controllare se abbiamo ottenuto le palline che stavamo tentando di pescare.
+
+Ecco come verrebbe chiamata la funzione `experiment` basata sull'esempio sopra con 2000 esperimenti:
+
+```py
+hat = Hat(black=6, red=4, green=3)
+probability = experiment(hat=hat,
+ expected_balls={"red":2,"green":1},
+ num_balls_drawn=5,
+ num_experiments=2000)
+```
+
+Poiché questo è basato su pescaggi casuali, la probabilità sarà leggermente diversa ogni volta che il codice viene eseguito.
+
+*Suggerimento: Considera di utilizzare i moduli già importati nella parte superiore di `prob_calculator.py`. Non inizializzare il seme casuale entro `prob_calculator.py`.*
+
+## Sviluppo
+
+Scrivi il tuo codice in `prob_calculator.py`. Per lo sviluppo, puoi usare `main.py` per testare il tuo codice. Fare clic sul pulsante "Run" e `main.py` verrà eseguito.
+
+Il codice iniziale include le istruzioni di `import` per i moduli `copy` e `random`. Considera di utilizzarli nel tuo progetto.
+
+## Test
+
+I test unitari per questo progetto sono in `test_module.py`. Abbiamo impotato i test da `test_module.py` in `main.py` per la tua convenienza. I test eseguiranno automaticamente quando usi il bottone "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e consegnalo nell'input qua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md
index ffa62777eb..88ffe64287 100644
--- a/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md
+++ b/curriculum/challenges/italian/07-scientific-computing-with-python/scientific-computing-with-python-projects/time-calculator.md
@@ -8,20 +8,63 @@ dashedName: time-calculator
# --description--
-Scrivi una funzione denominata "add_time" che possa aggiungere una durata ad un orario di inizio e restituisca il risultato.
-
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-time-calculator). Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-time-calculator).
Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
+Scrivi una funzione denominata `add_time` che richieda due parametri obbligatori e uno opzionale:
+
+- un'ora di inizio nel formato dell'orologio a 12 ore (che termina in AM o PM)
+- una durata che indica il numero di ore e minuti
+- (facoltativo) un giorno di inizio della settimana, senza differenziare tra maiuscole e minuscole
+
+La funzione dovrebbe sommare la durata all'ora di inizio e restituire il risultato.
+
+Se il risultato sarà il giorno successivo, dovrebbe mostrare `(next day)` dopo l'ora. Se il risultato sarà più di un giorno dopo, dovrebbe mostrare `(n days later)` dopo il tempo, dove "n" è il numero di giorni dopo.
+
+Se alla funzione viene passato il parametro opzionale del giorno di inizio della settimana, l'output dovrebbe visualizzare il giorno della settimana del risultato. Il giorno della settimana in output dovrebbe comparire dopo l'ora e prima del numero di giorni successivi.
+
+Di seguito sono riportati alcuni esempi di casi diversi che la funzione dovrebbe gestire. Presta molta attenzione alla spaziatura e punteggiatura dei risultati.
+
+```py
+add_time("3:00 PM", "3:10")
+# Returns: 6:10 PM
+
+add_time("11:30 AM", "2:32", "Monday")
+# Returns: 2:02 PM, Monday
+
+add_time("11:43 AM", "00:20")
+# Returns: 12:03 PM
+
+add_time("10:10 PM", "3:30")
+# Returns: 1:40 AM (next day)
+
+add_time("11:43 PM", "24:20", "tueSday")
+# Returns: 12:03 AM, Thursday (2 days later)
+
+add_time("6:30 PM", "205:12")
+# Returns: 7:42 AM (9 days later)
+```
+
+Non importare nessuna libreria Python. Supponi che gli orari di inizio siano validi. I minuti nel tempo di durata saranno un numero intero inferiore a 60, ma l'ora può essere qualsiasi numero intero.
+
+## Sviluppo
+
+Scrivi il tuo codice in `time_calculator.py`. Per lo sviluppo, puoi usare `main.py` per testare la tua funzione `time_calculator()`. Usa il bottone "run" e `main.py` sarà eseguito.
+
+## Test
+
+I test unitari per questo progetto sono in `test_module.py`. Abbiamo importato i test da `test_module.py` in `main.py` per tua convenienza. I test saranno eseguiti automaticamente quando usi il bottone "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e consegnalo nell'input qua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/09-information-security/information-security-projects/anonymous-message-board.md b/curriculum/challenges/italian/09-information-security/information-security-projects/anonymous-message-board.md
index 1e886baeb1..64fa70fd2f 100644
--- a/curriculum/challenges/italian/09-information-security/information-security-projects/anonymous-message-board.md
+++ b/curriculum/challenges/italian/09-information-security/information-security-projects/anonymous-message-board.md
@@ -16,7 +16,7 @@ Lavorare su questo progetto ti porterà a scrivere il tuo codice utilizzando uno
- Usare [la nostra bozza di progetto su Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-messageboard) per completare il tuo progetto.
- Usare un costruttore di siti a tua scelta per completare il progetto. Assicurati di incorporare tutti i file del nostro repository GitHub.
-Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente dei tuoi progetti nel campo `GitHub Link`.
+Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente del tuo progetto nel campo `GitHub Link`.
# --instructions--
diff --git a/curriculum/challenges/italian/09-information-security/information-security-projects/port-scanner.md b/curriculum/challenges/italian/09-information-security/information-security-projects/port-scanner.md
index 7e237bc603..56cd5bfece 100644
--- a/curriculum/challenges/italian/09-information-security/information-security-projects/port-scanner.md
+++ b/curriculum/challenges/italian/09-information-security/information-security-projects/port-scanner.md
@@ -9,26 +9,78 @@ dashedName: port-scanner
# --description--
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-port-scanner).
+
+Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
+
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
+
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
+
+# --instructions--
+
Crea uno scanner di porte usando Python.
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-port-scanner).
+Nel file `port_scanner.py` file, crea una funzione denominata `get_open_ports` che richiede un argomento `target` e un argomento `port_range`. `target` può essere un URL o un indirizzo IP. `port_range` è un elenco di due numeri che indicano il primo e l'ultimo numero dell'intervallo di porte da controllare.
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Ecco alcuni esempi di come può essere chiamata la funzione:
-Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno alcune delle abilità Python richieste per questo progetto:
+```py
+get_open_ports("209.216.230.240", [440, 445])
+get_open_ports("www.stackoverflow.com", [79, 82])
+```
-
+La funzione dovrebbe restituire un elenco di porte aperte nell'intervallo specificato.
+
+La funzione `get_open_ports` dovrebbe anche prendere un terzo argomento opzionale di `True` per indicare la modalità "Verbose". Se impostata a true, la funzione dovrebbe restituire una stringa descrittiva invece di una lista di porte.
+
+Ecco il formato della stringa che dovrebbe essere restituita in modalità verbose (il testo all'interno di `{}` indica le informazioni che dovrebbero apparire):
+
+```bash
+Open ports for {URL} ({IP address})
+PORT SERVICE
+{port} {service name}
+{port} {service name}
+```
+
+Puoi usare il dizionario in `common_ports.py` per ottenere il nome del servizio corretto per ogni porta.
+
+Ad esempio, se la funzione è chiamata così:
+
+```py
+port_scanner.get_open_ports("scanme.nmap.org", [20, 80], True)
+```
+
+Dovrebbe restituire quanto segue:
+
+```bash
+Open ports for scanme.nmap.org (45.33.32.156)
+PORT SERVICE
+22 ssh
+80 http
+```
+
+Assicurati di includere una spaziatura adeguata e nuovi caratteri di riga.
+
+Se l'URL passato alla funzione `get_open_ports` non è valido, la funzione dovrebbe restituire la stringa: "Error: Invalid hostname".
+
+Se l'indirizzo IP passato alla funzione `get_open_ports` non è valido, la funzione dovrebbe restituire la stringa: "Error: Invalid IP address".
+
+## Sviluppo
+
+Scrivi il tuo codice in `port_scanner.py`. Per lo sviluppo, puoi usare `main.py` per testare il tuo codice. Fare clic sul pulsante "Run" e `main.py` verrà eseguito.
+
+## Test
+
+I test unitari per questo progetto sono in `test_module.py`. Abbiamo importato i test da `test_module.py` in `main.py` per tua comodità. I test saranno eseguiti automaticamente quando usi il bottone "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e invialo a freeCodeCamp.
# --hints--
-Dovrebbe superare tutti i test Python.
+Dovrebbe superare tutti i test di Python.
```js
diff --git a/curriculum/challenges/italian/09-information-security/information-security-projects/sha-1-password-cracker.md b/curriculum/challenges/italian/09-information-security/information-security-projects/sha-1-password-cracker.md
index a085be2c1a..157bd87843 100644
--- a/curriculum/challenges/italian/09-information-security/information-security-projects/sha-1-password-cracker.md
+++ b/curriculum/challenges/italian/09-information-security/information-security-projects/sha-1-password-cracker.md
@@ -9,22 +9,51 @@ dashedName: sha-1-password-cracker
# --description--
-In questo progetto si impara l'importanza di una buona sicurezza creando un cracker di password per capire le password di cui è stato fatto l'hash utilizzando SHA-1.
+Lavorerari a [questo progetto con il nostro codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-SHA-1-password-cracker).
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-SHA-1-password-cracker).
+Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno tutto quello che devi sapere per completare questo progetto:
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+- [Video corso Python for Everybody](https://www.freecodecamp.org/news/python-for-everybody/) (14 ore)
-Stiamo ancora sviluppando la parte didattica interattiva del curriculum di Python. Per ora, ecco alcuni video sul canale YouTube di freeCodeCamp.org che ti insegneranno alcune delle abilità Python richieste per questo progetto:
+- [Video corso Learn Python](https://www.freecodecamp.org/news/learn-python-video-course/) (10 ore)
-
+# --instructions--
+
+Le password non devono mai essere memorizzate come semplice testo in chiaro. Esse dovrebbero essere memorizzate come hash, nel caso in cui la lista delle password fosse scoperta. Tuttavia, non tutti gli hash sono creati allo stesso modo.
+
+In questo progetto comprenderai l'importanza di avere una buona sicurezza, creando un cracker di password per ottenere le password di cui è stato fatto l'hash utilizzando SHA-1.
+
+Creare una funzione che riceve un hash SHA-1 di una password e restituisce la password se è una delle 10000 password più utilizzate. Se l'hash SHA-1 NON è di una password nel database, restituisce "PASSWORD NOT IN DATABASE".
+
+La funzione dovrebbe calcolare l'hash di ogni password da `top-10000-passwords.txt` e confrontarla con l'hash passato nella funzione.
+
+La funzione dovrebbe prendere un secondo argomento opzionale chiamato `use_salts`. Se impostato a true, ogni stringa di salt dal file `known-salts.txt` dovrebbe essere aggiunto prima e dopo ogni password presa da `top-10000-passwords.txt` prima di fare l'hashing e prima di confrontarlo con l'hash passato alla funzione.
+
+Ecco l'hash di alcune password con cui testare la funzione:
+
+- `b305921a3723cd5d70a375cd21a61e60aabb84ec` dovrebbe restituire "sammy123"
+- `c7ab388a5ebefbf4d550652f1eb4d833e5316e3e` dovrebbe restituire "abacab"
+- `5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8` dovrebbe restituire "password"
+
+Ecco l'hash di alcune password con cui testare la funzione con `use_salts` impostato a `True`:
+
+- `53d8b3dc9d39f0184144674e310185e41a87ffd5` dovrebbe restituire "superman"
+- `da5a4e8cf89539e66097acd2f8af128acae2f8ae` dovrebbe restituire "q1w2e3r4t5"
+- `ea3f62d498e3b98557f9f9cd0d905028b3b019e1` dovrebbe restituire "bubbles1"
+
+La libreria `hashlib` è stata importata per te. Considera di usarla nel tuo codice. [Scopri di più su "hashlib" qui.](https://docs.python.org/3/library/hashlib.html)
+
+## Sviluppo
+
+Scrivi il tuo codice in `password_cracker.py`. Per lo sviluppo, puoi usare `main.py` per testare il tuo codice. Usa il bottone "run" e `main.py` sarà eseguito.
+
+## Test
+
+I test unitari per questo progetto sono in `test_module.py`. Abbiamo importato i test da `test_module.py` in `main.py` per tua convenienza. I test saranno eseguiti automaticamente quando usi il bottone "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e consegnalo nell'input qua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/09-information-security/information-security-projects/stock-price-checker.md b/curriculum/challenges/italian/09-information-security/information-security-projects/stock-price-checker.md
index 6d919bad07..073653b1bc 100644
--- a/curriculum/challenges/italian/09-information-security/information-security-projects/stock-price-checker.md
+++ b/curriculum/challenges/italian/09-information-security/information-security-projects/stock-price-checker.md
@@ -18,7 +18,7 @@ Lavorare su questo progetto ti porterà a scrivere il tuo codice utilizzando uno
- Usare [la nostra bozza di progetto su Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-stockchecker) per completare il tuo progetto.
- Usare un costruttore di siti di tua scelta per completare il progetto. Assicurati di incorporare tutti i file del nostro repository GitHub.
-Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente dei tuoi progetti nel campo `GitHub Link`.
+Quando hai finito, assicurati che una demo funzionante del tuo progetto sia ospitata in qualche percorso pubblico. Quindi invia l'URL nel campo `Solution Link`. Facoltativamente, invia anche un link al codice sorgente del tuo progetto nel campo `GitHub Link`.
# --instructions--