LA LEZIONE N. 8 E' RINVIATA A DATA DA DEFINIRSI... 

 

Settima lezione - 12 febbraio 2020 

Oggi abbiamo visto una possibile soluzione per i 2 esercizi per casa (disegno di una spirale quadratica, disegno di un esagono verde) e abbiamo cominciato a conoscere due nuovi tipi di dato. 

Le stringhe, un tipo di dato testuale, caratteri/cifre/simboli... racchiusi all'interno di una coppia di apici o virgolette. Molte sono le funzioni che operano su stringhe, abbiamo accennato a queste: len(), +, *, upper(), lower(), replace(), find(), count(), str()... ed abbiamo utilizzato la notazione stringa[indice] per accedere ad un singolo carattere, ed il primo carattere ha indice 0. Ricordo che il comando input(), di default, accetta stringhe.

Vi ho raccontato della necessità di un sistema di codifica, accennando al sistema ASCII e UNICODE ed ai comandi ord() e chr() per passare dal simbolo al codice corrispondente e viceversa.

Per imparare a lavorare con le stringhe abbiamo realizzato insieme i seguenti programmi:

# Inserisci in input una stringa ed una vocale, riscrivi la stringa come fanno i bambini per gioco con tutte a... e... i...

testo = input("Digita il testo: ")
vocale = input("Quale vocale vuoi utilizzare? (a/e/i/o/u) ")
vocali = "aeiouAEIOUàèìòù"
testoX = ""
for i in range(len(testo)):
# cerca se il carattere testo[i] è contenuto in vocali, allora posiz>-1
    posiz = vocali.find(testo[i])
    if posiz == -1:
        testoX = testoX + testo[i]
    else:
        testoX = testoX + vocale
print(testoX)

 

Ad esempio:

 

 # Inserisci una parola o frase e verifica se è palindroma, ovvero se è la stessa letta da destra v/sinistra

# prova con la frase "i topi non avevano nipoti" (senza spazi, pena ulteriore lavoro di programmazione)

s = input("Prego inserisci la stringa da verificare: ")
pal = True
i = 0
meta = len(s) // 2
fine = len(s)-1
while pal and i<meta:
    if s[i] != s[fine]:
        pal = False
    i += 1
    fine -= 1
if pal:
    print("La stringa è palindroma!")
else:
    print("La stringa non è palindroma!")

 

Un altro importante tipo di dati è il tipo list (lista): le liste sono un tipo di dato che contiene una sequenza di altri dati ordinati in base ad un indice (anche qui il primo elemento della lista ha indice 0). A differenza delle stringhe, nelle liste possiamo modificare gli elementi, aggiungerne, cancellarne... Questi sono esempi di liste:

province_veneto = ["PD", "VR", "TV", "VI", "VE", "RO", "BL"]

abitanti = [937, 926, 887, 862, 853, 235, 202]

ma gli elementi possono anche essere di tipo diverso:

utenti = ["Mario", "Rossi", "Via Garibaldi", 5, "Roma", "Elena", "Bianchi", ...] 

e, all'occorrenza, possiamo creare anche sottoliste (ovvero liste di liste).

