venerdì 31 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 4 Introduzione alle interfacce grafiche (GUI)

 


🎨 Introduzione alle interfacce grafiche (GUI)

📌 Contenuti del Modulo:

  • Differenze tra interfacce testuali e grafiche: le GUI migliorano l'usabilità rispetto a CLI, semplificando l'interazione utente.
  • Librerie GUI per Python: introduzione a Tkinter, sia base che avanzato, per realizzare finestre, pulsanti e interazioni visive.
  • Struttura di una finestra: i principali widget (Button, Entry, Label), gestione layout (pack/grid) e gestione degli eventi (bind, command).
  • Design usabile e accessibile: progettare interfacce inclusive, chiare, con attenzione a colori, contrasto e leggibilità.

🛠️ Attività pratiche:

  • Creare GUI per i progetti realizzati, come Taskmaster (es. gestione attività).
  • Realizzare una mini app con pulsanti, input testuali, etichette e liste dinamiche.
  • Personalizzare la grafica: palette colori, font leggibili, icone intuitive.

 

🧪 Test interattivo – Metti alla prova le tue conoscenze!

1. Quale tra queste librerie Python è usata per costruire GUI?

2. Qual è il ruolo di un widget in una GUI?

3. Quale metodo in Tkinter permette di inserire un bottone in una finestra?

giovedì 30 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 3 Applicazioni scolastiche creative e sociali


Applicazioni scolastiche creative e sociali

📚 Contenuti formativi

🔸 Idee per progetti didattici

Applicazioni che aiutano nello studio, nella memorizzazione o nella risoluzione di problemi scolastici.

Esempi pratici:

  • MathTrainer: app che propone esercizi di calcolo a tempo.
  • GrammaFix: app che genera frasi sbagliate e chiede di correggerle.
  • QuizMaster: quiz a risposta multipla personalizzabili dai docenti.

🔸 App creative

App che stimolano l’immaginazione e la produzione personale.

Esempi pratici:

  • Storia a Sorpresa: generatore casuale di storie con input (personaggio + luogo + oggetto).
  • BeatBox Junior: compositore musicale base dove si combinano loop audio.
  • Emoji Comic: crea mini fumetti con emoji e didascalie.

🔸 App sociali e civiche

Strumenti digitali per affrontare piccoli problemi della quotidianità o partecipare attivamente alla vita comunitaria.

Esempi pratici:

  • EcoMemo: promemoria per la raccolta differenziata del giorno.
  • PharmaAlert: notifica automatica per ricordare l’assunzione dei farmaci.
  • VolontApp: registro attività di volontariato (es. ore svolte, tipo d'intervento, badge motivazionali).

🛠️ Attività operative

🧠 1. Brainstorming guidato per la scelta del progetto

Obiettivo: stimolare la creatività e definire un’idea utile o divertente da sviluppare.

Metodo:

  • Mostrare alcuni esempi (vedi sopra).
  • Fare domande guida:
    • Quale problema vorresti risolvere?
    • Ti piacerebbe aiutare qualcuno con un’app?
    • Quale app ti piacerebbe usare a scuola?

Strumento suggerito: lavagna condivisa (fisica o online) per raccogliere le idee.


🧩 2. Progettazione partecipata (modello canvas semplificato)

Mini Canvas Didattico:

Campo Domanda guida
Nome App Come si chiama la tua app?
Problema Che problema risolve?
Utenti Chi la userà? (studenti, insegnanti, anziani…)
Funzioni principali Cosa fa l’app? Quali sono le schermate?
Tecnologia In cosa sarà realizzata? (Scratch, AppInventor, Python…)
Prototipo Hai un disegno, una bozza su carta o una versione testabile?

💻 3. Sviluppo e condivisione

A seconda del livello degli studenti, il progetto può essere:

  • un mockup su carta, con descrizione delle schermate.
  • un prototipo su AppInventor/Scratch/Python GUI.
  • una presentazione interattiva, anche senza codice.

Condivisione finale:

  • Presentazione a compagni o genitori.
  • Pubblicazione online in uno spazio sicuro (blog scolastico, Google Drive, Canva linkabile).
  • Condivisione tramite QR code generato dall’app stessa.

🧪 Test ed esercizi

Test a scelta multipla – "Conosci le App Didattiche?"

  1. Qual è la funzione principale di una “App Civica”?

    • a) Fare calcoli matematici
    • b) Aiutare nei giochi
    • c) Supportare comportamenti utili alla comunità
    • d) Sostituire l’insegnante
      → ✅ Risposta corretta: c
  2. Qual è un buon esempio di app creativa?

    • a) Quiz sulla grammatica
    • b) Generatore automatico di storie
    • c) App per studiare scienze
    • d) Calcolatrice finanziaria
      → ✅ Risposta corretta: b
  3. A cosa serve il Canvas semplificato?

    • a) Scrivere il codice
    • b) Valutare l'app prima della vendita
    • c) Pianificare l'app in modo semplice e visuale
    • d) Imparare il design industriale
      → ✅ Risposta corretta: c

🎲 Esercizio finale – Progetta la tua App

Chiedi agli studenti di completare la seguente traccia:

  • Il nome della mia app è: ____________
  • Serve per: ___________________________________________________
  • La useranno: _________________________________________________
  • Le funzioni principali sono: ___________________________________
  • Il prototipo lo farò con: ( ) Carta ( ) Scratch ( ) AppInventor ( ) Altro: ______
  • L'ho già disegnata? ( ) Sì ( ) No

💡 Se disponibile, si può usare uno strumento di prototipazione visuale gratuito come Marvel o Figma (modalità base).


🧭 Conclusione e riflessione

Domande guida per riflettere:

  • Cosa hai scoperto progettando un’app?
  • È stato più difficile avere l’idea o realizzarla?
  • Hai collaborato con qualcuno? Come?

