Category Archives: Scuola

L’elettronica dei semiconduttori

Vale fare una segnalazione di un post molto interessante, sull’elettronica, i componenti che compongono i nostri ‘puters?

È il video di una lezione che è un racconto emozionante per quelli come me (a me nessuno dice mai niente) del professor Giuseppe Iannaccone, ordinario di Elettronica presso l’Università di Pisa.

iannac
Pieno di informazioni, è il suo lavoro, godibilissimo anche per tutti noi non del giro. Il prof. ha un blog :grin:, di cui questo è un post.

Trovate tutto qui: Lezione/seminario sugli sviluppi recenti dell’elettronica dei semiconduttori.

:mrgreen:

Annunci

CoderDojo

logoIo sono vecchio, peccato, non posso partecipare 😉
Ma OK, largo ai giovani! 😀

cdGrazie a Twitter (e in particolare ad Andrea M) trovo questo tweet: #coderdojo a Voghera alle origini c’era il Basic ora abbiamo Scratch…un altro pianeta!
Uh! interessante. Anche perché qualche mese fa avevo scritto qualche post sulla scuola, niente di speciale ero stato tratto in inganno da una voce poi rivelatasi non vera. Io proponevo Python; anzi sono sempre di quell’idea.
Ma prima, per i bambini piccoli, diciamo elementari? Li lasciamo in balia dei giochini con lo smartphone? No (nope), c’è CoderDojo. E tutto un fiorire di iniziative, eccone una: 31 gennaio 2015: si comincia!
Uh! ‘n’altra: aaaah look at them! 🙂 #CoderDojoVicenza, fresca di giornata.
E tante altre, forza ragazze & ragazzi, forza prof!

☯CoderDojo☯ cinguetta qui.

Programmazione nella Scuola Primaria – 12

foto classeLa serie di post sulla scuola non so se sia stata molto corretta. Un paio di prove so che sono state fatte; Windows rende difficile le cose semplici, io sono vecchio e il mio approccio non è quello di chi ho sentito. Ma d’altronde giocavo fuori casa. E il blog si occupa di altro; l’unica insegnante (peraltro ex) che ho aiutato a provare ha detto “sì ma…”.
Ho sentito anche altre proposte da genitori e studenti un po’ più grandi, le più varie, non le riporto, ci sono altri posti per enunciarle. Dico soltanto che non mi sembra che lo smartphone sia il mezzo più adatto. E lo stesso per fare siti web. Ma, ripeto, non è il mio campo.

Però qualche link per concludere. Roba incontrata quasi senza cercarla, non provata, chissà se funziona.

Uh! il terzo link è altamente raccomandato. I Laboratori di Paolo Alessandrini, Mr. Palomar! Io se fossi in voi chiederei a lui. Anche per i Pink Floyd ma quella è un’altra cosa.

IMGP2114%20Small

Aggironamenti

1 – L’amico Vinnie segnala un sito davvero bello, Programmer’s Learning Machine.
2 – Un Alberto segnala nei commenti un progetto interessante, anche se mi sembra piuttosto impegnativo: Kano, anche i bambini possono costruire un PC.

Bello questo arrivo di segnalazioni anche se avevo considerato chiusa la serie. Continuate, io aggiorno.

Programmazione nella Scuola Primaria – 11

11La serie volge al termine –finalmente! | finalmente?– ma prima una cosa ancora, diversa.
Anzi comincio con una bella notizia trovata sul web: Xprize’s next big challenge: software that lets kids teach themselves. Proprio come cantavano i Pink Floyd “Hey teacher! leave –OOPS mi sto rivolgendo agli insegnanti, cancello. E poi non ero in me, davvero.

Allora vi confesso un segreto: una carissima e pazientissima amica ha provato a fare i compiti delle lezioni precedenti. Io le ho solo dato un piccolissimo aiuto per trovare il Prompt dei comandi e magie ad esso collegate.
Ha ragione, non è quello che si fa di solito. E il figlio suggeriva di lasciar perdere quella roba e fare qualcosa di utile, tipo un gioco per il telefono. Naturalmente no, a suola si imparano le operazioni dell’aritmetica, non come tenere la contabilità IVA.