Abbiamo accennato allo slicing di liste (es. province_veneto[0:3] restituisce ["PD", "VR", "TV"]) e ad alcune funzioni sulle liste (se non ricordate la sintassi - è normale, date un'occhiata alla documentazione ufficiale del linguaggio): len(), in, del, remove(), append(), max(), min(), sum(), sort(), reverse(). Talvolta è utile creare una lista vuota per poi popolarla di dati, come in lista = [].

# Crea una lista con il nome dei mesi, inserito un numero tra 1 e 12 il computer ti restituirà il nome del mese corrispondente
mesi = ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"]
n_mese = int(input("Inserisci il numero del mese [1-12]: "))
print("Il ",n_mese,"° mese dell'anno è ", mesi[n_mese-1])

 

 COMPITI PER CASA

- Scrivi un programma che data una stringa ritorni la percentuale delle vocali in essa contenute

- Fai inserire all'utente una lista di nomi di contribuenti e, parallelamente, in un'altra lista il contributo in euro - un numero "float"- che ciascuno ha versato alla nostra associazione; visualizza poi il totale dei contributi versati, il contributo medio ed il nome del contribuente più generoso

 

Ci vediamo per l'8a lezione dopo la vacanzina di carnevale, mercoledì 4 marzo!!!

 

Sesta lezione - 29 gennaio 2020 

Oggi abbiamo corretto i 2 esercizi per casa:

# Indovina il numero nascosto nel programma con non più di 5 tentativi

num_x = 279
print("INDOVINA IL NUMERO NASCOSTO! E' un numero compreso tra 0 e 999... ")
print("Hai un massimo di 5 tentativi ed io ti darò dei suggerimenti\n")
tentativi = 1
num = int(input("Inserisci numero: "))
while (tentativi < 5) and (num_x != num):
    if num_x > num:
        print("... il numero cercato è più grande!")
    else:
        print("... il numero cercato è più piccolo!")
    num = int(input("Inserisci numero: "))
    tentativi = tentativi + 1
if tentativi < 5:
 print("Bravo, era proprio il numero ",num_x, "hai utilizzato ",tentativi,"tentativi")
else:
    print("Mi spiace, non hai indovinato... se vuoi, rilancia il programma")

# Dato un numero naturale n calcola se e' perfetto

# un numero si dice 'perfetto' se e' pari alla somma dei suoi divisori (escluso il numero stesso)
n = int(input("Prego inserisci un numero naturale: "))
somma = 0
for i in range(1, n // 2 + 1): # non serve cercare divisori oltre la meta' di n
    if n % i == 0:
        somma += i
    if somma == n:
        print(n, "e' un numero PERFETTO!")
    else:
        print(n, "NON e' un numero perfetto!")

 

Abbiamo poi introdotto la 'geometria della tartaruga' nata negli anni '60 col linguaggio Logo nell'ambito della pedagogia informatica, con l'obiettivo di insegnare gli algoritmi e la programmazione ai bambini. Python permette anche questo: è per noi un modo per operare graficamente, muovendo un cursore sullo schermo.

Per operare con la 'tartaruga' abbiamo importato il modulo turtle e creato due oggetti, uno di tipo turtle ed uno di tipo screen. Abbiamo visto i principali metodi per operare con la tartaruga (per una visione completa degli stessi si veda la documentazione su https://docs.python.org/3.7/library/turtle.html )

Abbiamo poi sviluppato insieme due programmi:

- uno per disegnare una scala con 3 gradini colorati, dopo aver chiesto in input le misure degli spostamenti

- uno per disegnare un quadrato, dato il lato, colorato interamente di blu

Abbiamo visto come generare un numero pseudo-casuale, con il supporto della libreria random e del metodo randint(inizio, fine).

Nel programma seguente si genera casualmente una posizione sullo schermo e si disegna un fiore rosso (con 6 cerchi e con altrettante rotazioni di 60°)

# genera un fiore rosso in una posizione casuale sullo schermo
import random
import turtle
x = random.randint(-250, 250)
y = random.randint(-250, 250)
raggio = random.randint(20, 100)
tarty = turtle.Turtle()
tarty.pencolor("red")
tarty.penup()
tarty.goto(x, y)
tarty.pendown()
for i in range(6):
    tarty.circle(raggio)
    tarty.left(60)

 Fiori con 6 cerchi ruotati

 

COMPITI PER CASA

- scrivi un programma che realizzi una spirale quadratica, simile a questa:

- crea un programma che disegni e riempia di colore verde un esagono

 

Ci vediamo per la 7a lezione tra 2 settimane, mercoledì 12 febbraio!!!

 

Quinta lezione - 15 gennaio 2020 

Oggi purtroppo c'erano parecchi assenti, spero di vedervi più numerosi la prossima volta... abbiamo corretto gli esercizi per casa dei quali vi riporto alcune possibili soluzioni:

# Programma che chiede in input un numero naturale e verifica se sia primo
# N.B. un numero è primo se e' divisibile solo per 1 e per se stesso
num = int(input("Prego inserisci un numero: "))
primo = True    
for i in range(2, num//2+1, 1):
    if num % i == 0:    # se il resto della divisione e' 0 allora i è un divisore di num
        primo = False
if primo:
    print("Il numero ",num,"è primo!")
else:
    print("Il numero ",num,"non è primo!")

# Programma che chiede in input un numero e ne visualizza la Tabellina
n = int(input("Prego inserisci un numero intero: "))
for i in range(10):   
    print(n * (i+1), end=", ")    # il parametro end="..." evita il ritorno a capo  

# Programma che visualizza tutti i divisori di un numero
# aggiungo il conteggio del numero dei divisori
n = int(input("Prego inserisci un numero naturale: "))
print("I divisori di ",n, "sono:")
num_divisori = 0
for i in range(n+1):
    divisore = i+1
    if n % divisore == 0:
        print(divisore)
        num_divisori = num_divisori+1
print("Il numero ",n," ha ",num_divisori,"divisori")

 

Abbiamo poi affrontato il secondo possibile costrutto per realizzare iterazioni in Python, il ciclo WHILE, adatto per situazioni nelle quali non è noto a priori il numero delle iterazioni; la gestione dell'eventuale contatore è a carico del programmatore come nell'esempio:

    i = 1
    while i <= 10:   
        print(i, ")")  # visualizza 1) 2) 3) ... 10)

Se, per errore, entrate in un ciclo infinito... premete CTRL+C per interrompere lo svolgimento del programma.

Abbiamo realizzato il seguente programma, un esempio di gioco a coppie: uno scrive nel codice del programma il nome di un animale, l'altro non guarda e cerca di indovinarlo

# Indovina il nome di animale nascosto in questo programma
animale_x = "salamandra"
tentativo = input("Indovina l’animale: ")
while animale_x != tentativo:
    tentativo = input("Sbagliato! ritenta: ")
print("Bravo, hai indovinato!")

 

Abbiamo visto che i CICLI possono essere ANNIDATI, ovvero inseriti uno all'interno dell'altro ed abbiamo visto un programma che visualizza la tavola pitagorica:

  ...

  for i in range(10):
    for j in range(10):
        <istruzione svolta j volte per ogni iterazione di i>

Abbiamo poi parlato della celeberrima successione di Fibonacci con la quale il famoso matematico del 1200 voleva descrivere la crescita mensile di una popolazione di coppie di conigli: 1 1 2 3 5 8 13 21... e scritto un programmino per visualizzarne i primi n termini.

 

Infine abbiamo accennato all'argomento MODULI: abbiamo visto finora alcune funzioni predefinite nella libreria standard del linguaggio quali print(), int(), eval(), type(), max()..., Python ci offre in aggiunta la possibilità di importare librerie (ovvero collezioni di funzioni, variabili, classi...) per particolari applicazioni. Un esempio da terminale:

  >>> import math
  >>> print(math.pi)   # la costante pi greco è inclusa nella libreria math

  3.141592653589793

Abbiamo poi scritto un programma per il calcolo dell'ipotenusa di un triangolo rettangolo dati i cateti - il teorema di Pitagora... usando math.sqrt() per il calcolo della radice quadrata.

Infine, dal mio pc, vi ho fatto vedere il codice di un programma che importa la libreria datetime e che manipola variabili di tipo date, con poche righe di codice abbiamo calcolato quanti giorni intercorrono tra la nostra data di nascita e la data odierna (letta dall'orologio di sistema del pc).


COMPITI PER CASA

- scrivi un programma che assegni alla variabile num, all'interno del codice del programma, un valore intero compreso tra 0 e 999; l'utente che usa il tuo programma deve cercare di indovinarlo in un massimo di 5 tentativi, quando sbaglia il pc gli deve dare un suggerimento comunicando se il numero cercato sia più grande o più piccolo di quello inserito

- adatta il programma che visualizza i divisori di un numero affinché invece verifichi se un numero è perfetto: un numero è perfetto se coincide con la somma dei suoi divisori, escludendo il numero stesso (es. 6 = 1 + 2 + 3, lo è anche il 28...)

 

Ci vediamo per la 6a lezione tra 2 settimane, mercoledì 29 gennaio!!!

  

Quarta lezione - 4 dicembre 2019 

Oggi abbiamo corretto alcuni esercizi per casa e visto questi nuovi concetti: 

- l'algebra booleana ed il tipo di dati bool (con i due valori True e False)

- gli operatori logici and, or e not per descrivere condizioni logiche non elementari. Essi operano in questo modo: 

A

B

A and B

A or B

not A

True

True

True

True

False

True

False

False

True

False

False

True

False

True

True

False

False

False

False

True

 

- il concetto di Ciclo (o Iterazione o Ripetizione) ed il costrutto for; ad esempio per visualizzare i primi 10 numeri naturali (attenzione: da 0 a 9) potremmo scrivere:

    for i in range(10):

        print(i)

La funzione range(start, stop, step) con questi tre parametri permette di personalizzare l'iterazione (attenzione: start compreso, stop escluso)

Esercizi per casa risolti con l'uso degli operatori logici:

# programma che verifica se un anno è bisestile
# sono bisestili gli anni multipli di 4 ad eccezione degli
# anni secolari che sono bisestili solo se sono multipli di 400

anno = int(input("Digita l'anno da testare: "))

if (anno % 400 == 0):
    # si tratta di un secolo ogni 400 anni
    print("L'anno ",anno,"è bisestile!")
elif (anno % 4 == 0) and (anno % 100 != 0):
    # si tratta di un anno multiplo di 4 ma non un secolo
    print("L'anno ",anno,"è bisestile!")
else:
    print("L'anno ",anno,"non è bisestile!")

 

# Programma che chiede in input 3 numeri a,b,c e verifica se
# possono essere le misure dei 3 lati di un triangolo: ciascuno deve essere
# un valore positivo ed inferiore alla somma degli altri due 

print("Prego inserisci 3 numeri \n")
a = eval(input("Primo numero: "))
b = eval(input("Secondo numero: "))
c = eval(input("Terzo numero: "))

if a < 0 or b < 0 or c < 0:
    print("Hai inserito valori negativi, i valori inseriti non possono essere i lati di un triangolo")
else:
    if a > b+c or b > a+c or c > a+b:
        print("Uno dei lati è inferiore alla somma degli altri due, non possono essere le misure dei lati di un triangolo ")
    else:
        print("I 3 valori possono essere le misure dei lati di un triangolo!")

 

Abbiamo scritto due nuovi programmi:

1) programma che chiede in input gli estremi (sinistro e destro) di un intervallo, chiede poi in input un numero e ci scrive se il numero è all’interno, all’esterno o coincide con uno degli estremi dell’intervallo

2) programma che chiede in input un numero n e riporta la somma dei primi n numeri naturali (anche se Gauss, alle elementari, ha notato che coincide con n*(n+1)/2)

 

 COMPITI PER CASA 

1) scrivi il programma primo.py che chiede in input un numero naturale n e verifica se sia primo (un numero è primo se è divisibile solo per 1 e per se stesso)

2) scrivi il programma tabellina.py che visualizzi la tabellina del numero n (es. se n=3 deve visualizzare 3, 6, 9, 12, 15, 18, 21, 24, 27, 30)

3) scrivi il programma divisori.py che chiede in input un numero naturale n e visualizza tutti i suoi divisori