“Le app non sono solo strumenti: sono idee messe in pratica. Progettarle è come raccontare una storia… ma con interazione!”


Se vuoi, posso fornirti anche una versione compatta per Blogger o una scheda valutativa per il docente. Fammi sapere!

mercoledì 29 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 2 Il caso studio “Taskmaster” ideazione sviluppo testing


Il caso studio “Taskmaster”: ideazione, sviluppo, testing


📚 Contenuti teorici

1. Cos’è “Taskmaster”
Taskmaster è un’applicazione progettata per aiutare gli utenti a organizzare le proprie attività quotidiane in modo semplice ed efficiente. Si tratta di un task manager personale sviluppato in Python, che integra:

  • Programmazione orientata agli oggetti (OOP)
  • Interfaccia grafica utente (GUI) con Tkinter o PyQt
  • Gestione dati strutturata (salvataggio, caricamento, ordinamento)

2. Funzionalità principali

  • Aggiunta di una nuova attività
  • Modifica delle attività
  • Eliminazione
  • Ordinamento per priorità o scadenza
  • Visualizzazione della lista
  • Salvataggio/caricamento da file .json

3. Integrazione concetti di OOP

  • Classe Task: rappresenta un’attività
  • Classe TaskManager: gestisce la lista di attività
  • Metodi: aggiungi, modifica, elimina, ordina, salva, carica

4. Interfaccia grafica (GUI)

Con Tkinter, è possibile creare:

  • Input box per titolo, descrizione, scadenza
  • Pulsanti per le azioni principali
  • Area di visualizzazione elenco attività
  • Messaggi di conferma o errore

🛠️ Attività pratiche

  1. Progettazione delle classi

    • Task(titolo, descrizione, scadenza)
    • TaskManager() → lista di Task
  2. Progettazione dell’interfaccia

    • Layout con pulsanti e campi di input
    • Eventi collegati alle funzioni OOP
  3. Testing con casi reali

    • Aggiungere 3 task (es. “Comprare latte”, “Studiare”, “Chiamare nonna”)
    • Modificare un task (correggere la scadenza)
    • Ordinare i task per scadenza
  4. Salvataggio su file JSON

    • Esportazione e importazione della lista

🧪 TEST DI VERIFICA

1. Qual è lo scopo principale del progetto Taskmaster?
A) Creare un videogioco
B) Gestire e organizzare attività quotidiane
C) Simulare un’interfaccia bancaria
D) Compilare documenti PDF

2. Quali concetti di programmazione sono fondamentali per Taskmaster?
A) Ricorsione e algoritmi genetici
B) OOP, GUI e gestione file
C) Blockchain e intelligenza artificiale
D) Reti neurali e API REST

3. Cosa rappresenta una classe in OOP?
A) Un tipo di funzione
B) Un database relazionale
C) Un modello per creare oggetti
D) Un file CSV

4. Quale modulo Python viene usato per la GUI in questo progetto?
A) Matplotlib
B) TensorFlow
C) Tkinter
D) Pandas

5. In che formato vengono salvati i dati in uscita?
A) .docx
B) .xlsx
C) .json
D) .mp4


✅ RISPOSTE TEST

  1. B
  2. B
  3. C
  4. C
  5. C


martedì 28 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 1 Project Work: costruire un programma con tracce guidate

🎯 Obiettivi del modulo

  • Applicare concretamente le conoscenze acquisite nei moduli precedenti.
  • Acquisire competenze nella progettazione, sviluppo e testing di un'applicazione software.
  • Sviluppare capacità di collaborazione, organizzazione del lavoro, gestione del tempo e dei ruoli.
  • Familiarizzare con strumenti di supporto alla programmazione: diagrammi di flusso, pseudocodice, debugging.

📚 Contenuti del modulo

1. Analisi del problema e stesura dei requisiti

  • Cosa vuol dire “analizzare un problema”: esigenze, utenti finali, contesto d’uso.
  • Come si scrive un documento dei requisiti: funzioni essenziali, optional, vincoli.
  • Esempi: diario digitale, quiz interattivo, calcolatrice evoluta.

2. Scelta del linguaggio e degli strumenti

  • Come scegliere il linguaggio (es. Python per semplicità e sintassi leggibile).
  • IDE e ambienti consigliati: Thonny, Replit, Visual Studio Code, Jupyter.
  • Librerie utili (Tkinter per GUI, random, datetime, math).

3. Progettazione e pianificazione

  • Pseudocodice: che cos’è e come scriverlo.
  • Diagrammi di flusso: come rappresentano visivamente la logica.
  • Divisione del lavoro in fasi: input, elaborazione, output, salvataggio dati, ecc.

4. Implementazione graduale

  • Sviluppo incrementale: partire dal nucleo minimo funzionante.
  • Debugging continuo: testare ogni passaggio.
  • Versioni successive: aggiunta di funzioni extra, miglioramenti grafici, validazione input.

🛠️ Attività pratiche

🔹 Attività 1: Tracce guidate (a scelta)

Ogni traccia può essere proposta individualmente o in gruppi.

A. Il Diario Digitale

  • L’utente può scrivere una nuova nota, rileggere le note passate, cancellare una voce.
  • Usa data/ora per indicizzare le note.
  • Salva le note su file .txt.

B. Il Gioco Quiz

  • Presenta una domanda e 3 risposte possibili.
  • Valuta la risposta e dà un punteggio finale.
  • Funzioni aggiuntive: tempo limite, livelli di difficoltà, classifica locale.

C. Calcolatrice Intelligente

  • Operazioni base: somma, sottrazione, moltiplicazione, divisione.
  • Funzioni avanzate: radice quadrata, potenza, media di n numeri.
  • Versione con GUI: interfaccia semplice con bottoni (opzionale, per avanzati).

