Skip to content

Progetti

Generato da: module-project-generator Basato su: Manuale Python per principianti (freeCodeCamp) — 12 moduli


Progetto 1.1: Biglietto da Visita Interattivo

Section titled “Progetto 1.1: Biglietto da Visita Interattivo”

Difficoltà: Principiante

Obiettivi: print(), variabili, commenti, esecuzione script

Storie utente:

  • L’utente avvia lo script e vede un biglietto da visita formattato
  • Il biglietto mostra: nome, cognome, professione, email, telefono
  • Il biglietto è incorniciato con caratteri * o =
  • Usa variabili per ogni dato
  • Aggiungi commenti che spiegano ogni sezione

Requisiti tecnici:

  • Solo print() e variabili
  • Output formattato con f-strings
  • Almeno 5 commenti nel codice

Esempio output:

====================================
* Nome: Mario *
* Cognome: Rossi *
* Professione: Studente ITIS *
* Email: mario.rossi@email.com *
====================================

Difficoltà: Principiante

Obiettivi: variabili, assegnazione multipla, type(), print(), commenti

Storie utente:

  • Lo script dichiara 5 variabili di tipo diverso
  • Per ogni variabile stampa: valore, tipo con type(), e una descrizione
  • Usa assegnazione multipla per almeno 2 variabili
  • Alla fine mostra quante variabili sono state dichiarate

Requisiti tecnici:

  • Almeno 5 tipi diversi (int, float, str, bool, None)
  • Assegnazione multipla
  • Commenti che spiegano ogni tipo

Difficoltà: Principiante

Obiettivi: int, float, casting, costanti, type()

Storie utente:

  • L’utente inserisce un valore numerico
  • Il programma lo converte in: intero, float, stringa, booleano
  • Mostra il tipo originale e il tipo convertito
  • Gestisci costanti per conversioni (es. PI per gradi→radianti)
  • Aggiungi un menu a scelta della conversione

Requisiti tecnici:

  • Casting tra tutti i tipi numerici
  • Costanti in MAIUSCOLO
  • Gestione errori base (se l’input non è numerico)

Difficoltà: Principiante

Obiettivi: enum, numeri, casting, costanti

Storie utente:

  • Definisci un enum Voto con valori: INSUFFICIENTE=0, SUFFICIENTE=6, BUONO=7, DISTINTO=8, OTTIMO=9, ECCELLENTE=10
  • Chiedi all’utente un numero (0-10)
  • Mostra il voto in lettere corrispondente
  • Calcola la media tra più voti inseriti
  • Usa costanti per i range di valutazione

Requisiti tecnici:

  • Enum con .name e .value
  • Ciclo per inserimento multiplo
  • Media calcolata come float

Difficoltà: Principiante

Obiettivi: stringhe, slicing, metodi stringa, f-strings, booleani

Storie utente:

  • L’utente inserisce una frase
  • Il programma mostra: lunghezza, prima/ultima lettera, versione MAIUSCOLA/minuscola
  • Conta quante vocali e consonanti ci sono
  • Dice se la frase è palindroma (True/False)
  • Mostra la frase al contrario
  • Conta quante parole ci sono

Requisiti tecnici:

  • Slicing per invertire la stringa
  • Metodi .upper(), .lower(), .split()
  • Almeno 3 valori booleani nel report
  • f-strings per formattare l’output

Difficoltà: Principiante

Obiettivi: stringhe, booleani, input, operatori logici