Ma poi, ripensandoci mi son detto che non aveva tutti i torti, la mamma non il figlio. E –pensa la combinazione!– ho trovato un IDE (integrated development environment, ambiente di sviluppo integrato) semplice, gratuito e che funziona: IEP.
iep3
Nella pagina di download lo potete scaricare e installare la versione per Windows, le prove le ho fatte con Linux (Lubit).

iep1

Eccolo, nella finestra che ho indicato con 1 potete scrivere il vostro codice o incollare quello preso dal web. Io ho scritto solo un paio di righe per un test veloce. Dopo averlo salvato (File|Save) potete eseguirlo con Run|Run file as script e il risultato appare nella finestra 2.

lingua

Dimenticavo: si può scegliere la lingua, come vedete avete la possibilità di perfezionare il vostro Olandese o Russo o Catalano.

iep2

Tornado a IEP, nella finestra 2 potete eseguire interattivamente istruzioni Python, mai più il terminale!

Vale solo per Python? Sì, lo dice anche il nome. Ma se dovesse servire se ne possono cercare altri, per altri linguaggi. Facciamo così: se ci sono osservazioni, commenti, whatever li raccolgo in un post ulteriore. Altrimenti finisce qui; non so se sono riuscito a dare un’idea di cos’è la programmazione, agli insegnanti non ai bambini che dovranno subirla. Essendo vecchio forse sono troppo legato a come si faceva una volta, nello scorso millennio, chissà…

Poi, lo sapete come vanno le cose, ecco Randall Munroe.

Programmazione nella Scuola Primaria – 10

10Quando sono partito con questa serie di post c’era una colossale minaccia minacciosa incombente: il C++.
Non che ce l’abbia con il C/C++, anzi! Quasi tutta l’informatica come la conosciamo noi si è sviluppata con e in C (e poi C++, la differenza credo esuli da questa introduzione).
Ma fin da subito ci si è accorti che forse non è sempre necessario, alle volte si può usare qualcosa di più amichevole. Anzi si deve. Il primo (per quel che mi risulta) è stato il Basic nato per semplificare il Fortran e tutta la sua liturgia.
In due parole: quando scrivo un programma in Fortran, C o in un linguaggio simile non riesco a eseguirlo nello stesso modo che abbiamo visto per Python, Ruby e Lua. Questi ultimi sono interpretati, quando ne eseguo uno chiedendo a Python o Ruby o quello che è di eseguirlo il mio file viene caricato in memoria e convertito per renderlo comprensibile al computer, al volo e ogni volta che lo lancio. Funziona, bene, e più è veloce il computer meglio è, la conversione è praticamente immediata.
Però se il programma è grosso o richiede molta memoria il ripetere ogni volta queste operazioni sarebbe oneroso e lento. Ecco perché fin da subito sono nati i compilatori che fanno la conversione dal file comprensibile agli umani, scritto in Fortran o C o Cobol o quello che volete nel linguaggio del computer. E il risultato di questa conversione viene scritta su un file, chiamato eseguibile. Quindi prima di eseguire un programma la prima volta devo compilarlo (convertirlo per il ‘puter). A questo punto l’esecuzione sarà semplicemente la lettura dell’eseguibile, già scritto come vuole il ‘puter.

OK, adesso dovrebbe essere chiara la suddivisione tra script (quelli interpretati) e programmi (quelli compilati). E dovrebbe risultare sensato quale useremo: se è molto grande e da distribuire (pensate a Word o al vostro browser) useremo un linguaggio compilato. Oggi quelli usati sono il C, il C++, Go, Rust, … Ma se si tratta di qualcosa di più piccolo possiamo usare un linguaggio interpretato, più facile da scrivere e modificare. Ecco allora Python, Ruby, Basic, Lua, PHP, Perl e millemila altri per soddisfare o gusti di tutti.