🔹 Attività 2: Lavoro in gruppo (facoltativo per contesti formativi)

  • Ogni gruppo sceglie un progetto tra quelli proposti o ne inventa uno.
  • I ruoli:
    • Developer: scrive il codice.
    • Tester: verifica ogni funzione, registra i bug.
    • Designer: cura l’interfaccia (testuale o grafica).
    • Scrittore (opzionale): documenta il progetto.
  • Riunioni periodiche di revisione con feedback del tutor.

🔹 Attività 3: Diario di bordo

  • Ogni partecipante tiene un diario del progetto: idee, problemi, soluzioni trovate.
  • Alla fine, ogni gruppo o individuo presenta il progetto e il percorso fatto.

🧪 Esercizi di supporto

Esercizio 1 – Analisi dei requisiti (per tutti i progetti)

Compila questo schema per uno dei tre progetti proposti:

  • Nome del progetto: ___________
  • Obiettivo principale: ___________
  • Utente tipo: ___________
  • Funzionalità richieste: ___________
  • Requisiti opzionali: ___________
  • Limiti tecnici (es. solo testo, no database): ___________

Esercizio 2 – Scrivi il pseudocodice di una funzionalità

Esempio: pseudocodice per "inserisci una nuova nota nel diario"

Inizio
   Chiedi all’utente di inserire il testo della nota
   Ottieni la data e ora attuali
   Apri il file delle note in modalità scrittura
   Scrivi la data, ora e testo nel file
   Chiudi il file
   Mostra “Nota salvata con successo”
Fine

Esercizio 3 – Crea un diagramma di flusso

Rappresenta con un diagramma la logica di una delle funzioni chiave (es. verifica risposta nel quiz, o scelta dell’operazione nella calcolatrice).


Test di autovalutazione finale

1. Qual è la funzione di un diagramma di flusso in fase progettuale?

a. Aiuta a scrivere direttamente il codice
b. Mostra visivamente la logica e i passaggi di un processo ✅
c. È obbligatorio per tutti i progetti
d. Serve solo ai designer


2. Qual è la differenza tra pseudocodice e codice vero?

a. Nessuna, sono sinonimi
b. Il pseudocodice è scritto in linguaggio naturale strutturato ✅
c. Il codice vero è più semplice
d. Il pseudocodice funziona anche se non lo esegui


3. Cos’è il “debugging”?

a. Un tipo di programma per costruire interfacce
b. L’eliminazione dei bug (errori) nel codice ✅
c. La scrittura automatica di funzioni
d. La scelta del linguaggio


4. Cosa indica il termine “implementazione incrementale”?

a. Sviluppare il programma tutto in una volta
b. Iniziare da funzioni facili e aggiungere poi quelle complesse ✅
c. Sviluppare una versione per ciascun utente
d. Usare più linguaggi nello stesso progetto


📈 Valutazione finale

  • Presentazione del progetto (orale o scritta)
  • Funzionalità del codice (verifica tutor o test automatici)
  • Organizzazione del lavoro e documentazione
  • Capacità di debugging e problem solving


lunedì 27 gennaio 2025

Corso di Programmazione Strutturata e OOP: 8 Test di un programma (in preparazione)

Test di un programma

Contenuti:

  • Cos’è un test e perché è fondamentale

  • Test manuale e test automatico (unit test)

  • Scrivere test per funzioni e classi

  • Validazione del software: casi di input corretti e non previsti

Attività:

  • Scrivere casi di test per funzioni esistenti

  • Introdurre il modulo unittest di Python

  • Progetto finale: costruzione, test e validazione di una mini-app completa

domenica 26 gennaio 2025

Corso di Programmazione Strutturata e OOP: 7 Design dell’interfaccia utente (in preparazione)

Design dell’interfaccia utente

Contenuti:

  • Concetti base di UI/UX

  • Interfacce testuali (console), grafiche (GUI) e web

  • Librerie grafiche per Python (Tkinter, PyGame, PyQt)

  • Progettare un'interfaccia semplice, usabile e coerente

Attività:

  • Creare una calcolatrice GUI con Tkinter

  • Sviluppare un menù interattivo da console

  • Analizzare e migliorare un’interfaccia esistente

sabato 25 gennaio 2025

Corso di Programmazione Strutturata e OOP: 6 IDE e ambienti di sviluppo (in preparazione)

IDE e ambienti di sviluppo

Contenuti:

  • Cos’è un IDE e perché usarlo

  • Confronto tra IDE: Thonny, VS Code, PyCharm, Replit

  • Struttura di un progetto software in ambiente professionale

  • Uso integrato di editor, terminale, debugger, versionamento

Attività:

  • Configurare un ambiente di sviluppo completo

  • Progetto guida: creare e gestire un'applicazione base in VS Code

  • Introduzione al controllo di versione con Git (concetti base)

venerdì 24 gennaio 2025

Corso di Programmazione Strutturata e OOP: 5 Gestione della memoria

 


💾 Gestione della Memoria

Quando programmiamo, i dati che usiamo devono essere memorizzati da qualche parte. La memoria di un computer è il luogo dove i dati vengono temporaneamente conservati durante l’esecuzione di un programma.

Ma come funziona davvero questa memoria? Che differenza c’è tra usare una variabile o una struttura dati? Cosa significa “occupare spazio” e perché alcuni programmi sono più “pesanti” di altri?

In questo modulo entriamo nel cuore della gestione della memoria nei programmi e impariamo a scrivere codice più efficiente.

📌 Cos'è la memoria in un programma