Concentratevi sulle interrogazioni e verifiche di fine trimestre, ci rivediamo al corso Python nel 2020, se non ho riunioni pomeridiane, il giorno mercoledì 15 gennaio prossimo per la 5a lezione!

 

Terza lezione - 20 novembre 2019

 

Oggi abbiamo corretto i 4 esercizi per casa, ecco alcune possibili soluzioni:

Programma 1:

# Programma che calcola il doppio, il triplo, il quadrato ed il cubo di un numero
n = int(input("Prego digita un numero intero: "))
doppio = 2*n
triplo = 3*n
quadrato = n ** 2
cubo = n ** 3
print("\nil doppio di ", n, "è ", doppio, "\nil triplo di ",n,"è ", triplo, "\nil quadrato di ",n,"è ",quadrato,"\ned il cubo di ",n,"è",cubo)

Programma 2:

# Prg che chiede in input due numeri interi e ne calcola varie operazioni aritmetiche
a = int(input("Inserisci il primo numero (intero positivo): "))
b = int(input("Inserisci il secondo numero (intero positivo): "))
somma = a + b
differenza = a - b
prodotto = a * b
quoziente_intero = a // b
resto = a % b
potenza = a ** b
print("\n")
print("La SOMMA dei due \nnumeri dà ", somma)
print("La DIFFERENZA tra i due numeri dà ", differenza)
print("Il PRODOTTO dei due numeri dà ", prodotto)
print("Il QUOZIENTE (intero) dei due numeri dà ", quoziente_intero, "con RESTO di",resto)
print("L'elevamento a POTENZA di ",a,"alla",b," dà ", potenza)
print("\n")