C’è anche qualcosa di intermedio, più lento dei compilati e con una gestione più difficile degli interpretati, come per esempio Java. Non ne parlerò, quando (e se) diventerete esperti… Uh! lo stesso vale per i funzionali, pare siano sempre più di moda, vedremo.

OK, ma non dovevi dirci del C++?
Uh! sì, subito. Ecco la versione C della congettura di Collatz vista nei post precedenti:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/* coll.c */

#include<stdio.h>

void main() {
    int n = 15; /* cambiare se nessario */
    while(n > 1) {
        if((n % 2) == 1)
            n = 3 * n + 1;
        else
            n /= 2;
        printf("%d ", n);      
    }
    printf("\nfatto!\n");   
}

Esaminiamolo brevemente. I commenti iniziano con /* e finiscono con */, possono quindi essere distribuiti su più righe. Normalmente un file inizia con una serie di #include per dire al compilatore dove cercare le funzioni che useremo. Nel nostro caso c’è la printf() che è nella libreria standard (std) di input e output (io) –ok, una nerdata. Non è la stessa cosa dell’import di Python: nei file .h avremo solo il prototipo della funzione, cioè l’intestazione e la funzione sarà in una libreria fornita con il compilatore (o che ci siamo fatti noi).
Il programma inizia dalla funzione main(), in questo caso (per renderla simile alle versioni viste precedentemente) è void, cioè quando finisce non dice al sistema operativo com’è andata. È altamente raccomandato dichiararla int e ritornare un valore, 0 significa tutto bene.
Ecco, come per main() (riga 5) anche ogni variabile va dichiarata, dicendo che tipo di dato dovrà contenere, cosa che faccio (riga 6) per la variabile n.
Un blocco inizia con { e termina con }. Notare che ogni istruzione termina con ;. Non contano i rientri e gli a-capo. L’istruzione per scrivere sul terminale è printf(), la f sta per formattato; è piuttosto complessa ma è la più semplice della sua famiglia (sapeste…!).
Un’ultima cosa, storica: %, ==, /= e \n sono nate in C e solo successivamente copiate da tutti quanti.

A questo punto abbiamo il codice, lo compiliamo (con Linux, con Windows sarebbe un po’ diverso), così:

comp

gcc è il GNU C compiler (in realtà compila non solo C ma il nome è rimasto); l’opzione -o serve per dare il nome all’eseguibile, nel nostro caso coll, segue la lista dei file da compilare, nel nostro caso il solo coll.c.
Se non ci sono errori gcc fa il suo dovere, in silenzio, e crea l’eseguibile (in questo caso coll, piccolissimo 7KB appena). Ma ancora non funzionerebbe. Dobbiamo abilitarlo, cioè dire al sistema operativo (Linux) che è un programma, nostro, di cui ci fidiamo:

chmod

+x sta per aggiungi l’attributo di esecuzione, mnemonico vero?
E finalmente:

coll

OK? come si vede anche un caso semplicissimo diventa più complesso dei linguaggi interpretati. E poi devo confessarvi un peccato che macchia la mia coscienza. Ho detto che avrei parlato del C++ e invece sono rimasto al suo papà il C. Non è cattiveria, l’ho fatto per voi: con il C++ sarebbe stato sostanzialmente simile ma avrei dovuto introdurre le classi e gli oggetti. Cose del tutto inutile in questo caso, anzi controproducenti.

Mi rendo conto che questo post è il più ingarbugliato della serie, non è colpa mia:

jessica

Programmazione nella Scuola Primaria – 9

3

Abbiamo visto nei post precedenti come si programma usando Python. Ma Python è l’unico gioco in città? (cit.)

No, tutt’altro abbiamo tante alternative, vediamone un paio, limitatamente all’esercizio di Collatz. Come già per Python lo espongo in modo elementare in modo che risulti immediatamente comprensibile. Poi quando si cresce si potrà fare come fanno i nerd.