Quando crei una variabile, ad esempio x = 5, il tuo computer riserva un piccolo spazio di memoria per contenere il numero 5. Più complesso è il dato, più memoria serve. Per esempio, una lista o un dizionario occupano più spazio di una semplice variabile intera.

📦 Variabili, strutture dati e spazio occupato

Le variabili sono come scatole con un’etichetta (il nome) e un contenuto (il valore). Le strutture dati come liste, array e dizionari sono contenitori più complessi che possono ospitare più valori insieme. Ogni elemento richiede spazio e, se non gestito bene, può rallentare l’intero programma.

🧹 Garbage Collection in Python

Python ha un meccanismo automatico chiamato Garbage Collection che si occupa di liberare la memoria non più utilizzata. Ad esempio, se crei una lista ma poi non la usi più, Python può eliminarla per risparmiare spazio. Tuttavia, non è sempre perfetto: il codice inefficiente può comunque generare sprechi.

⚠️ Errori comuni
  • Variabili non inizializzate: usare una variabile prima di darle un valore causa errori.
  • Sovrascrittura: riutilizzare lo stesso nome per una variabile può causare confusione e bug.
🔬 Attività pratiche
  • Visualizzazione: usare strumenti grafici come pythontutor.com per osservare cosa accade alla memoria durante l’esecuzione.
  • Analisi comparata: confrontare due versioni di codice – una che occupa troppa memoria e una ottimizzata – e misurarne le prestazioni.
  • Laboratorio: scrivere un piccolo programma in Python che gestisca correttamente liste e variabili per massimizzare la velocità e ridurre l’uso della RAM.

🧪 Verifica le tue conoscenze

1. Cosa fa la garbage collection in Python?

2. Cosa succede se usi una variabile non inizializzata?

3. Quale delle seguenti strutture occupa in genere più memoria?

Punteggio: 0/3

giovedì 23 gennaio 2025

Corso di Programmazione Strutturata e OOP: 4 Debugging trovare e correggere errori

 


🔧 DEBUGGING: TROVARE E CORREGGERE ERRORI

Contenuti:

  • Tipi di errori: comprendere la differenza tra errori sintattici (es. dimenticare una parentesi), errori logici (il programma gira ma dà risultati errati) ed errori di runtime (es. divisione per zero).
  • Strategie di debugging: isolare le funzioni, usare stampe di controllo, testare pezzi di codice uno alla volta.
  • Strumenti di debug: come usare il debugger nei moderni IDE (Thonny, IDLE, VS Code) per mettere breakpoints e osservare i valori delle variabili in tempo reale.
  • Messaggi di errore: imparare a leggere e interpretare correttamente i traceback Python per risalire all’origine del problema.

Attività didattiche:

  • 🛠️ Correggere un programma con errori deliberati: osserva cosa succede e quali messaggi vengono generati.
  • ✍️ Annotare bug e spiegare le correzioni: utile per documentare il proprio processo di debug.
  • 💻 Debug assistito: apri il codice con un IDE (Thonny o VS Code) e osserva le variabili passo passo.

🎯 TEST INTERATTIVO – Sei un vero debugger?