Storie utente:

  • L’utente inserisce una password
  • Il programma verifica che:
    • Sia lunga almeno 8 caratteri
    • Contenga almeno un numero
    • Contenga almeno una lettera maiuscola
    • Contenga almeno un carattere speciale (!@#$%&)
  • Mostra un report con tutti i controlli: ✅ o ❌
  • Solo se TUTTI i controlli passano → “Password sicura!”

Requisiti tecnici:

  • Operatori in e not in
  • Booleani con and / or
  • Ciclo per far riprovare l’utente

Esempio output:

=== VALIDATORE PASSWORD ===
Inserisci password: Ciao123
✅ Lunghezza ≥ 8: NO
✅ Contiene numero: SI
✅ Contiene maiuscola: SI
✅ Carattere speciale: NO
Risultato: PASSWORD DEBOLE ❌

Modulo 4 — Operatori e Controllo di Flusso

Section titled “Modulo 4 — Operatori e Controllo di Flusso”

Difficoltà: Principiante

Obiettivi: if/elif/else, loop, while, break, random, operatori

Storie utente:

  • Il computer genera un numero casuale tra 1 e 100
  • L’utente ha 7 tentativi per indovinarlo
  • Dopo ogni tentativo: “Troppo alto”, “Troppo basso” o “Hai indovinato!”
  • A ogni tentativo mostra quanti tentativi rimangono
  • Se finisci i tentativi, mostra il numero segreto
  • Usa operatore ternario per messaggi finali

Requisiti tecnici:

  • random.randint() per il numero segreto
  • while per il loop dei tentativi
  • break quando indovina
  • Operatore ternario per “Hai vinto!” / “Hai perso!”

Progetto 4.2: Calcolatrice con Menu e Cronologia

Section titled “Progetto 4.2: Calcolatrice con Menu e Cronologia”

Difficoltà: Principiante

Obiettivi: if/elif, match/case, loop, operatori, input

Storie utente:

  • Mostra un menu: 1. Somma 2. Sottrai 3. Moltiplica 4. Dividi 5. Cronologia 6. Esci
  • Chiedi due numeri all’utente
  • Esegui l’operazione scelta e mostra il risultato
  • Ogni operazione viene salvata in una lista di cronologia
  • Opzione 5 mostra tutte le operazioni fatte
  • Opzione 6 esce dal programma
  • Gestisci divisione per zero con if

Requisiti tecnici:

  • match/case per il menu (Python 3.10+)
  • Lista per la cronologia
  • Loop while infinito finché non si sceglie “Esci”

Progetto 5.1: Lista della Spesa Intelligente

Section titled “Progetto 5.1: Lista della Spesa Intelligente”

Difficoltà: Principiante

Obiettivi: liste, metodi liste, tuple, slicing

Storie utente:

  • L’utente può: aggiungere, rimuovere, visualizzare, ordinare, svuotare la lista
  • Ogni elemento è una tupla (prodotto, quantità, categoria)
  • Mostra la lista raggruppata per categoria
  • Usa slicing per mostrare solo i primi N elementi
  • Salva la lista in un file di testo

Requisiti tecnici:

  • Lista di tuple come struttura dati
  • .append(), .remove(), .sort(), .pop()
  • Slicing per visualizzazione parziale
  • Ciclo per iterare il menu

Progetto 5.2: Analisi Numeri con Comprensioni

Section titled “Progetto 5.2: Analisi Numeri con Comprensioni”

Difficoltà: Principiante-Intermedio

Obiettivi: liste, comprensioni di lista, slicing, tuple

Storie utente:

  • L’utente inserisce 10 numeri interi
  • Il programma calcola con comprensioni di lista:
    • Quadrati di ogni numero
    • Solo i numeri pari
    • Solo i numeri dispari
    • Numeri divisibili per 3
    • Numeri negativi (se presenti)
  • Trova il numero max, min e la media (con tuple)
  • Mostra la lista originale e quella invertita

Requisiti tecnici:

  • Almeno 5 comprensioni di lista diverse
  • Tuple per risultati multipli (min, max, media)
  • Slicing per invertire [::-1]

Difficoltà: Principiante-Intermedio

Obiettivi: dizionari, .keys(), .values(), .items(), .get()

Storie utente:

  • Menu: 1. Aggiungi contatto 2. Cerca contatto 3. Elimina contatto 4. Tutti i contatti 5. Esci
  • Ogni contatto ha: nome, telefono, email (usa dizionario annidato)
  • Cerca per nome (case-insensitive) o per telefono
  • Mostra tutti i contatti ordinati alfabeticamente
  • Usa .get() per non generare errori se il contatto non esiste

Requisiti tecnici:

  • Dizionario di dizionari
  • .items() per iterare
  • .get() con valore di default
  • sorted() per ordinamento

Difficoltà: Principiante-Intermedio

Obiettivi: set, unione, intersezione, differenza, dizionari

Storie utente:

  • Hai 3 classi di studenti (set con nomi)
  • Mostra: studenti unici di tutte le classi (unione)
  • Mostra: studenti in comune tra due classi (intersezione)
  • Mostra: studenti in una classe ma non nell’altra (differenza)
  • Aggiungi voti con dizionario (nome → voto)
  • Calcola la media della classe

Requisiti tecnici:

  • Set con |, &, -, ^
  • Dizionario per voto degli studenti
  • Iterazione su set e dict

Progetto 7.1: Biblioteca di Funzioni Matematiche

Section titled “Progetto 7.1: Biblioteca di Funzioni Matematiche”

Difficoltà: Intermedio

Obiettivi: funzioni, parametri, return, lambda, ricorsione

Storie utente:

  • Crea funzioni separate per:
    • fattoriale(n) — ricorsiva
    • fibonacci(n) — ricorsiva
    • e_primo(n) — True/False
    • somma_numeri(*args) — numero variabile parametri
  • Usa lambda per ordinare una lista di risultati
  • Menu per scegliere quale funzione testare
  • Usa valori di default nei parametri

Requisiti tecnici:

  • Almeno 1 funzione ricorsiva (fattoriale)
  • *args per parametri variabili
  • Lambda per ordinamento
  • Valori di default

Difficoltà: Intermedio

Obiettivi: lambda, map(), filter(), sorted(), funzioni

Storie utente:

  • Data una lista di numeri interi casuali:
    • Filtra solo i numeri pari (filter + lambda)
    • Calcola il quadrato di ognuno (map + lambda)
    • Ordina per cifra delle unità (sorted + lambda)
    • Raggruppa in pari e dispari
  • Stessa cosa con una lista di stringhe (lunghezza, iniziale, ecc.)
  • Mostra i risultati prima e dopo ogni operazione

Requisiti tecnici:

  • filter() con lambda
  • map() con lambda
  • sorted() con key=lambda
  • Almeno 4 lambda diverse

Difficoltà: Intermedio

Obiettivi: classi, init, self, metodi, attributi di classe/istanza

Storie utente:

  • Classe ContoBancario con:
    • titolare, saldo, numero_conto (auto-generato)
    • deposita(importo) — aggiunge soldi
    • preleva(importo) — toglie soldi (se saldo sufficiente)
    • trasferisci(destinazione, importo) — trasferisce tra conti
    • mostra_dettagli() — stampa info complete
  • Attributo di classe: tasso_interesse
  • Metodo di classe: modifica_tasso(nuovo_tasso)
  • Controlla saldo prima di ogni prelievo

Requisiti tecnici:

  • Classe con init e self
  • Attributi di istanza e di classe
  • Metodi di istanza
  • Gestione errori con if/else

Difficoltà: Intermedio

Obiettivi: classi, decoratori, closure

Storie utente:

  • Classe Personaggio con: nome, hp, attacco, difesa
  • Sottoclassi: Guerriero (più hp), Mago (più attacco), Arciere (più velocità)
  • Ogni personaggio ha attacca(nemico) che calcola danno
  • Usa un decoratore @log_combattimento che stampa ogni azione
  • Usa una closure per creare moltiplicatore_danno(fattore)
  • Ciclo di combattimento tra due personaggi

Requisiti tecnici:

  • Classi base e sottoclassi
  • Decoratore custom
  • Closure per modificatori di danno
  • Loop di gioco

Progetto 9.1: Catalogo Prodotti con Polimorfismo

Section titled “Progetto 9.1: Catalogo Prodotti con Polimorfismo”

Difficoltà: Intermedio-Avanzato

Obiettivi: polimorfismo, overloading operatori, docstring, type hints

Storie utente:

  • Classe base Prodotto con str, repr, eq
  • Sottoclassi: Libro (autore, pagine), Elettronica (garanzia_mesi), Abbigliamento (taglia)
  • Overload di add per sommare prezzi di due prodotti
  • Overload di lt per ordinare per prezzo
  • Polimorfismo: scheda_prodotto() restituisce info specifiche per ogni tipo
  • Type hints su tutti i metodi
  • Docstring completa per ogni classe/metodo

Requisiti tecnici:

  • str, eq, lt, add
  • Polimorfismo con metodo comune
  • Type hints (from typing import …)
  • Docstring in stile PEP257

Difficoltà: Intermedio

Obiettivi: introspezione, dir(), type(), isinstance(), hasattr(), getattr()

Storie utente:

  • Crea una funzione inspetta(oggetto) che mostra:
    • Tipo dell’oggetto
    • Lista di tutti gli attributi e metodi (dir)
    • Solo i metodi (callable)
    • Solo gli attributi (non callable)
    • Valore di attributi specifici
  • Testala con: int, str, list, dict, e una classe custom
  • Usa isinstance() per dire se è un tipo specifico

Requisiti tecnici:

  • dir(), type(), isinstance()
  • hasattr() e getattr()
  • callable() per distinguere metodi da attributi

Modulo 10 — Moduli, Libreria Standard, pip

Section titled “Modulo 10 — Moduli, Libreria Standard, pip”

Difficoltà: Intermedio

Obiettivi: moduli, json, datetime, os, with

Storie utente:

  • Crea un modulo report_generator.py
  • Funzioni:
    • crea_report(nome, dati) → crea file .json con timestamp
    • leggi_report(nome_file) → legge e stampa il report
    • list_report(cartella) → usa os per listare i file .json
    • elimina_report(nome_file) → cancella un report
  • Ogni report include: data creazione, autore, titolo, contenuto
  • Usa with per salvare/caricare file
  • Gestisci file non trovati

Requisiti tecnici:

  • Modulo separato (file .py)
  • json.dumps() con indent=2
  • datetime.now().isoformat()
  • os.listdir(), os.path.exists()
  • with open()

Progetto 10.2: Task Manager (versione base)

Section titled “Progetto 10.2: Task Manager (versione base)”

Difficoltà: Intermedio

Obiettivi: venv, pip, requests, requirements.txt

Storie utente:

  • Crea un ambiente virtuale per il progetto
  • Installa requests via pip
  • Crea requirements.txt con pip freeze
  • Il programma prende dati da un’API pubblica (es. JSONPlaceholder)
  • Salva i dati in un file JSON locale
  • Mostra statistiche sui dati ottenuti

Requisiti tecnici:

  • python -m venv
  • pip install requests
  • pip freeze > requirements.txt
  • requests.get() per chiamata API
  • Salvataggio JSON

Progetto 11.1: Calcolatrice Robusta con CLI

Section titled “Progetto 11.1: Calcolatrice Robusta con CLI”

Difficoltà: Intermedio-Avanzato

Obiettivi: eccezioni, try/except/else/finally, raise, argparse

Storie utente:

  • Usa argparse per accettare: --a NUM --b NUM --op OPERATORE
  • Operatori supportati: add, sub, mul, div, pow
  • Gestisci TUTTE le eccezioni:
    • ValueError se gli argomenti non sono numeri
    • ZeroDivisionError se b=0 e op=div
    • ValueError personalizzato se operatore sconosciuto
  • finally stampa sempre “Operazione completata”
  • Se —verbose mostra input e output dettagliati

Esempio:

Terminal window
python calcolatrice.py --a 10 --b 0 --op div --verbose
# Errore: divisione per zero!
# Operazione completata

Requisiti tecnici:

  • argparse con tipi e scelte
  • try/except/else/finally
  • raise per errori personalizzati
  • Verbose mode

Difficoltà: Intermedio

Obiettivi: debugging, logging, pdb, eccezioni

Storie utente:

  • Un programma che INTENZIONALMENTE contiene 5 bug
  • Lo studente deve trovarli e fixarli usando:
    • print debugging (commenti # DEBUG: …)
    • logging a file (logging.basicConfig)
    • pdb.set_trace() per ispezionare variabili
  • Ogni bug fixato va documentato con un commento
  • Il programma finale deve funzionare correttamente

Bug da inserire:

  1. Divisione per zero
  2. Indice lista fuori range
  3. Variabile non definita
  4. Type mismatch
  5. Loop infinito (condizione sbagliata)

Requisiti tecnici:

  • logging con livelli (DEBUG, INFO, ERROR)
  • pdb.set_trace() in punti strategici
  • Gestione eccezioni mirata

Difficoltà: Avanzato

Obiettivi: TUTTI i concetti del corso integrati

Storie utente:

  • Gestione catalogo: Aggiungi, rimuovi, modifica, lista prodotti
  • Carrello: Aggiungi/rimuovi prodotti, vedi totale
  • Utenti: Registrazione e login (salvati su file)
  • Ordini: Creazione ordine, cronologia ordini
  • Persistenza: Tutti i dati in file JSON
  • CLI: Argparse per tutti i comandi

Struttura modulare:

ecommerce/
├── main.py ← entry point (argparse)
├── models.py ← classi Prodotto, Utente, Ordine
├── manager.py ← classe EcommerceManager
├── storage.py ← carica/salva JSON
├── utils.py ← funzioni di utilità
└── requirements.txt ← dipendenze

Comandi CLI:

Terminal window
python main.py prodotti list
python main.py prodotti add --nome "Mouse" --prezzo 25.99
python main.py carrello add --prodotto-id 1 --quantita 2
python main.py carrello show
python main.py ordini crea
python main.py ordini storico --utente-id 1

Requisiti tecnici:

  • OOP con classi multiple
  • Moduli separati
  • Persistenza JSON
  • argparse CLI
  • Gestione eccezioni
  • PEP8
  • Type hints

Progetto 12.2: Analizzatore di File di Log

Section titled “Progetto 12.2: Analizzatore di File di Log”

Difficoltà: Avanzato

Obiettivi: TUTTI i concetti: regex, file I/O, datetime, analisi dati

Storie utente:

  • Carica un file di log (formato Apache/nginx o custom)
  • Funzionalità:
    • Conta righe totali, errori, warning, info
    • Trova tutti gli IP unici
    • Trova le ore di picco (quante richieste per ora)
    • Filtra per livello (ERROR, WARNING, INFO)
    • Esporta statistiche in JSON
    • Genera report di riepilogo

Esempio formato log:

2026-06-24 10:15:30 ERROR 192.168.1.1 - Connection timeout
2026-06-24 10:16:45 INFO 10.0.0.2 - User login successful
2026-06-24 10:17:00 WARNING 192.168.1.1 - High memory usage

Comandi CLI:

Terminal window
python log_analyzer.py --file server.log --stats
python log_analyzer.py --file server.log --livello ERROR
python log_analyzer.py --file server.log --export report.json
python log_analyzer.py --file server.log --ore-picco

Requisiti tecnici:

  • re (regex) per parsing log
  • datetime per analisi temporale
  • collections.Counter per conteggi
  • json per esportazione
  • argparse per CLI
  • OOP per organizzazione