Questa è la versione Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# collatz.py - prima versione

n = 42 # cambiare questo numero 

print n,
while n > 1:
	if n % 2 == 1:
		n = 3 * n + 1
	else:
		n = n / 2
	print n,
print '\nfatto!'

Ruby è un linguaggio di programmazione simile a Python, ecco come diventa lo script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# coll.rb - collatz in Ruby 1.9

n = 15
print n, " "
until n == 1
    if n.even?
        n = n / 2
    else 
        n = (3 * n + 1)
    end
    print n, " "
end
print "\nciao!\n"

rb

Tutto chiaro vero? A differenza di Python non conta il rientro e i vari blocchi vengono chiusi con la parola riservata end. Non ho resistito e la riga 6 l’ho scritta usando il metodo even?. Sì perché con Ruby tutto è un oggetto (ci sarebbe da fare un discorso lungo ma non è il luogo). Ovviamente potevo scrivere la riga in modo normale: if n % 2 == 0 che è esattamente cosa fa even?.
Benché usato principalemte per il web Ruby fa quasi tutto quello che fa Python e ha parecchi estimatori. Ovviamente c’è per Windows, gratuito, qui: RubyInstaller dove trovate manuali, tutorial e tutto quanto.

E che ne dite di Lua?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- coll.lua Collatz con Lua 5.0

n = 15
io.write(n, ' ')
while n ~= 1 do
    if math.mod(n, 2) == 0 then 
        n = n / 2
    else
        n = 3 * n + 1
    end    
    io.write(n, ' ')
end
print("\nciao!")    

lua

Molto simile ai precedenti. Non c’è l’operatore % (o non mi ricordo come si scrive) ma c’è la funzione mod, del modulo math. Lua (Luna in portoghese) è nato in Brasile dove è usatissimo (tutti i programmatori brasiliani che conosco usano Lua, ne conosco peraltro uno solo, ciao Lole!). Lua ha caratteristiche che si apprezzano solo quando il lavoro dventa non banale, cioè mi piace. Per Windows trovate tutto qui: luaforwindows.

Con l’installazione avrete a disposizione anche l’ambiente integrato SciTE, non sarete obbligati a usare il Blocco note.

E ci sarebbero ancora millemila alternative come il Basic o JavaScript. Ma poi il post diventerebbe troppo lungo. Però una cosa devo aggiungerla: il Lisp. Non una versione di quelle ufficiali (per il Lisp esistono tante varianti, molte più di quelle che riuscite a immaginare), una versione piccola, facile ed efficientissima: newLISP.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
; coll.nl Collatz con newLISP