🧩 1. Quale tipo di errore viene generato da questo codice?
print("Ciao
Errore sintattico
Errore logico
Errore di runtime
🔍 2. Cosa indica un errore “IndexError: list index out of range”?
Una variabile non è definita
Si accede a un elemento che non esiste nella lista
Una funzione non è stata chiamata correttamente
🧠 3. In quale caso serve usare il debugger?
Quando il codice gira ma dà risultati inattesi
Quando non si conosce il nome di una libreria
Quando si scrive pseudocodice

💡 Suggerimento finale:
Quando fai debugging, non inseguire l’errore: *fermati, osserva, descrivi.* Ogni errore è un indizio!

#Debugging #Python #Coding #DidatticaDigitale

mercoledì 22 gennaio 2025

Corso di Programmazione Strutturata e OOP: 3 Ereditarietà incapsulamento polimorfismo


Ereditarietà, Incapsulamento, Polimorfismo

📚 Contenuti teorici


🔹 1. Ereditarietà

È il meccanismo per cui una classe figlia (o derivata) può ereditare attributi e metodi da una classe madre (o base).

Esempio semplice in Python:

class Veicolo:
    def __init__(self, marca):
        self.marca = marca

    def accendi_motore(self):
        print("Motore acceso")

class Auto(Veicolo):  # Auto eredita da Veicolo
    def apri_portiere(self):
        print("Portiere aperte")

mia_auto = Auto("Fiat")
mia_auto.accendi_motore()   # Metodo ereditato
mia_auto.apri_portiere()    # Metodo della classe Auto

🧩 Osservazione: Auto eredita tutto da Veicolo ma può aggiungere comportamenti nuovi o sovrascrivere quelli esistenti.


🔹 2. Incapsulamento

Significa nascondere i dettagli interni e proteggere i dati usando modificatori di accesso e metodi per leggere/scrivere valori.

Esempio in Python con getter e setter:

class ContoBancario:
    def __init__(self):
        self.__saldo = 0  # Attributo privato

    def deposita(self, importo):
        if importo > 0:
            self.__saldo += importo

    def get_saldo(self):
        return self.__saldo

conto = ContoBancario()
conto.deposita(100)
print(conto.get_saldo())  # Accesso controllato

🔐 Nota: L’attributo __saldo è privato, accessibile solo tramite i metodi pubblici. Questo è l’incapsulamento.


🔹 3. Polimorfismo

Con il polimorfismo, più classi possono usare lo stesso nome di metodo, ma con comportamenti diversi.

Esempio con metodo muoviti() sovrascritto:

class Veicolo:
    def muoviti(self):
        print("Il veicolo si muove")

class Bicicletta(Veicolo):
    def muoviti(self):
        print("La bicicletta pedala")

class Auto(Veicolo):
    def muoviti(self):
        print("L'auto accelera")

# Polimorfismo:
veicoli = [Bicicletta(), Auto()]
for v in veicoli:
    v.muoviti()  # Comportamento specifico della sottoclasse

👥 Osservazione: Lo stesso metodo muoviti() si comporta diversamente in base al tipo di oggetto.


⚙️ 4. Perché sono importanti questi concetti

  • Modularità: il codice è organizzato meglio.
  • Riutilizzabilità: si scrive meno codice duplicato.
  • Flessibilità: si possono cambiare singole parti senza riscrivere tutto.
  • Manutenibilità: più facile da leggere e modificare.

🧪 Attività pratiche


1. Crea una gerarchia di classi

Obiettivo: progettare classi che sfruttano ereditarietà.

Esempio:

class Animale:
    def parla(self):
        print("L’animale fa un suono")

class Cane(Animale):
    def parla(self):
        print("Il cane abbaia")

class Gatto(Animale):
    def parla(self):
        print("Il gatto miagola")

animali = [Cane(), Gatto()]
for a in animali:
    a.parla()

🧠 Sfida: aggiungi una terza sottoclasse (Es. Mucca) che implementa parla().


2. Incapsula gli attributi

Crea una classe Studente con nome e voto. Proteggi il voto e usa metodi per modificarlo solo se il valore è compreso tra 0 e 10.

class Studente:
    def __init__(self, nome):
        self.nome = nome
        self.__voto = 0

    def set_voto(self, valore):
        if 0 <= valore <= 10:
            self.__voto = valore

    def get_voto(self):
        return self.__voto

3. Polimorfismo in azione

Scrivi una funzione saluta(animal) che chiama parla() su qualsiasi tipo di animale.

def saluta(animal):
    animal.parla()

saluta(Cane())   # "Il cane abbaia"
saluta(Gatto())  # "Il gatto miagola"

Test di verifica


✍️ Domande a risposta multipla

1. Qual è lo scopo dell’incapsulamento? A. Accelerare il codice
B. Proteggere i dati → ✅
C. Rendere il codice più lungo
D. Fare debug

2. Quale simbolo in Python indica un attributo privato?
A. #
B. *
C. __ → ✅
D. @

3. Il polimorfismo permette di...
A. Scrivere funzioni molto complesse
B. Usare lo stesso metodo in più modi → ✅
C. Copiare classi
D. Moltiplicare variabili


🤖 Quiz interattivo a completamento

Completa il metodo parla nella classe Gatto per far stampare “Miagolio!”

class Gatto(Animale):
    def parla(self):
        ____________

Soluzione: print("Miagolio!")


🔄 Attività di riepilogo

🎲 Gioco: Chi eredita cosa?

  • Mostra una lista di metodi e classi.
  • Chiedi: “Quali classi hanno accesso al metodo X?”

🧩 Puzzle OOP:

  • Dai istruzioni mischiate (metodi, classi, relazioni).
  • Gli studenti devono ricostruire la gerarchia.

martedì 21 gennaio 2025

Corso di Programmazione Strutturata e OOP: 2 introduzione alla programmazione ad oggetti (OOP)


👩‍💻 Oggetti, classi e metodi: introduzione alla programmazione ad oggetti (OOP)

📌 Contenuti
  • Il paradigma a oggetti: una filosofia di programmazione centrata su oggetti autonomi che interagiscono tra loro.
  • Perché la OOP: migliora l’organizzazione del codice, favorisce il riuso e rende più facile la manutenzione.
  • Procedurale vs OOP: nel modello procedurale si usano funzioni e dati separati; nella OOP, dati e comportamenti sono racchiusi negli oggetti.
  • Classi e istanze: una classe è un modello generale, un'istanza è un oggetto concreto creato da quel modello.
  • Attributi e metodi: gli attributi definiscono le proprietà, i metodi definiscono le azioni.
🧪 Attività pratiche
  • 1. Classe Animale:
    Definisci una classe Animale con attributi come nome, specie e suono. Poi crea istanze come "cane", "gatto", "mucca".
    Esempio:
    class Animale:
        def __init__(self, nome, specie, suono):
            self.nome = nome
            self.specie = specie
            self.suono = suono
    
        def faiVerso(self):
            return f"{self.nome} dice {self.suono}"
    
    cane = Animale("Fido", "Cane", "bau")
    print(cane.faiVerso())
  • 2. Interazione tra oggetti:
    Crea una classe Giocattolo che interagisce con un Animale (es. cane gioca con la palla).
  • 3. Mondo reale:
    Rappresenta il concetto di Studente con attributi come nome, età, classe e metodi come “studia()”, “sostieneEsame()”.
    Fai lo stesso con Libro o ContoBancario.
📋 Test di verifica
1. Cosa rappresenta una classe nella OOP?
A) Una funzione specifica
B) Un tipo di dato primitivo
C) Un modello per creare oggetti ✅

2. Quale tra questi è un esempio di attributo?
A) studia()
B) nome
C) return

3. Quale tra queste è una differenza tra OOP e programmazione procedurale?
A) Nella OOP non esistono funzioni
B) La OOP separa dati e comportamenti
C) La OOP racchiude dati e metodi negli oggetti ✅

4. Se creo un oggetto “pippo = Animale('Pippo', 'Pappagallo', 'ciao')”, cosa rappresenta “pippo”?
A) Una classe
B) Un metodo
C) Un’istanza ✅

5. Cosa fa il metodo __init__?
A) È un costruttore, inizializza gli oggetti ✅
B) Elimina una classe
C) Chiude il programma