Programma 3:

# Programma che chiede l'età e ci dice se siamo Maggiorenni o Minorenni
eta = int(input("Quanti anni hai? "))
if eta >= 18:
    print("Sei maggiorenne!")
else:
    print("Sei minorenne!")

Programma 4:

# Prg che calcola il maggiore tra 2 numeri
primo=eval(input("primo numero: "))
secondo=eval(input("secondo numero: "))
if primo >= secondo:
    print("Il maggiore dei 2 numeri è ",primo)
else:
    print("Il maggiore dei 2 numeri è ",secondo)

 

- abbiamo poi visto il concetto di FLOW CHART (o Diagramma di Flusso o Diagramma a blocchi) per rappresentare graficamente (con pochi blocchi grafici e linee orientate) i passi di un algoritmo; 

- il Teorema di Boehm-Jacopini: un qualunque algoritmo può essere implementato (realizzato) in fase di programmazione utilizzando solo 3 strutture: 1) la sequenza 2) la selezione 3) il ciclo

- il costrutto IF... ELIF... ELSE per testare più condizioni e per associare a ciascuna situazione un blocco di istruzioni

- gli OPERATORI RELAZIONALI o DI CONFRONTO (da usare nella scrittura delle condizioni logiche): ==, !=, >, >=, <, <=