(set 'n 15)
(print n " ")
(while (> n 1) 
    (if (= (% n 2) 0)
        (set 'n (/ n 2))
        (set 'n (+ (* n 3) 1)))
    (print n " "))
(print "\nciao!\n")
(exit) 

nl

Beh, sì, sembra diverso.
Per oggi basta così ma lo sapete che…

Programmazione nella Scuola Primaria – 8

picOggi l’ultima lezione di Python; finito questo saprete tutto quello che so io. Davvero! (OK, quasi, ma quasi tutto, davvero).
E, visto che la mia amica (e mamma anche se il figlio è ormai troppo grande per la primaria) A. mi ha sgridato: “parli di Windows ma usi Linux, si vede benissimo, me ne sono accorta anch’io!” oggi uso Windows.

Ieri abbiamo visto le funzioni, oggi vediamo come renderle disponibili per i vari programmi (script) che facciamo. Cioè vediamo cosa sono i moduli, quelli che a volte vengono chiamati librerie.

# file cose.py

# PI il valore di pi-greco
PI = 3.14159265

# funzione pari()
def pari(n):
	resto = n % 2
	if resto == 0:
		r = True
	else:
		r = False
	return r

# funzione dispari()
def dispari(n):
	return not pari(n)

# funzione ciao()
def ciao():
	print "\nciao!\n"

Ecco questo è il file cose.py che contiene una variabile PI (attenzione: le lettere maiuscole e quelle minuscole sono diverse) e 3 funzioni: pari(), dispari() e ciao().
L’ho creato con Blocco note nella cartella prove del disco C:. Poi ho aperto il Prompt dei comandi e ecco:

0

Per prima cosa sono andato nella cartella prove, con c: e poi cd \prove.
Con il comando dir ho verificato che Windows e il Blocco note non fanno quello che vorrei: aggiungono .txt al nome del file. Ho quindi usato il comando ren per rinominare i file cose.py e saluti.py e ripetuto dir per vedere che fosse tutto a posto. Semplice vero?

OK, siamo pronti per usa sessione Python, oggi lo usiamo in modo interattivo.

1

Ecco, per usare un modulo si usa l’istruzione import, seguita dal nome del modulo (senza il .py). Nell’esempio chiedo il valore di PI; devo scrivere il nome-del-modulo punto PI.

2

In alternativa posso usare questa forma per import; in questo caso PI viene visto senza dover usare il nome del modulo.

3

In questo modo importo tutto quello che c’è nel modulo.

Normalmente non usiamo Python in modo interattivo ma con script, eccone uno finale:

from cose import ciao

ciao()

4

Ecco, questo è tutto per Python; prossimamente un paio di alternative, programmi che possiamo usare al posto di Python, equivalenti in tutto e per tutto. E poi c’è sempre la minaccia del C++, quella che mi ha indotto a scrivere tutta questa serie di post — prossimamente.

Programmazione nella Scuola Primaria – 7

1

Oggi una cosa nuova: le funzioni.
Finora abbiamo visto programmi (di solito li chiamiamo script) piccoli, composti da poche righe ma in pratica questo capita raramente. Però senti che idea (vecchia come il cucco): suddividiamo lo script in parti logiche, esattamente come un libro è suddiviso in capitoli e il capitolo in paragrafi.
Ecco i componenti risultanti dalla suddivisione li chiamiamo funzioni. Vediamo subito un esempio:

# f0.py primo esempio di funzioni
# -*- coding: utf-8 -*-

# definisco la funzione pari
def pari(n):
	resto = n % 2
	if resto == 0:
		r = True
	else:
		r = False
	return r

# main, Python parte da qui

prompt = '\ndammi un numero intero, 10 per finire: '
n = input(prompt)
while n > 0:
	if pari(n):
		print n, 'è pari'
	else:
		print n, 'è dispari'
	n = input(prompt)

print 'ciao!'

Uh! quanta roba! Facciamo così: lo proviamo subito per vedere cosa succede e poi lo dissezioniamo.
Al solito salviamo il file scritto con Blocco note nella cartella prove del disco C: chiamandolo f0.py (controllare che Windows non bari) e lo lanciamo dal Prompt dei comandi con c:\python27\python f0.py; otteniamo qualcosa così:

f0

OK! vediamo perché.
Intanto una cosa strana nei commenti. Sappiamo già che son quelli che cominciano con il carattere # e vanno fino alla fine della riga. Ma a riga 2 c’è un commento mooolto particolare: un metacomando. Deve essere scritto esattamente così e essere nelle righe 1 o 2. La sua funzione è di dire a Python che vogliamo usare le lettere accentate, come definite nello standard UTF-8.

Saltiamo a riga 13, è qui che Python considera l’inizio del programma; in gergo viene detto il main (così i ‘mericani dicono per “principale”).
Riga 15 definisce solo una stringa che useremo più avanti, niente di nuovo.
Invece la riga 16 è nuova di pakka: assegna alla variabile n il valore ritornato dalla funzione input().
input() è una funzione predefinita, immediatamente disponibile, in gergo built-in. Opera in questo modo: scrive la stringa di prompt sul terminale e aspetta una risposta, seguita da Invio. A questo punto la funzione ha il valore di quello che abbiamo scritto e nel nostro caso viene assegnata alla variabile n.
Segue quindi un ciclo potenzialmente infinito alle righe 17-22. Il ciclo è semplice: se n è pari scrive che è pari, se è dispari scrive che è dispari (“d’ho!“, direbbe Homer Simpson), finché diamo 0 (o un numero negativo, non c’è gestione degli errori perché lo script risulterebbe inutilmente lungo).

Ma un momento: cos’è la funzione pari()? L’abbiamo definita noi, righe 5-11.
La definizione comincia con la parola riservata def (scrivere define –definisci– era troppo lungo) seguita dal nome che vogliamo dargli, una coppia di parentesi e il solito due-punti. Le parentesi sono obbligatorie, anche se dovessero essere vuote. Nel nostro caso invece gli passiamo il valore della variabile n. Non è qui il momento di approfondire ma c’è differenza tra la variabile n (è una posizione nella memoria) e il suo valore (in questo caso un numero intero positivo); peraltro questa differenza è la cosa più importante della programmazione “da grandi“.
La funzione è un sottoprogramma che fa cose normali, come farebbe qualsiasi programma. Nel nostro caso calcola il resto di n diviso 2 e assegna alla variabile r il valore booleano (logico) vero o falso a seconda che sia 0 o 1.
Nella riga 17 c’è l’istruzione di return: dice che la funzione pari() sarà il valore della variabile r.

Abbiamo così visto due tipi di funzioni: predefinite e fatte da noi.
Avevo anche pensato di dirvi che un Vero Programmatore™ la funzione pari() la scriverebbe in modo completamente diverso, molto più corta, magari usando lambda (fa geek) ma la trovate da altre parti. E sarebbe una complicazione inutile. Non ditemelo nei commenti, nèh! Ma se volete provate a farla.
E la funzione dispari() come la fareste? avendo la pari() basterebbe scrivere:

def dispari(n):
	return not pari(n)

e funziona. Una volta sarebbe stato vietato dal tuo capo perché la chiamata a pari() ha un costo (cioè impiega tempo) e ti avrebbe obbligato a rifarla come la pari() (basta cambiare l’if). Adesso, secondo me, sarebbe OK.

Chiaro? Domande? Continuo? Ci sarebbe da vedere dove si mettono le funzioni, quando ne abbiamo tante e vogliamo utilizzarle in programmi diversi. Prossimamente, forse 😉

Programmazione nella Scuola Primaria – 6

Maestra Rosalba parla di me! Qui: A proposito di coding, niente panico. Parla anche di Programma il futuro, di ben altro spessore rispetto a queste note. Ma sono cose diverse: io voglio solo far vedere agli insegnanti cos’è la programmazione. E smagare l’argomento, è una cosa talmente facile che ci riesco anch’io.

laptopsNel post precedente abbiamo visto che normalmente le istruzioni che formano il programma vengono eseguite nell’ordine in cui sono scritte. Cosa che però può variare come quando dobbiamo ripetere più volte una cosa simile. Abbiamo visto il caso delle tabelline dove è richiesta la moltiplicazione di un numero per 1, 2, … 10. Quella cosa viene chiamata ciclo. E in particolare quel ciclo è predefinito, sappiamo già che sarà eseguito 10 volte. Vediamo un caso semplice (che se non è molto semplice mica sono capace) in cui non sappiamo quante volte dovremo eseguirlo. Inoltre –due al prezzo di uno– vedremo anche come eseguire un’istruzione (o un gruppo di istruzioni, è la stessa cosa) sono se si verifica una particolare condizione.

Il programma ha un nome difficilissimo, congettura di Collatz. Ma niente panico, nèh!

# collatz.py - prima versione

n = 42 # cambiare questo numero 

print n,
while n > 1:
	if n % 2 == 1:
		n = 3 * n + 1
	else:
		n = n / 2
	print n,
print '\nfatto!'

Questo programma va scritto con il Blocco note nella cartella c:\prove, come raccontato la volta scorsa. Deve chiamarsi collatz.py, se del caso operate la magia sul nome come raccontato la volta scorsa.
Proviamo a vedere cosa fa, poi lo esamineremo in dettaglio. Aprinte il solito Prompt dei comandi, e eseguite (quello che dovete scrivere è in neretto):

c:
cd \prove
c:\python27\python collatz.py
42 21 64 32 16 8 4 2 1
fatto!

Se cambiamo la riga 3 mettendo 15 al posto di 42 otteniamo:

c:\python27\python collatz.py
15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
fatto!

OK? Esaminiamo in dettaglio il programma (ricordate che avevamo deciso di chiamare questo tipo di programmi script che fa più geek, o nerd, o saputi?).
Alla riga 3 assegno un valore alla variabile n. Come abbiamo visto precedentemente il segno # definisce un commento, ignorato da Python, lo usiamo nelle righe 1 e 3.
Alle righe 6-11 definiamo un ciclo indeterminato. Riga 6 tradotta diventa: “mentre la variabile n è maggiore di 1 fai”. Cosa fare è scritto nelle righe successive, rientrate rispetto a quella che definisce il ciclo.
Le righe 7-10 stabiliscono quale istruzione eseguire in funzione del verificarsi della condizione di riga 7. Riga 7 si legge così: “se il resto di n diviso 2 è uno fai”. Normalmente non diremmo “se n è dispari” ma il ‘puter non sa cos’è un numero dispari (poi glielo insegneremo, volendo).
Allora se n è dispari (riga 7) esegue riga 8 e cambia il valore di n che viene moltiplicato per 3 e poi aumentato di 1. Notare che riga 8 dipende da riga 7, quindi dev’essere rientrata.
Se invece la condizione “n è dispari” è falsa c’è l'”altrimenti fai” di riga 9. Questa riga dev’essere allineata con la 7 che stabilisce la condizione.
In questo caso verrà eseguita l’istruzione di riga 10 e a n verrà assegnata la sua metà.
In ogni caso verrà scritto il valore corrente di n, riga 11. Notare che se print finisce con una virgola non viene eseguito l’a-capo.
Usiti dal ciclo scriviamo un a-capo (\n, come abbiamo visto nel post precedente) e “fatto!“.

Semplice vero? Domande? Continuo?
Ci sono ancora le funzioni, i moduli e le alternative a Python.
E, come si diceva nel ’68 “ce n’est qu’un début”.

Programmazione nella Scuola Primaria – 5

Comincio con qualche segnalazione:

Perplessità? Qualcuno sa qualcosa di quello che fanno all’estero? Dai, non credo che saremmo noi gli unici, o almeno i primi!

bambiniIntanto io ne approfitto per far vedere com’è facile programmare. Finora abbiamo visto la modalità interattiva, scriviamo qualcosa e l’interprete Python risponde. Ma sarebbe scomodo se ogni volta dovessimo ripetere le stesse istruzioni. Per questo esistono i programmi.
Si usa normalmente parlare di script, come per la parte che deve recitare l’attore (il copione) o la lista della spesa o –insomma, dico la verità: non so come si traduce script. Possiamo chiamarlo programma.
È un semplice file di testo, quelli che otteniamo con Blocco note (Notepad in inglese). Esistono modi più amichevoli per creare lo script, li tratterò prossimamente. Per adesso quello che dovete fare è creare con Blocco note il documento primo.py come questo:

# esempio piccolissimo
# di script Python

print 'ciao!'
print "ecco un esempio"
print 'piccolissimo'
print 'di programma'
print 'scritto in Python'
print '\nsemplice vero?'
print

Vediamo com’è fatto. Le prime due righe sono commenti, vengono ignorate da Python ma sono utili per noi. Un commento inizia con il carattere # e finisce con la fine della riga.

Si possono inserire righe vuote che facilitano la lettura dello script, tenete presente che qualsiasi script prima o poi dovrà essere modificato e se è ordinato e non pasticciato non vi verrà il nervoso e il mal di testa.

Seguono tante righe che iniziano con print. “Print” vuol dire stampa, è un residuo archeologico di quando non esistevano ancora i monitor e le scritte finivano sulla stampante.
Dopo print segue una stringa (potrebbe esserci altra roba, lo vedremo tra poco). La stringa è qualsiasi scritta compresa tra apici o virgolette. Se print è da solo come nella riga 10 produrrà una riga vuota. Notare invece la combinazione di caratteri di riga 9: \n. Si chiama combinazione di escape, questa significa newline, linea nuova, a-capo.

Allora vediamo come fare. Dovete aprire Gestione file e creare la cartella prove sul disco C:. Il file primo.py dovrà essere in quella cartella. Windows spesso (ma non sempre, dipende da chissà quali impostazioni) aggiunge .txt al nome del vostro file; vedremo come trattare questa rogna.

A questo punto dovete lanciare il Prompt dei comandi (l’abbiamo visto recentemente) e andare nella cartella appena creata con cd c:\prove.
Se date il comando dir vedrete l’elenco dei file (documenti) della cartella, nel nostro caso c’è primo.py –forse. O forse no, ma in questo caso c’è prove.py.txt (atz! ecco!). Se c’è l’infame .txt lo togliamo con il comando ren primo.py.txt primo.py (ren sta per rename, rinomina). Se ripetete il comando dir vedrete che è tutto OK. E a questo punto potete lanciare Python con c:\python27\python primo.py ottenendo questo:

primo

Facile vero? Ma in fondo abbiamo solo chiesto di ripetere stringhe così com’erano. Vediamo un caso più realistico, una cosa che serve anche ai ragazzi, una tabellina. Anzi quella più difficile, quella del 7.

# la tabellina del 7

numero = 7
for volte in range (1, 11):
	risultato = numero * volte
	print numero, 'x', volte, '=', risultato

print 'fatto!'

Chiamate il file tab-7.py, facendo se del caso lo stesso esorcismo di prima.

Allora: la prima riga è un commento. In riga 3 assegno alla variabile numero il valore 7.
Esaminiamo riga 4. Traduco: per volte (è una variabile) nell’intervallo che va da 1 a 11 (escluso) fai. Sembra sensato vero?
Fai cosa, però? Ecco cosa fare lo dice il blocco delle righe 5 e 6. Sappiamo che è un blocco di istruzioni perché sono rientrate (tutte dello stesso numero di spazi) rispetto al fai (in realtà :) della riga immediatamente precedente.
Riga 5 mette nella variabile risultato il valore della moltiplicazione di numero (cioè 7 per via di riga 3) per volte (che varia nell’intervallo definito in riga 4; volte è il contatore del ciclo, sì for è un ciclo).
Riga 6 scrive quanto ha appena calcolato. print l’abbiamo già conosciuta ma qui vediamo che scrive 3 numeri e 2 stringhe. L’elenco delle cose da scrivere lo dobbiamo separare con virgole.

Dopo una riga vuota per rendere più leggibile lo script c’è un’ultima scritta. Siccome siamo usciti dal ciclo delle righe 4-6 dobbiamo allineare print in colonna 1 (inizio della riga). Con il comando c:\python27\python tab-7.py ottengo

tab-7

Über-facile, vero? Quasi-quasi mi pento di avervi svelato il segreto, mi sono smagato.
E mica finisce qui: c’è un’ultima chicca. Se cambiate l’istruzione di riga 3, sostituendo il 7 con un altro valore otterrete la tabellina di questo. Per dire anche 9, 42, 314159265. O anche di numeri non interi (chissà se si usano le loro tabelline?). Restano esclusi solo i numeri speciali come unmucchio e ventidodici.