🔎 Risposte corrette: 1C – 2B – 3C – 4C – 5A 🎯 Obiettivo didattico:
Acquisire i concetti base della programmazione orientata agli oggetti attraverso esempi concreti, simulazioni ed esercizi. 💬 Suggerimento:
Per stimolare la riflessione, chiedi agli studenti di inventare una propria classe originale (es. Videogioco, Pianeta, Ingrediente) e mostrarne attributi e metodi in un disegno o schema.

lunedì 20 gennaio 2025

Corso di Programmazione Strutturata e OOP: 1 modelli e applicazioni

🧠 Modulo – Programmazione strutturata: modelli e applicazioni

Obiettivo generale: Apprendere i concetti fondanti della programmazione strutturata, comprendere l’importanza della leggibilità e modularità del codice, ed esercitarsi nella scrittura di semplici programmi ben organizzati.


📚 Contenuti

🔹 Cos’è la programmazione strutturata

La programmazione strutturata è una metodologia che prevede la costruzione del codice seguendo tre strutture fondamentali:

  • Sequenza: esecuzione ordinata di istruzioni una dopo l’altra.
  • Selezione: scelta tra due o più percorsi tramite condizioni (if, else, switch...).
  • Iterazione: ripetizione di un blocco di istruzioni (for, while, do while...).

Questi costrutti permettono di scrivere programmi chiari, manutenibili, prevedibili.

🔹 Suddivisione del programma in moduli e sottoprogrammi

  • Un modulo è una porzione di codice indipendente con una funzione ben definita.
  • Un sottoprogramma può essere una funzione o procedura, utile per evitare ripetizioni.
  • Ogni programma dovrebbe essere decomponibile in blocchi logici e riutilizzabili.

🔹 Buone pratiche di scrittura del codice

  • Indentazione: rientri coerenti migliorano la leggibilità.
  • Commenti: spiegano cosa fa il codice, per sé e per gli altri.
  • Nomenclatura significativa: usare nomi chiari per variabili e funzioni.
  • Evita ridondanze: applica il principio DRY (Don’t Repeat Yourself).

🎯 Attività pratiche

✏️ Attività 1 – Ristruttura il codice

Consegna uno spezzone di codice scritto in modo confuso e chiedi di:

  1. Correggere l’indentazione.
  2. Rinominare variabili in modo più significativo.
  3. Inserire commenti esplicativi.

🔧 Esempio prima:

a=10
b=20
if a>b:
print("a maggiore")
else:
print("b maggiore")

Esempio dopo:

# Confronta due numeri e stampa il maggiore
num1 = 10
num2 = 20

if num1 > num2:
    print("num1 è maggiore")
else:
    print("num2 è maggiore")

🧩 Attività 2 – Costruzione di mini-programmi modulati

Progetta un semplice programma a scelta (es. calcolo media voti, convertitore di temperature, somma di numeri pari...) usando almeno:

  • 1 struttura di selezione
  • 1 ciclo
  • 1 funzione

Esempio:
Funzione che calcola se un numero è primo
(utilizza def, for, if, return)


🧠 Attività 3 – Decomposizione logica di un problema

Dai un problema reale (es. organizzare una giornata scolastica, cucinare una ricetta, prenotare un volo) e chiedi di:

  • Identificare le azioni in sequenza
  • Dove ci sono scelte
  • Dove ci sono ripetizioni

Esempio: “Organizza la giornata di scuola”

  • Sequenza: svegliarsi, fare colazione, vestirsi
  • Selezione: se piove, prendere l’ombrello
  • Iterazione: per ogni ora scolastica, seguire la lezione

Test di verifica finale

Domande a scelta multipla

  1. Quale delle seguenti NON è una struttura base della programmazione strutturata?
    a) Sequenza
    b) Ricorsione
    c) Iterazione
    d) Selezione

  2. Cosa si intende per "modulo" in un programma?
    a) Una parte casuale del codice
    b) Una sezione che stampa su schermo
    c) Un blocco indipendente con funzione specifica
    d) Una struttura ciclica

  3. Qual è lo scopo dei commenti in un programma?
    a) Velocizzare l’esecuzione
    b) Rendere il codice più leggibile
    c) Salvare il codice automaticamente
    d) Impedire errori di sintassi

  4. Cosa significa l'acronimo DRY?
    a) Don’t Repeat Yourself
    b) Do Repeat Yourself
    c) Don’t Run Yet
    d) Develop Recent YAML

  5. Quale tra questi è un buon esempio di nome di variabile?
    a) a1
    b) xz3
    c) contatoreStudenti
    d) 123nome


Esercizio aperto

Scrivi un semplice programma (in pseudocodice o Python) che:

  • Chieda all’utente tre numeri
  • Calcoli la media
  • Stabilisca se è maggiore di 10
  • Restituisca un messaggio coerente

📝 Soluzioni test

  1. b) Ricorsione
  2. c) Un blocco indipendente con funzione specifica
  3. b) Rendere il codice più leggibile
  4. a) Don’t Repeat Yourself
  5. c) contatoreStudenti



domenica 19 gennaio 2025

Corso Imparare a Programmare: 8 Il linguaggio Python (per ragazzi e adulti) (in preparazione)

Il linguaggio Python (per ragazzi e adulti)
Contenuti:

Cos’è Python e perché è adatto per iniziare

Sintassi base: stampa, input, variabili, operatori

Condizioni, cicli, funzioni

Progetti semplici: calcolatrici, quiz, generatori di storie

Attività:

Scrivere il primo programma: “Ciao mondo!”

Programmare un quiz interattivo

Sfida finale: realizzare una mini-app con input utente e condizioni

sabato 18 gennaio 2025

Corso Imparare a Programmare: 7 Il linguaggio Scratch (per l’infanzia) (in preparazione)

Il linguaggio Scratch (per l’infanzia)
Contenuti:

Interfaccia di Scratch: stage, sprite, blocchi