- abbiamo poi scritto due programmi:

1) programma che chiede in input 3 numeri (qualsiasi) e visualizza il più grande

2) programma che chiede in input la temperatura (un numero con decimali) e visualizza coerentemente secondo il valore inserito "Sei deboluccio!" (<36°), "Tutto ok, stai bene!" (temperatura tra 36° e 37°) oppure "Hai la febbre, riposati!" (>37°)

 

COMPITI per CASA

1) programma che chiede in input 3 numeri (qualsiasi) e visualizza il minore

2) programma che verifica se 3 numeri reali possono essere le misure dei lati di un triangolo (in un triangolo le misure dei lati devono essere numeri positivi e ciascuno deve essere inferiore alla somma degli altri due)

3) programma bisestile.py che controlla se un anno inserito dall'utente è bisestile o meno (un anno è bisestile se è multiplo di 4, ad eccezione dei secoli, che sono bisestili ogni 400 anni). Così, ad esempio sono bisestili il 1988 ed il 2000, ma non il 1917 o il 1900) 

 

Ci vediamo tra 2 settimane, mercoledì 4 dicembre 2019!

 

Seconda Lezione - 6 novembre 2019

 

Alcuni contenuti sviluppati oggi:

- cenno ad ambienti di sviluppo diversi da Idle (es. Atom)

- correzione del programma per casa (passaggio da gradi Celsius a Fahrenheit)

- concetto di Funzione Predefinita (vedi https://docs.python.org/3/library/functions.html ), la funzione abs(numero) per calcolare il valore assoluto di un numero, il comando help(comando) per visualizzare il significato e la sintassi di un comando

- il concetto di Tipo di Dati (ad esempio str=stringa, int=numero intero, float=numero reale), la funzione type() per ritornare il tipo di dato di un valore o di una variabile, alcuni esempi dalla shell >>>

- la funzione round(numero, cifre_decimali) per arrotondare un numero reale

- programma che dato un capitale, un tasso ed un tempo, calcola il capitale finale (montante)

- il comando input() per acquisire dati da tastiera; input() ritorna una stringa, c'è bisogno di int(), float() o eval() per convertire l'eventuale contenuto numerico

- il costrutto condizionale if... else...; l'operatore di confronto == (uguale); cenno all'indentazione (rientro)

- programma che chiede in input un numero intero positivo e visualizza se è Pari o Dispari 

 

Compiti per casa:

1) scrivere un programma che chieda in input un numero e restituisca il suo doppio, il suo triplo, il suo quadrato ed il suo cubo

2) scrivere un programma che chieda in input due numeri interi positivi e che operi tra i due numeri visualizzando i 5 risultati:  somma, differenza, prodotto, quoziente, potenza

3) scrivere un programma che chieda in input l'età e che visualizzi in modo coerente "sei maggiorenne" oppure "sei minorenne" (N.B. esistono gli operatori di confronto > e >=)

4) scrivere un programma che chieda in input due numeri (diversi) e che visualizzi il maggiore  

 

Ci vediamo tra 2 settimane, mercoledì 20 novembre 2019!

 

Prima Lezione 23 ottobre 2019

 

Libro di testo seguito dal docente: Imparare a programmare con Python - M. Boscaini - Apogeo

Libro di testo thinkpython_italian.pdf di Allen Downey scaricabile gratuitamente al seguente link!

 

Vi sintetizzo di cosa ci siamo occupati:

- un po' di teoria, introduzione alla programmazione informatica: definizioni di informatica, dato e informazione, input e output, hardware e software, schema logico 'a cipolla' del funzionamento di un computer, problema→algoritmo→programma, risolutore ed esecutore di un algoritmo, esempi di algoritmi, cos'è un programma, cosa significa programmare un computer

- Python: un po' di storia e prospettive, caratteristiche del linguaggio

- la Python shell ed il prompt >>>, si esce dalla shell con exit()

- gli operatori aritmetici (+ - * / ** // %) e le priorità delle operazioni

- i commenti: # monoriga e """multiriga"""

- la funzione di output print(); la scrittura "case sensitive" (maiuscolo diverso da minuscolo)

- l'ambiente di sviluppo IDLE: scrivere e salvare un programma (con estensione .py), mandare in esecuzione un programma

- le Variabili per memorizzare dati, l'istruzione di assegnamento semplice di stringhe (es. nome = "Francesca") e di variabili numeriche (es. anni = 20), l'istruzione di assegnamento composta (es. anni = anni + 1)

 

Compiti per casa:

1) installare Python ultima versione (3.X) sul proprio pc, ricordare di mettere la spunta quando chiede

[] 'Add Python 3.X to PATH'

2) scrivere un programma che converta una temperatura espressa in gradi Celsius (chiamiamola temp_C) in gradi Fahrenheit (chiamiamola temp_F) con la formula di conversione F° = C°*1.8+32 e visualizzare il risultato

 

Ci vediamo tra 2 settimane, mercoledì 6 novembre 2019!

 

_____________

 

Bene, ci sono state 22 iscrizioni: 15 alunni/e del biennio e 7 del triennio (probabilmente verranno come 'uditori' anche un paio di colleghi).

Ci vediamo mercoledì 23 ottobre 2019 alle 14:00 in Laboratorio2!

 

_____________

 

 

CODING - PROGRAMMIAMO CON PYTHON

 

I migliori sistemi scolastici hanno riconosciuto l'importanza del pensiero algoritmico e della programmazione dei computer per la formazione e l'educazione delle ragazze e dei ragazzi;

insegnare i principi dell'informatica e della programmazione permette di capire meglio come funziona un mondo sempre più digitale.

 

Il dipartimento di Matematica della nostra scuola ha pensato di avviare un CORSO BASE di PROGRAMMAZIONE da tenersi al pomeriggio, il corso è rivolto ad alunne ed alunni interessati che frequentino le nostre classi, non è richiesta alcuna conoscenza iniziale, è richiesto invece l'impegno ad assicurare una frequenza accettabile.

 

Il linguaggio di programmazione scelto è Python, che presenta da alcuni anni il maggior trend di crescita nella comunità internazionale degli sviluppatori di software perché è un linguaggio semplice, generalista, di alto livello, orientato agli oggetti, multipiattaforma e open source.

Cosa possiamo fare con Python? Tutto: programmi scientifici, gestionali, applicazioni web (Django), robotica, big data, data mining... ma intanto cominciamo dai fondamenti! ;-)

 

Il corso si avvierà se ci sarà il serio interesse di almeno 14 alunni dell'Istituto ed è rivolto ad un numero massimo di 22 partecipanti: nel caso di richieste superiori verranno privilegiati gli alunni più giovani e, in seconda istanza, si valuterà l'ordine di iscrizione.

 

Come ci si iscrive? Passando in Entrata Ovest dalla Sig.ra Mirella ed indicando le proprie generalità nell'opportuno modulo entro sabato 19 ottobre 2019.

 

 

docente: prof. Marco Müller

sede: laboratorio Lab2-Lazzari

costo: gratuito per alunni regolarmente iscritti all'Istituto

numero di lezioni: 10-12, indicativamente ogni 2 settimane

orario: mercoledì 14:00-16:00

prima lezione: mercoledì 23 ottobre 2019

periodo: ottobre 2019 - maggio 2020

 

 

_____________