Programmazione a blocchi: azioni, eventi, controllo, sensori

Narrazione interattiva, giochi e quiz

Attività:

Crea una storia animata con personaggi e dialoghi

Programma un gioco con punteggio e timer

Sfida: costruisci un labirinto con comandi a blocchi

venerdì 17 gennaio 2025

Corso Imparare a Programmare: 6 Funzioni e moduli (in preparazione)

Funzioni e moduli
Contenuti:

Cos’è una funzione: blocco riutilizzabile di codice

Parametri e ritorno di valore

Vantaggi della modularità

Librerie e moduli nei linguaggi moderni

Attività:

Suddividere un’attività complessa in sotto-attività (funzioni)

Costruzione di funzioni in Scratch (blocchi personalizzati)

Creazione di funzioni semplici in Python (es. calcola_media, saluta_nome)

giovedì 16 gennaio 2025

Corso Imparare a Programmare: 5 Istruzioni condizionali e cicli


Istruzioni condizionali e cicli

🔍 Contenuti:

  • Condizioni (if, else): imparare a far prendere decisioni al computer.
  • Cicli (for, while): dire al computer di ripetere operazioni automaticamente.
  • Operatori relazionali e logici: confrontare numeri, verificare condizioni.
  • Esempi dal mondo reale: come funzionano i semafori, gli sportelli automatici o i videogiochi grazie a queste strutture.

🧠 Approfondimento:

Le istruzioni condizionali e i cicli sono tra i concetti più importanti nella programmazione. Una condizione permette di eseguire un blocco di istruzioni solo se si verifica una certa situazione (ad esempio: "Se la porta è chiusa, suona il campanello"). I cicli, invece, permettono di ripetere un’azione più volte (come contare da 1 a 10 o stampare una frase dieci volte).

Con esempi tratti dalla vita quotidiana – come i semafori programmati con condizioni logiche – si può rendere più comprensibile anche ai più piccoli come i computer "pensano".

🧩 Attività proposte:

  • Crea un semaforo logico con cartoncini colorati per simulare una condizione (es: se il pedone preme il pulsante → diventa verde).
  • Storia interattiva condizionale: usa Scratch o un semplice editor di codice per creare una narrazione che cambia in base alle scelte dell’utente.
  • Loop visivi e giochi: costruisci una danza ripetitiva (ciclo) per un personaggio animato.

🎯 Obiettivi Didattici:

  • Comprendere come funzionano le scelte e le ripetizioni nei programmi.
  • Collegare concetti logici ad attività concrete e ludiche.
  • Realizzare semplici programmi interattivi con condizioni e cicli.

🧪 Test interattivo – Prova le tue conoscenze!

mercoledì 15 gennaio 2025

Corso Imparare a Programmare: 4 Variabili costanti e tipi di dato

 


🎓 Variabili, costanti e tipi di dato

🔍 Cosa sono le variabili? Le variabili sono “contenitori” che possono cambiare valore nel tempo. Le costanti, invece, sono contenitori il cui valore resta fisso.

📦 Tipi di dati: In Python (e nella maggior parte dei linguaggi), i tipi base includono:

  • Numeri (int, float)
  • Stringhe (testi tra virgolette)
  • Booleani (vero o falso)

🧑‍💻 Dichiarazione e uso: Dichiarare una variabile è semplice: basta darle un nome e assegnarle un valore. Esempio:
x = 5
nome = "Mario"
acceso = True

✏️ Attività consigliate:

  • Simulare con post-it il cambio di valore di una variabile
  • Scrivere un piccolo script in Python o Scratch per aggiornare valori
  • Giocare con il test interattivo qui sotto ⬇️

🧠 Quiz interattivo: Indovina il tipo di dato!

Domanda 1: Quale tipo di dato è "ciao"?



Domanda 2: Che tipo è True?



Domanda 3: Se scrivo x = 3.14, x è:



martedì 14 gennaio 2025

Corso Imparare a Programmare: 3 Algoritmi e diagrammi di flusso


Algoritmi e Diagrammi di Flusso


Obiettivo: Comprendere cos'è un algoritmo, come si struttura, come si rappresenta visivamente con i diagrammi di flusso e come usarli nella risoluzione di problemi.


📚 Contenuti Didattici

✅ Cos’è un algoritmo?

Un algoritmo è una sequenza finita e ordinata di istruzioni che, partendo da un input, permette di ottenere un risultato (output). È la “ricetta” per risolvere un problema.

Esempio: Preparare una tazza di tè:

  1. Prendi una tazza
  2. Metti una bustina di tè
  3. Versa acqua calda
  4. Aspetta 3 minuti
  5. Rimuovi la bustina
  6. Aggiungi zucchero se vuoi

🔁 Istruzioni sequenziali, scelte e ripetizioni

  • Sequenza: le istruzioni sono eseguite una dopo l’altra.
    Es.: vai a scuola → entra in aula → accendi il computer

  • Scelta (condizione): si verifica una condizione per decidere cosa fare.
    Es.: “Se piove, prendi l’ombrello”

  • Ripetizione (loop): si ripete un’azione finché non si verifica una condizione.
    Es.: “Continua a mescolare finché la crema non si addensa”


🧩 Diagrammi di flusso

I diagrammi di flusso sono rappresentazioni grafiche degli algoritmi, utilizzando simboli standard per indicare processi, decisioni e flussi.

🧷 Simboli principali:

Simbolo Nome Significato
🔷 Inizio/Fine Indica l’inizio o la fine del diagramma
🟥 Processo Un’azione o istruzione da eseguire
🔺 Decisione Una domanda con risposta sì/no o vero/falso
🔽 Input/Output Inserimento o stampa di dati

💡 Esempio 1 – Preparare un panino (Algoritmo + Diagramma)

Algoritmo:

  1. Prendi due fette di pane
  2. Spalma la maionese su una fetta
  3. Metti una fetta di prosciutto
  4. Chiudi il panino con la seconda fetta
  5. Mangia

Diagramma di Flusso:

[Inizio]
   |
[Prendi due fette di pane]
   |
[Spalma maionese su una fetta]
   |
[Metti prosciutto su una fetta]
   |
[Chiudi il panino]
   |
[Mangia]
   |
[Fine]

🎲 Attività pratiche

✍️ 1. Scrivi il tuo algoritmo

Scegli un'attività quotidiana (es. fare lo zaino per la scuola, lavarti i denti) e scrivi le istruzioni passo-passo come fosse un robot che deve seguirle.


🧠 2. Converti in diagramma

Usa i simboli standard per convertire il tuo algoritmo in un diagramma di flusso, disegnando le frecce di collegamento tra un blocco e l’altro.


🤖 3. Gioco "Robot su Griglia"

  • Crea una griglia 5x5 su carta.
  • Posiziona un "robot" su una casella di partenza e un “obiettivo” su un’altra.
  • Scrivi un algoritmo con istruzioni tipo: "avanza", "gira a sinistra", "vai avanti di 2".
  • Verifica se il robot arriva a destinazione!

🧪 Esercizi e Test

📘 Quiz 1 – Vero o Falso

  1. Un algoritmo può avere istruzioni in disordine. ❌
  2. Una ripetizione serve a fare qualcosa più volte. ✅
  3. Nei diagrammi di flusso, il rombo rappresenta un input. ❌

✏️ Quiz 2 – Scelta multipla

Cosa rappresenta il simbolo 🔺 nei diagrammi di flusso?
A) Una stampa a video
B) Una decisione ✅
C) Una pausa
D) Un errore


🧠 Esercizio guidato – La merenda automatica

Scrivi un algoritmo e crea il diagramma di flusso per questa attività:

"Se hai fame, prendi uno snack. Se non hai fame, bevi un bicchiere d'acqua."


👨‍🏫 Obiettivi finali del modulo

  • Comprendere la logica degli algoritmi
  • Saper scomporre un’attività in fasi elementari
  • Imparare a rappresentare graficamente una procedura con il diagramma di flusso
  • Potenziare il pensiero logico e la risoluzione di problemi

Se vuoi, posso fornirti:

  • Template PDF da stampare per gli esercizi
  • Versione interattiva del quiz da inserire in un sito o su Blogger
  • Schede didattiche illustrate per bambini o principianti

Fammi sapere!

lunedì 13 gennaio 2025

Corso Imparare a Programmare: 2 La macchina di Von Neumann e il modello input–elaborazione–output


📘 La macchina di Von Neumann e il modello I–E–O

📌 Contenuti teorici

🔹 Cos'è la macchina di Von Neumann

L’architettura di Von Neumann, proposta nel 1945, è alla base dei moderni computer. Si fonda su:

  • Unità di input (tastiera, mouse, sensori)
  • Unità di elaborazione (CPU con ALU + CU)
  • Unità di memoria (RAM e disco)
  • Unità di output (monitor, stampante, altoparlanti)

Questa struttura consente ai programmi e ai dati di essere memorizzati insieme nella stessa memoria.

🔹 Il modello Input–Elaborazione–Output (I–E–O)

È un modello concettuale che descrive qualsiasi sistema informatico:

  • Input: ciò che l’utente o il mondo esterno fornisce (es. numeri, comandi)
  • Elaborazione: l’operazione logica o matematica eseguita
  • Output: il risultato dell’elaborazione

🔹 Esempi concreti

Sistema Input Elaborazione Output
Calcolatrice 2 + 2 Addizione 4
App meteo Posizione GPS Ricerca dati meteo Temperatura
Registratore di cassa Codice prodotto Prezzo + IVA Scontrino

🧪 Attività suggerite

1. Scomponi un’azione quotidiana in I–E–O

Esempio: Fare un caffè con la macchinetta

  • Input: capsula, acqua, pressione tasto
  • Elaborazione: riscaldamento e passaggio acqua
  • Output: caffè nella tazza

Chiedi ai partecipanti di simulare azioni come:

  • Mettere in moto una macchina
  • Usare un bancomat
  • Postare una foto sui social

2. Simulazione fisica

Utilizza oggetti:

  • Fogli per i dati in input
  • Scatole per simulare la CPU
  • Frecce o post-it per indicare i flussi

3. Laboratorio: schema I–E–O per un problema reale

Proponi situazioni:

  • Gestire le prenotazioni di un cinema
  • Ordinare cibo con un'app
  • Avviare una lavatrice automatica

Fai disegnare lo schema con:

  • Input (utente)
  • Operazioni necessarie
  • Output atteso

Test di verifica (con risposte)

1. Qual è l’unità principale di elaborazione nella macchina di Von Neumann?
A) Hard disk
B) RAM
C) CPU ✅
D) GPU

2. Nel modello I–E–O, cosa rappresenta “elaborazione”?
A) Il risultato finale
B) La memorizzazione dei dati
C) L’operazione eseguita sul dato ✅
D) L’immissione dell’input

3. Quale dei seguenti non è un output?
A) Display di uno smartphone
B) Stampante
C) Tastiera ✅
D) Altoparlante

4. In un’app di navigazione GPS, quale tra questi è l’input?
A) La mappa
B) La posizione dell’utente ✅
C) Il percorso suggerito
D) Il tempo di arrivo stimato



Come sopravvivere con l'informatica: Neurosimulators: deep learning ispirato al cervello

  📌 Neurosimulators: deep learning ispirato al cervello La prossima rivoluzione dell’intelligenza artificiale potrebbe arrivar...