Libro Python 3
Libro Python 3
PYTHON
PREMESSA
Abbiamo realizzato questa versione del nostro manuale , dedicata agli studenti della scuola primaria
e secondaria di primo grado, sperando che possa costituire una facile, e accattivante, base per
imparare i fondamenti logici della programmazione.
Convinti che i concetti logici della programmazione informatica, opportunamente mediati, possano e
debbano far parte del bagaglio culturale dei ragazzi, abbiamo ideato una serie di schede che, passo
dopo passo, consentiranno agli alunni “in erba” di avviare un percorso di conoscenza e di esperienza che
li porterà, un po’ più avanti nel tempo, ad acquisire le capacità necessarie a padroneggiare in maniera
consapevole il mezzo informatico.
Nella strutturazione del percorso di conoscenza, così come nell’organizzazione dei contenuti e nella
scelta della veste grafica, sono state adottate soluzioni utili a consentire un uso del manuale quanto più
autonomo da parte:
- degli alunni, che potranno scaricare liberamente i materiali dalla rete
- dei docenti che potranno liberamente disporne per le proprie lezioni
Il manuale è stato creato anche per essere fruito on line sulle piattaforme per la didattica oggi
più diffuse.
- Sul portale FARE (fare.polito.it) sono inoltre disponibili e liberamente scaricabili altri
materiali utili ad approfondire i temi qui trattati.
La scelta del linguaggio di programmazione Python non è casuale. Esso risponde infatti a molti
requisiti da noi ritenuti fondamentali. Tra questi:
• libero
• didatticamente adeguato
• attuale
• possibilità di utilizzo e di approfondimento nel tempo
• diffusione nella pratica informatica
• dimensione e importanza delle librerie associate
fare.polito.it/python
Al fondo del libretto sono riportati i link dei siti dai quali sono tratte le immagini utilizzate nel testo.
Gli Autori
2
Lezione 1: usare Python come calcolatrice
Per ottenere questo risultato dobbiamo dare al computer, secondo un certo ordine,
delle istruzioni. Il programma e’ l’insieme ordinato di queste istruzioni.
Per prima cosa dobbiamo saper accendere il computer e “parlare” con lui, in modo da
riuscire a comunicargli queste istruzioni e a fargliele eseguire correttamente.
Un modo rapido per chiedere al calcolatore di collegarci a Python consiste nel fare
“clic” sulla icona del programma chiamato “browser” che serve per “navigare” sulla
Rete Internet, ossia per collegarci a uno delle molte migliaia di siti oggi disponibili e,
successivamente, nello scrivere nella riga in alto (nella barra di ricerca):
fare.polito.it/python che è il nome del sito dove risiede il nostro programma Python.
Nella finestra di sinistra si scriveranno gli ordini per Python e quindi questa finestra
sarà chiamata “finestra degli ordini”; nella finestra di destra, che sarà chiamata
“finestra delle risposte”, compariranno i risultati del calcolo ed eventuali messaggi nel
caso si siano commessi degli errori.
A questo punto possiamo iniziare a lavorare con Python.
3
Se vuoi chiedergli quanto fa 2+3, devi scrivere: print(2+3) nella finestra degli ordini.
Poi clicchi sul tasto “esegui” nella barra dei menù in alto. Il computer ti risponderà
facendo comparire il risultato (5) nella finestra delle risposte.
In questo modo puoi fare tutte le operazioni che vuoi, anche le più difficili.
La parola inglese “print” significa “stampa”, ma viene usata anche nei programmi per
chiedere al calcolatore di “visualizzare” (o farci vedere nella finestra dei risultati) il
risultato di un calcolo o di un programma.
Ricorda che:
il simbolo + è il comando per eseguire una somma;
il simbolo – è l’ordine di eseguire una sottrazione;
il simbolo * indica una moltiplicazione;
i simboli / e // indicano la divisione.
Esempio: devi digitare :
print(2+3)
print (15-11) print(15-11)
4 …
e poi cliccare su “esegui”.
print (2*3)
6
print (15/5)
3
Ora impariamo anche l’uso del simbolo **che viene chiamato “elevato a” e che ha il
significato mostrato nei seguenti esempi:
PRIMO ESEMPIO:
print(2**3)
8
(ossia 2*2*2, tre volte)
SECONDO ESEMPIO:
print(2**4)
16
(ossia 2*2*2*2, 4 volte)
Verifica ancora:
print (15/4) (e poi esegui) otterrai:
3.75
Se invece scriviamo:
print (5//2)
2
print (5.0//2.0)
2.0
otteniamo la parte intera del risultato della divisione.
In sintesi, Python possiede due divisioni che si ottengono con i due simboli / e //. La
prima divisione genera numeri con virgola, la seconda divisione produce la parte intera
del risultato.
Fai attenzione. Gli americani, quando usano i numeri decimali, usano il punto (.) e non
la virgola. Anche noi dobbiamo usare il punto. Per conoscere il doppio di 2.75 dobbiamo
scrivere:
print (2.75*2)
Si possono scrivere nella stessa istruzione tante operazioni una dopo l’altra che
verranno eseguite nell’ordine con cui sono scritte, con qualche differenza. Infatti
prima bisogna eseguire gli ** e poi i * o / e infine i + o i -. Ecco alcuni esempi.
print (4+2*3)
10
print (6/2-1)
2
5
print(10+3*2**3)
34 (Infatti il calcolatore prima calcola 2**3 =8, poi calcola 3*8 =24 e infine calcola
10+24 =34).
print((2+3)*4)
Riassumendo: Python segue le stesse regole della matematica per quanto riguarda
l’ordine di esecuzione delle operazioni:
Prima le parentesi (partendo da quelle più interne), poi l’elevamento a potenza, poi
moltiplicazione e divisione e infine somma e addizione. Quando due operatori hanno la
stessa priorità si procede da sinistra verso destra.
Esercitiamoci un po’.
Hai dei dubbi o non ti ricordi qualche argomento e ti servirebbe un ripasso del libro?
Facendo “clic” sul pulsante in alto “apri il libro” si aprirà una finestra che chiameremo
“finestra del libro” dove potrai liberamente consultare il testo del nostro manuale.
Al termine, clicca sul pulsante “chiudi il libro”.
6
Lezione 2: Le Scatole
Le nostre scatole sono del tutto simili a quelle che vediamo nella figura sopra.
Ogni scatola che noi creiamo deve avere un nome.
Il nome che assegniamo alla scatola è l'equivalente dell'etichetta sulla scatola .
Ovviamente dovremo scegliere dei nomi significativi per le nostre scatole per
ricordarci a cosa servono.
Ad esempio: SCATOLA1, SCAT1, SAL1, SALAME, PIPPO, PIPPO4C, SCARPONIASI.
Sono validi anche nomi molto corti come: A, B, C, A1, B3 o lunghi come:
ILNOMEPIULUNGOCHEMIVIENEINMENTEPERILMIOCANE
7
Il carattere di sottolineatura (_) può far parte di un nome ed è spesso usato in nomi
di scatole composti da più parole. Ad esempio:
il_mio_nome il_prezzo_del_pane
In alternativa i nomi possono essere composti usando l'iniziale maiuscola per ciascuna
delle parole componenti il nome della variabile, con il resto dei caratteri lasciati in
minuscolo come in :
IlMioNome IlPrezzoDelPane
Prova a scrivere su Python le due istruzioni precedenti scritte in rosso e poi clicca su
esegui. Osserva il risultato.
Non e' possibile invece “battezzare” la nostra scatola con nomi come 1A, 3P, 4SAL
perché il suo nome non può iniziare con un numero. Assegnando un nome di questo
tipo ad una scatola otterremo un messaggio di errore. Il calcolatore ci dirà che il
nome che abbiamo usato e' illegale ma non dirà perché è illegale, e quindi dovremo
scoprirlo noi.
76strumenti
SyntaxError: invalid syntax
milione$
SyntaxError: invalid syntax
lambda
SyntaxError: invalid syntax
Come mai?
Il nome 76strumenti e' illegale perché non inizia con una lettera,
milione$ e' illegale perché contiene un carattere proibito, il $,
lambda e' illegale perché è una delle parole riservate di Python.
8
Tutti i linguaggi di programmazione hanno alcune parole riservate che non possono
essere usate come nomi delle scatole.
Il nome di una scatola non cambia mai mentre il suo contenuto cambierà spesso.
9
Ad esempio la scatola PIPPO potrà contenere, in un certo momento, il numero 8, poi il
numero 999 e quindi il numero 2.5 e così via.
1
tola
Sca
Nome della scatola
10
Lezione 3: Le Variabili
l’istruzione di assegnazione e l’istruzione di stampa
Il modo più semplice per farsi consegnare una scatola dal calcolatore, darle un nome e
riempirla con un numero e’ quello di scrivere una frase come la seguente, che è
chiamata “istruzione di assegnazione”:
SCATOLA1=7
Se la scatola di nome SCATOLA1 non è mai stata usata, Python crea una scatola nuova,
la chiama SCATOLA1 e pone il numero 7 in quella scatola. Se invece la scatola di nome
SCATOLA1 è già stata usata, Python toglie il suo vecchio contenuto e mette il numero
7 come suo nuovo contenuto.
Questo nome ci ricorda che il contenuto di una scatola può cambiare da un momento
all’altro.
Ad essa e’ possibile assegnare un valore con l’istruzione di assegnazione.
L’istruzione di assegnazione contiene un ordine per il calcolatore e costituisce un
nuovo esempio di “istruzione”, ovvero un’operazione che Python capisce ed e’ in grado
di eseguire.
L’istruzione di assegnazione e’ costituita dal nome della scatola seguito dal segno =.
Ad esempio:
SCATOLA1 = 7
SCATOLA2 = 3.14
Il contenuto di una scatola può anche essere un carattere o un messaggio (ossia una
sequenza di caratteri).
SCATOLA3 = "come va?"
Quindi in una scatola posso introdurre numeri con o senza virgola, come nei primi due
esempi, oppure messaggi come nel terzo esempio. I messaggi sono fatti da tanti
caratteri compresi tra un simbolo ” prima del primo carattere e un secondo simbolo
“ dopo l’ultimo carattere.
Osserva ancora: il simbolo = non ha il significato matematico che conosci. Infatti,
nell'istruzione di assegnazione :
SCATOLA1 = 7
il simbolo = significa: nella scatola di nome SCATOLA1 metti il numero 7.
11
Come abbiamo visto negli esempi precedenti, con l’ istruzione di stampa print
possiamo ordinare al calcolatore di comunicare il contenuto di una scatola.
Facciamo un esempio:
scatola1 = 8+4
print (scatola1)
3.1 Scrivi in Python questa istruzione per il calcolatore: dammi la scatola GAIA3 e
mettici dentro il numero 1.
12
FACCIAMO UNA BREVE INTERRUZIONE.
Nel Natale del 1989 Guido decise di passare le vacanze scrivendo un linguaggio di
programmazione per il calcolatore che correggesse i difetti che, secondo lui, erano
presenti in altri linguaggi. E così fece, creando uno tra i linguaggi di programmazione
più moderni e diffusi nel mondo.
Dopo di lui moltissimi altri sviluppatori hanno proseguito ed ampliato il suo lavoro.
A Guido piaceva tantissimo un gruppo di comici inglesi famosi negli anni sessanta del
secolo ‘900: i Monty Python. A loro e alla loro comicità un po’ demenziale ha dedicato il
suo lavoro. Niente a che vedere, quindi, con il nostro simpatico pitone verde.
Guido, dopo tanta fatica, ha deciso di donare a tutti il suo lavoro, così oggi noi
possiamo disporre liberamente e gratuitamente di questo linguaggio. Un regalo di
Natale molto speciale.
Per adesso grazie a Guido e a tutti coloro che hanno continuato, e continuano, la sua
opera.
Per noi, un motivo in più per impegnarci a fondo ad imparare la programmazione.
13
ESERCIZI
Esercizio n°1:
Il mago Silvan fa tanti giochi di magia: dal suo cappello a cilindro escono tre conigli
bianchi e due neri. Quanti conigli sono nascosti nel cappello?
Esercizio n°2:
Al mago Berri invece piace fare le magie con le maxi-carte: sono così grandi che quasi
non stanno sul tavolo!
Se ciascuna carta è lunga cm. 45 e larga cm. 30, quanto
è grande la superficie di ciascuna carta?
Esercizio n°3:
Quale superficie del tavolo occupano le carte con i quattro
Assi usati dal mago Berri per i suoi giochi di magia, affiancati per il lato più lungo?
Esercizio n°4:
Il mago Gian ha un bellissimo mantello di seta nera ricamato con tante stelle
argentate. Per farlo il sarto ha utilizzato ben 5 metri di stoffa. Se la stoffa costava
13 € al metro, quanto ha speso per comprarla?
Esercizio n°5:
Se un mantello costa 80 €, un cappello a cilindro 45 €, una bacchetta magica 20 €, un
mazzo di maxi-carte 13 €, quanto costa l’attrezzatura per fare il mago? Se tutti i 37
alunni della scuola di magia sono vestiti come il mago, quanto è costata la loro
attrezzatura?
14
Lezione 4: Dati e tipi di Dati
Dei numeri abbiamo già parlato nel capitolo precedente, mentre un carattere è un
simbolo come, ad esempio, la lettera “a” minuscola, la “Q” maiuscola, la cifra “7”, il
simbolo “+”, e qualunque altro simbolo che compaia sulla tastiera del tuo PC (preceduto
e seguito da virgolette”).
Una stringa è un qualsiasi messaggio, quindi una serie di caratteri, numeri,
lettere o altri simboli presenti sulla tastiera, compresi tra virgolette, che il
computer può stampare tali e quali sul video.
In Python le stringhe possono presentarsi in diversi modi:
tra virgolette semplici: ‘ciao’
tra virgolette doppie: “ciao”
tra virgolette doppie ripetute tre volte: “””ciao”””
Ad esempio:
SCATOLA1 = "scuola elementare"
print (SCATOLA1)
Il risultato sarà:
scuola elementare
16
Eseguendo i seguenti comandi:
print ("MATEMATICA")
print ("Via Roma 100")
print ("Area")
print ("++++****++++")
visualizzeranno rispettivamente:
MATEMATICA
Via Roma 100
Area
++++****++++
Nell’esempio: print (“3 per5 “ , ”è uguale a “,3*5) osserva che la print è composta
da due stringhe e poi da un numero, separati da due virgole.
Se vuoi fare visualizzare più oggetti sulla stessa riga devi separarli con una
virgola.
Nel tuo caso hai detto a Python: visualizzami la stringa "5*3= " così com'è e subito
dopo hai aggiunto: visualizzami il risultato della moltiplicazione tra i numeri 5 e 3.
17
Nell’esempio successivo cambia solo l’ordine con cui devono essere eseguiti gli ordini,
in questo caso prima l’operazione su numeri e poi la stringa:
scatola2 = 14+8
print ("14+8= ", scatola2)
Il risultato sarà: 14+8= 22
scatola3=5*3
print ("5*3= ", scatola3)
Il risultato sarà: 5*3= 15
18
Dati e tipi di dati (operazioni sulle stringhe)
Numeri interi e decimali possono essere utilizzati per operazioni matematiche.
Viceversa, se una stringa contiene l’indicazione di un’operazione aritmetica, questa non
viene eseguita ma trascritta carattere per carattere.
Scrivere: "ciao"/12 oppure "18"+5
e' sbagliato e genera un SYNTAX ERROR
Tuttavia gli operatori + e * , e soltanto questi, possono essere utilizzati anche con
le stringhe ma in questo caso hanno un significato diverso da quello della somma e del
prodotto.
Se ad una stringa viene sommata un'altra stringa l'effetto che si ottiene e' il
concatenamento, cioè la seconda stringa si aggiunge al fondo della prima.
Ad esempio:
print("casa"+" dolce "+"casa") genera a video:
casa dolce casa
Gli spazi prima e dopo la parola “dolce” fanno parte della stringa e sono necessari,
altrimenti a video le stringhe concatenate sarebbero attaccate come un'unica parola,
come succede scrivendo: print(“casa”+”dolce”+”casa”).
Se invece vogliamo ripetere tante volte la stessa stringa (questo effetto si chiama
ripetizione) possiamo moltiplicarla per un numero intero usando l'operatore *.
Ad esempio:
"ciao"*3 diventa ciaociaociao
"ciao "*3 diventa ciao ciao ciao
"Ha, "*5 diventa Ha, Ha, Ha, Ha, Ha,
(Nota bene: la barretta colorata indica lo spazio che va
inserito nel secondo e nel terzo esempio)
Possiamo anche mettere una stringa in una scatola, ossia assegnare una stringa ad una
variabile e poi applicare le operazioni possibili sulle stringhe.
Ad esempio:
SCATOLA1 = “casa ”
SCATOLA2= “dolce casa”
print (SCATOLA1 + SCATOLA2)
casa dolce casa
19
Esercitiamoci un po’
4.1 Scrivi le istruzioni necessarie per far comparire sul video la scritta:
Cinque per tre e' uguale a 15.
(Puoi ottenere questo risultato con o senza scatole, ossia variabili. Trova le varie
soluzioni).
4.2 Scrivi tutte le sequenze di istruzioni possibili per visualizzare il messaggio “Buon
Compleanno” cinque volte.
4.3 Scrivi la sequenza di istruzioni per visualizzare il tuo nome e cognome in due
stringhe separate.
4.7 Scrivi le istruzioni per visualizzare cinque volte il messaggio “In classe è arrivato
un nuovo compagno”.
4.8 Scrivi le istruzioni per ottenere che nella scatola1 ci sia 12, nella scatola2 ci sia
anni e che il computer stampi: ’ domani compirai 12 anni’ .
20
Lezione 5: primi Programmi
La COPIATURA
O TO
PP PLU
PI
15 15
T O
PP
O PLU
PI
21
Vediamo cosa succede invece se scriviamo:
PLUTO = PIPPO,
quando
PIPPO = 5 e PLUTO = 15
PIPPO=5
PLUTO=15
PIPPO = 5
print ("PIPPO = ", PIPPO)
PLUTO = 15
print ("PLUTO = ", PLUTO)
Dopo l’esecuzione dell’istruzione
PLUTO = PIPPO
PLUTO = PIPPO
print ("Dopo l'esecuzione dell'istruzione PLUTO = PIPPO“)
PIPPO = 5
print(“PLUTO = ", PLUTO) PLUTO = 5
22
L’ INCREMENTO
PIPPO = PLUTO + 3
dell’operazione.
A questo punto, che cosa conterrà PIPPO e che cosa conterrà PLUTO?
Osserva ancora che il nome della scatola a destra dell’uguale indica il suo contenuto,
mentre il nome della scatola a sinistra precisa la scatola che conterrà il risultato.
18 15
O TO
PP PLU
PI
23
Lo SCAMBIO
nella quale riponiamo il contenuto di una delle due scatole. Cosa fa il computer?
MINNIE =.....
MICKEY …...
PARK=.....
24
Prima di proseguire prova a eseguire questo esercizio:
INPUT
Finora abbiamo visto come inserire un numero o una stringa in una scatola, cioe un
dato in una variabile utilizzando le istruzioni di assegnazione del tipo:
Oltre a questo, esiste un altro modo, molto importante, per introdurre un numero o
una stringa in una scatola, rappresentato dall’istruzione input.
scatola = input(prompt)
dove:
scatola e il nome della scatola nella quale inserire un nuovo dato;
input e il comando che diamo al computer e che serve a inserire un dato qualunque
nella scatola. Quel dato e indicato dall’utilizzatore del programma attraverso la
tastiera.
prompt e un messaggio che diamo all'utilizzatore perchi sappia quale dato deve
inserire da tastiera.
25
Ad esempio con:
Quando il computer legge la parola input, si ferma e attende che l'operatore inserisca
un dato dalla tastiera.
Per far capire al computer quando il numero e’ finito, l’operatore preme il tasto Invio
(o Enter). A questo punto il programma riprende e input interpreta cie che l'operatore
ha inserito da tastiera come una stringa di caratteri e lo mette nella scatola indicata.
print ("Tu hai ", Anni, " anni") Stampa prima la stringa “Tu hai ”, poi il
contenuto della scatola Anni e infine la
stringa “ anni”.
26
Vediamo un altro esempio. Il programma seguente:
darà come risultato la parola “Ciao ” seguita dal contenuto della scatola chiamata “s”
Se manderai in esecuzione il programma tante volte inserendo sempre un nome diverso
il risultato sarà:
Ciao Paola
Ciao Alda
Ciao Marco
Il dato inserito da tastiera e sempre considerato da Python come una stringa di
caratteri. Ad esempio, se il programma precedente dove si chiede “quanti anni hai?”
proseguisse con l’istruzione:
print(“Io ho “, Anni *2,”anni”)
scritta per dire “il doppio dei tuoi anni”, si vedrebbe il dato introdotto dall’utilizzatore
scritto due volte di seguito. Se l’utilizzatore avesse scritto “8”, il messaggio sul video
sarebbe:
“Io ho 88 anni”
Prova a verificare scrivendo il programma su Python.
27
Prova ora ad inserire dei caratteri che non rappresentino un numero e osserva quale
sarà il nuovo risultato. Sfortunatamente se i caratteri inseriti dall'operatore non
rappresentano un numero, il programma stampa un messaggio d'errore e si blocca
perchi int(input()) e float(input()) funzionano soltanto con i numeri.
Esercitiamoci un po’
5.3 Scrivi un programma che chiede due numeri, li somma e visualizza il risultato.
5.5 Scrivi il programma che chieda tre numeri e ne visualizzi sia la somma sia il
prodotto.
28
5.6 Scrivi il programma che calcola la metà e il doppio di qualunque numero inserito
dall’utente e visualizza i risultati.
5.7 Scrivi il programma che chiede la misura del lato di un quadrato e ne calcola l’area,
poi visualizza il risultato.
5.8 Scrivi il programma che calcola il perimetro del cortile della scuola che e un
rettangolo i cui lati misurano rispettivamente 45 m e 65 m e visualizza il risultato.
Quindi calcola il perimetro di ogni rettangolo per il quale l’operatore inserisca la
misura della base e dell’altezza.
5.9 Scrivi un programma che chieda tre numeri, ne calcola la somma, la somma dei
quadrati e il quadrato della somma. Infine, visualizza i risultati.
CACCIA ALL’ERRORE!
29
5.12 Domanda di filosofia
Print ("*****")
print ("*****")
30
Lezione 6: le Istruzioni Condizionali if e if...else
Supponiamo di voler mandare un messaggio gentile a chi usa il nostro programma. Nello
scrivere il programma ci accorgiamo che il messaggio e' diverso a seconda che il
nostro interlocutore sia una femmina oppure un maschio.
Allora gli chiediamo se e' femmina o maschio e poi scriviamo un messaggio se e' una
femmina, un messaggio diverso se e' un maschio. Come fare? Usiamo l’istruzione:
if
L'istruzione che ci permette di scegliere cosa fare si chiama if, che in inglese
significa SE.
Questo e' il codice del programma che descrive l'esempio appena fatto :
Osserva nell’esempio precedente che occorre scrivere prima la parola if, poi la
condizione poi i : (due punti), e infine l’elenco delle cose da fare, scritte un poco a
destra nella riga successiva, secondo questo schema:
31
Hai notato che nell’esempio precedente abbiamo usato un
nuovo carattere? E' il segno di uguaglianza == (doppio uguale)
che utilizziamo per indicare “uguale a” .
Questo perché in Python il simbolo di uguale ( = ) ha il
significato: “metti nella scatola”.
Oltre al segno di uguaglianza esistono i segni di
disuguaglianza. Li utilizziamo quando occorre indicare una
condizione di confronto come indicato nella tabella seguente:
Adesso che abbiamo imparato i nuovi segni, vediamo due esempi di programmi:
Quando la condizione e' soddisfatta, si esegue l'istruzione che segue i due punti (:),
altrimenti non si fa nulla.
32
Consideriamo l’esempio:
Il voto e' maggiore o uguale a 6?
Allora sei promosso!
struttura esempio
if <condizione> : if voto >= 6:
<istruzione> print (“promosso”)
Come già accennato, l’istruzione deve stare più all’interno della prima riga (hai
presente i margini del foglio? Se la prima riga è allineata al margine sinistro, le linee
successive devono stare più a destra). Si dice che devono essere “indentate”.
Dopo la “condizione” anziché una sola istruzione, come negli esempi precedenti,
possono essere scritte due o più istruzioni:
struttura esempio
if <condizione> : if voto >= 6:
<istruzione1> print (“promosso”)
<istruzione2> print (“mamma contenta”)
Non c'è un limite al numero di istruzioni che possono comparire nel corpo di
un'istruzione if ma deve sempre essercene almeno una.
La prima riga di istruzioni che non sta più all'interno (che non e' più “indentata”)
segnala al computer la fine del blocco di istruzioni e non ne fa parte.
if 5 > 10:
print ("sun")
print ("moon")
33
Vediamo ora un esempio in cui e' un po' più complicato
prendere una decisione perché consideriamo più
condizioni insieme:
Per semplificare la scrittura di questo ultimo programma, possiamo usare tre nuovi
operatori chiamati or, and, not:
Operatore Significato
or “oppure”
and “e inoltre”
not “non”
Usando gli operatori logici, l’ultimo programma che abbiamo scritto diventa molto
semplice:
Vediamo alcuni esempi concreti in cui questi nuovi operatori sono necessari.
and
or
SE in un triangolo la lunghezza del lato1 e quella del lato2 sono uguali OPPURE sono
uguali le lunghezze del lato1 e quella del lato3, oppure sono uguali le lunghezze del lato
2 e del lato 3, allora il triangolo è isoscele.
not
IF…ELSE
Il blocco di programma:
if condizione:
istruzione
istruzione
…
può essere arricchito introducendo la parola inglese “else” che significa “altrimenti”
nel modo seguente:
if condizione:
istruzione
istruzione
…
35
else:
istruzione
istruzione
...
if x < 3:
print ("x è minore di 3")
else:
print ("x non è minore di 3")
Se voto e' >= 6 stampo “promosso”, se voto e' < 6 stampo “bocciato”
voto = int(input("che voto hai preso? "))
if voto >= 6 :
print ("promosso!")
else:
print ("bocciato!")
36
risposta = input("Vuoi sapere come calcolare l'area del rettangolo? (S/N) ")
if risposta == "S":
print ("devi moltiplicare la base per l'altezza")
else:
print ("Spero che tu lo sappia”)
if...elif...
Purtroppo molte volte ci sono più di due possibilità di scelta e quindi abbiamo bisogno
di un’altra soluzione. Usiamo l’operatore:
elif
37
x = int(input("indica il numero x "))
y = int(input("indica il numero y "))
if x < y:
print (x, "e' minore di", y)
elif x > y:
print (x, "e' maggiore di", y)
else:
print (x, "e", y, "sono uguali")
numero = 78
indovina = 0
print (“indovina il numero che ho in mente”)
indovina = int (input (“inserisci il numero:”))
if indovina > numero:
print (“troppo alto”)
elif indovina < numero
print (“troppo basso”)
else:
print (“GIUSTO!”)
38
print (“Stampa se un numero è pari o dispari”)
numero = int (input (“scrivi un numero: “))
if numero %2 == 0:
print (numero, “ è pari”)
elif numero%2 == 1:
print (numero, “ è dispari”)
Esercitiamoci un po’
6.2 Che cosa fa il computer quando non e' soddisfatta la condizione introdotta da if?
6.3 Scrivi un esempio di uso dell’operatore if in cui compaia l’operatore and, una in cui
compaia or e uno in cui compaia not.
6.5 Scrivi il programma che controlla il risultato di una addizione, dati due numeri.
6.6 Scrivi un programma che dati due numeri, li visualizza in ordine crescente (o
decrescente).
6.7 Scrivi un programma che dia consigli per i vestiti se piove, se nevica e se fa
freddo.
6.8 Scrivi il programma che chiede di indicare l'autore di un libro, se e' sbagliato
stampa “risposta errata”, se e' corretto stampa “risposta esatta” e prosegue a
chiedere un altro autore per un altro libro (puoi ripeterlo quante volte vuoi)
Per esercitarti un po' di più puoi scrivere lo stesso programma per i seguenti
argomenti: calciatori e squadre di calcio, nazioni e capitali, città e nome degli abitanti.
39
Lezione 7: le Funzioni
Impariamo insieme :
• cos’è una funzione
• quando è utile usare una funzione
• come si definisce una funzione
• come si fa a chiamare una funzione
Hai osservato come il programmatore nel trattare la seconda risposta ripete molte
cose che aveva già scritto per la prima ? Questo non è né comodo né veloce.
Fortunatamente esiste in Python, come in molti altri linguaggi di programmazione, un
meccanismo semplice per specificare una sola volta le operazioni ricorrenti e per
richiamare quelle operazioni ogni volta che ci servono.
40
Una funzione è, in sostanza, un pezzo di programma cui viene dato un nome, una
sequenza di istruzioni per eseguire una determinata sequenza di operazioni, che può
essere utilizzata tante volte nel corso di un programma.
1. preparare i croissant
2. fare il caffè
3. scaldare il latte
Nel caso del nostro esempio del programma degli “scrittori” si deve chiedere al
cameriere, ossia alla funzione, di eseguire le seguenti operazioni:
Il nostro “servente”, ossia la funzione, dovrà eseguire proprio queste operazioni, ogni
volta che porremo una nuova domanda. Al cameriere, ossia alla funzione, sarà
sufficiente indicare la domanda e la risposta esatta.
41
DOMANDA sarà il nome della scatola contenente la domanda.
RISPOSTA_ESATTA sarà la scatola destinata a contenere la risposta esatta.
Tutto questo andrà scritto su una sola riga, che sarà la prima linea della
funzione.
DEFINIZIONE DI FUNZIONE
Questa linea indica a Python che vogliamo definire un blocco di istruzioni che potrà
essere eseguito a richiesta in un qualunque altro punto del programma semplicemente
scrivendo il suo nome (interrogazione), dopo aver indicato la domanda e la risposta
corretta.
Ricordati di mettere sempre i due punti dopo le parentesi e di indentare nel modo
corretto, come puoi vedere negli esempi seguenti. La prima linea del programma non
più indentata segnala a Python la fine della funzione.
Dopo la definizione, occorre scrivere la funzione, cioè il programma che lavorerà sulle
scatole indicate. Nel nostro caso:
Confrontiamolo ora con il pezzo di programma da cui siamo partiti e che non volevamo
ripetere tante volte.
42
Notiamo subito che il codice è diventato molto più generale perchè tutte le risposte
sono scritte dentro le variabili che potranno assumere valori diversi in situazioni
diverse.
Mentre il programma valeva solo per domande sugli scrittori, la funzione può essere
usata in un programma che pone domande di storia, di geografia, di calcio ecc.
La seguente tabella mostra come è nata la funzione a partire dal programma base.
Programma Funzione
if risposta == "Manzoni": def interrogazione (domanda,risposta_esatta):
risposta_allievo = input (domanda)
print ("la risposta è esatta")
if risposta_esatta == risposta_allievo:
print ("bravo!!")
print ("La risposta è esatta")
else: print ("Bravissimo")
print ("risposta errata!") else:
print ("la risposta esatta è: Manzoni") print ("Risposta errata")
print (" La risposta esatta è ",risposta_esatta)
print ("Studia di più")
print ("studia di più!")
Nota bene: puoi usare qualsiasi nome per una funzione, tranne le parole riservate di
Python.
CHIAMATA DI FUNZIONE
domanda1 = "chi e' l'autore dei Promessi Sposi? " PRIMA CHIAMATA
risposta_esatta1 = "Manzoni"
interrogazione (domanda1, risposta_esatta1)
domanda2 = "chi e' l'autore della Divina Commedia? "
risposta_esatta2 = "Dante" SECONDA CHIAMATA
interrogazione (domanda2, risposta_esatta2)
43
Fermiamoci a riflettere e a riassumere ciò che abbiamo detto
finora a proposito di programmi e del flusso di esecuzione delle
singole istruzioni.
senza con
risposta1 = input ("chi e' l'autore dei Promessi def interrogazione (domanda,risposta_esatta):
Sposi? ") risposta_allievo = input (domanda)
if risposta1 == "Manzoni": if risposta_esatta == risposta_allievo:
print ("la risposta e' esatta") print ("La risposta e' esatta")
print ("bravo!!") print ("Bravissimo")
else: else:
print ("risposta errata!") print ("Risposta errata")
print ("la risposta esatta e': Manzoni") print ("La risposta esatta e' ", risposta_esatta)
print ("Studia di piu'") print ("Studia di piu'!")
risposta2 = input ("chi e' l'autore della
Divina Commedia? ") domanda1 = "chi e' l'autore dei Promessi Sposi? "
if risposta2 == "Dante": risposta_esatta1 = "Manzoni"
print ("la risposta e' esatta") interrogazione (domanda1, risposta_esatta1)
print ("bravo!!") domanda2 = "chi e' l'autore della Divina Commedia? "
else: risposta_esatta2 = "Dante"
print ("risposta errata!") interrogazione (domanda2, risposta_esatta2)
print ("la risposta esatta e': Dante")
print ("Studia di piu'")
44
Nota bene: i nomi delle scatole usati nella istruzione di chiamata della funzione sono
diversi dai nomi delle scatole usati nella definizione.
La prima cosa che fa la funzione quando viene chiamata è prendere le scatole usate
nella istruzione con cui è stata chiamata, scoperchiarle e mettere il loro contenuto
nelle corrispondenti scatole usate all'interno della funzione.
Il contenuto di domanda1 viene scritto in domanda e il contenuto di
risposta_esatta1 viene scritto in risposta_esatta.
Perché è necessaria questa operazione?
Le scatole all'interno della funzione sono “invisibili” all'esterno e sono utilizzate solo
dentro il corpo della funzione.
In questo modo la semplice funzione che abbiamo scritto potrà essere utilizzata da
voi per altri programmi o da qualche vostro amico per costruire programmi più
complicati. Questo è il secondo motivo, forse il più importante, per cui si scrivono le
funzioni.
I programmi attuali sono diventati cosi complicati che nessun programmatore, per
quanto bravo, riuscirebbe a scriverli da solo.
Qualunque programma è sempre composto per una piccola parte da nuove istruzioni e
per la maggior parte da funzioni già scritte in precedenza.
Ora che sai cosa sono le funzioni, devi sapere anche che Python è provvisto di
numerose e importanti “librerie” di funzioni già scritte, che ricoprono le esigenze dei
ricercatori di tutte le aree della scienza.
Ad esempio, una libreria chiamata “math” consente di fare calcoli matematici anche
molto complicati.
Prima di poter usare le funzioni fornite da math, devi dire a Python di caricare quelle
funzioni che ti servono in memoria.
Questa operazione, che si chiama "importazione", può essere ottenuta scrivendo:
45
Ti propongo un esercizio basato sull’utilizzo delle funzioni: inserisci un numero e
stampa la sua radice quadrata.
(Dove, ovviamente, math. è il nome del modulo o sottolibreria , sqrt è il nome della
funzione che serve a calcolare la radice quadrata).
import math
In tutti gli esempi precedenti, la funzione chiamata eseguiva completamente una certa
attività.
Spesso la funzione chiamata esegue dei calcoli il cui risultato serve al programma
chiamante.
Vediamo un esempio:
def doppio(numero):
numero_per_due = numero * 2
return numero_per_due
Nel programma chiamante non si dovrà scrivere numero_per_due perché questa è una
variabile della funzione e le variabili delle funzioni sono invisibili all’esterno, ma si
scriverà un’istruzione del tipo: pippo = 7 + doppio(5)
#definizione di funzione
def doppio(numero):
numero_per_due = numero * 2
return numero_per_due
#programma principale
numero1 = float(input("Inserisci un numero "))
pippo = 7 + doppio(numero1)
print ("Se al numero 7 aggiungo il doppio di ",numero1)
print ("il risultato sarà: ", pippo)
46
In sostanza tutto avviene come se il contenuto della scatola della funzione
numero_per_due fosse trasferito nella scatola del programma principale doppio
(numero1).
Nel corpo di una funzione si può anche scrivere una o più istruzioni che chiamino altre
funzioni. Al limite, una funzione può anche chiamare se stessa.
Supponiamo di voler calcolare il fattoriale (prodotto dei successivi numeri interi da 1
fino a un numero dato) del numero 7, ossia
fatt = 7*6*5*4*3*2*1
La funzione che calcola il fattoriale di un numero n dovrà essere scritta come n
moltiplicato per il fattoriale di (n-1);
5
3
47
def area_rettangolo (base, altezza):
return base * altezza
Utilizziamo ora le due funzioni che abbiamo scritto per calcolare l’area della figura
azzurra:
48
Esercitiamoci un po’
7.2 Scrivi un programma utilizzando la funzione che concateni due stringhe (per
esempio due nomi Sandro e Silvia).
7.4 Scrivi un programma utilizzando la funzione che chiede qual è il tuo primo piatto
preferito e il programma risponde “A me piacciono i peperoni in carpione” e poi chiede
qual è il secondo preferito e risponde sempre “A me piacciono i peperoni in carpione”.
7.6 Scrivi un programma utilizzando una funzione che calcoli l’area e il volume di un
parallelepipedo rettangolo.
49
Lezione 8 : I CICLI
Impariamo insieme a :
• ad usare il ciclo "loop"
• a creare cicli annidati
• quando è opportuno utilizzare l'istruzione while
• oppure usare l'istruzione for
• a conoscere e utilizzare meglio le stringhe
Come già sai una variabile può assumere valori diversi nel corso di un programma.
Ad esempio:
Num = 3
print (Num)
Num = 9
print (Num)
Prova a leggere il programma con l'istruzione while come fosse scritto in un linguaggio
naturale (while significa: finchè, fino a quando, fintantoche`).
Otterrai:
50
Se non ci riesci prosegui a leggere: troverai i due programmi analizzati in dettaglio più
avanti.
Tralasciamo per un attimo il ciclo for, che studieremo nella prossima lezione, per
imparare bene ad utilizzare:
while <relazione>:
a =1
while a < 4 :
print (a)
a=a+1
Nota bene:
L’istruzione while: significa: “fai tutto quello che segue fintantoché` la relazione
scritta fra la parola while e i due punti è soddisfatta”.
51
In modo più formale ecco il flusso di esecuzione di un'istruzione while:
a vale 1
La relazione a < 4 è soddisfatta
Il programma esegue prima print a
e visualizza 1
poi esegue a = a + 1
e pone il valore 2 nella scatola a
3
LA SECONDA VOLTA
a vale 2
a < 4 è ancora soddisfatta
Il programma esegue print a e visualizza il valore di a,
cioè 2 e
pone il valore 2 + 1 = 3 nella scatola a
4
LA TERZA VOLTA
a vale 3
a < 4 è soddisfatta
Il programma visualizza il valore di a, cioè 3,
ed esegue a = a + 1 ponendo 4 nella scatola a.
52
LA QUARTA VOLTA
a vale 4
Il programma esce dal ciclo.
while <relazione> :
devono essere indentate se fanno parte delle cose da fare quando <relazione> è
soddisfatta.
Se la condizione è falsa al primo controllo, le istruzioni del corpo non saranno mai
eseguite.
Il corpo del ciclo dovrebbe cambiare il valore di una o più variabili così che la
condizione possa prima o poi diventare falsa e far così terminare il ciclo. In caso
contrario il ciclo si ripeterebbe all'infinito e il calcolatore non si fermerebbe mai.
a=3
while a > 2:
print (a)
a=a+1
Il programma stampa prima 3, poi 4, poi 5 e cosi via, e non si ferma mai.
Perché?
ESERCITIAMOCI UN PO’
Programma 1
a=1
while a < 100 :
a = a+1
53
Programma 2
a=1
while a < 100000 :
a=a+1
Qualche volta, nel corso di un programma complesso, può essere opportuno fermarsi
un po’ di tempo per consentire all’utilizzatore del programma di riflettere prima di
proseguire.
I due programmi precedenti servono proprio a questo, ossia a perdere tempo.
Quanto tempo?
Dipende dalla velocità del calcolatore. Infatti, un calcolatore molto veloce può
eseguire una delle due istruzioni:
8.5 Scrivi il programma “Conto alla rovescia” che - finché (while) n è più grande di 0 -
stampa il valore di n e poi lo diminuisce di 1. Quando arriva a 0 stampa la stringa
“Pronti…VIA!"-.
n = 10
while n > 0 :
print (n)
n=n-1
print ("Pronti ...VIA!")
8.8 Scrivi un programma che attende finchè non viene inserita la password corretta.
(La password la decidi tu, ad es. “chicchiricchi”).
password = "python"
while password != "chicchiricchi": != sta per “diverso da”
password = input("Password:")
print ("Entra pure")
55
8.10 Stampa la frase “Aiuto! Non mi fermo più” infinite volte usando il ciclo while.
(Per fermare il programma devi ...)
i=1
while i != 0 :
print ("Aiuto! Non mi fermo più")
print
i=i+1
e poi stampala di seguito, senza saltare una riga e senza andare a capo.
(Per fermare il programma devi ….)
i=1
while i != 0 :
print ("Aiuto! Non mi fermo più")
i=i+1
56
SECONDA PARTE: I CICLI ANNIDATI
Per rallentarlo introduciamo il programma che abbiamo già scritto e che serviva a
perdere tempo (esercizio 10.1)
a=1
while a < 100 :
a = a+1
e nella relazione da verificare decidiamo quanto aspettare. La soluzione che conta
lentamente non è altro che la fusione dei due programmi.
n = 10
while n > 0 :
print (n)
a=1
while a < 1000000 :
a=a+1
n=n-1
print ("Pronti ...VIA!")
Nota bene: Quest'ultimo programma contiene due cicli while, di cui il secondo, quello
introdotto per "perdere tempo", è ANNIDATO entro il primo.
64
Riprendiamo adesso due esercizi fatti in precedenza ( quelli con ***).
La soluzione del primo e' un esempio di annidamento dove l'istruzione annidata è una
if. La soluzione è la seguente:
i=1
n = int(input ("qual è il numero di cui vuoi trovare i divisori? ")
print (n, " è divisibile per ")
while i < n :
if n%i == 0 :
print (i)
i=i+1
corretto = "no"
while corretto == "no":
risposta = int(input ("quanto vale 15 x 17? "))
if risposta == 15*17:
corretto = "si"
print ("Brava!")
else:
corretto = "no"
65
Scrivi un programma che chiede una sequenza di numeri da aggiungere ad una somma.
Per terminare inserisci 0.
a=1
somma = 0
print ('Inserisci i numeri da aggiungere alla somma ')
print ('Quando hai finito inserisci 0')
while a != 0 :
print ('La somma è:',somma)
a = float(input('Numero? '))
somma = somma + a
print ('Totale =',somma)
numero = 27
indovina = 0
while indovina!= numero :
indovina = float(input ("Indovina un numero: "))
if indovina > numero:
print ("Troppo grande")
elif indovina < numero :
print ("Troppo piccolo")
print ("BRAVO!!")
66
Se non sei riuscito a stampare in maniera ordinata le colonne?
Nessun problema.
Adesso ti spiego un “trucco” per formattare
le stampe.
vengo
subito
a casa
Sinora abbiamo visto che una stringa è una serie di caratteri, cifre, lettere o altri
simboli che si trovano sulla tastiera, cioè un messaggio qualunque. Inoltre, sappiamo
che una stringa per essere considerata tale deve essere racchiusa tra virgolette
(semplici o doppie) e che si possono fare alcune operazioni con le stringhe.
Possiamo scrivere:
"ciao" * 3 oppure "ciao" + "ciao" + "ciao" oppure "ciao" * 2 + "ciao"
invece
"ciao"/4 oppure "ciao" + 5 oppure "18" + 8
sono sbagliate e generano un syntax error.
Vi ricordate come si chiamano le operazioni sulle stringhe?
Che cosa hanno di diverso le stringhe dagli altri tipi di dati (interi, floating point)?
Le stringhe sono qualitativamente diverse dagli altri tipi di dati perchè sono composte
di unità più piccole: i caratteri.
Per questo le stringhe sono dati “composti” in alternativa ai dati “semplici” che sono gli
interi e i floating point.
67
Questo ci consente di trattare una stringa come fosse una singola entità oppure di
agire sulle sue singole parti (i caratteri) a seconda di ciò che stiamo facendo. Come si
fa ad agire sui singoli caratteri?
>>>Juventus
>>>VIVA Juve
68
Lezione 9: LE LISTE
Cos’è una lista? È come quella che si fa quando bisogna fare la spesa? Come quando si
fa l’elenco degli amici da invitare alla festa per il compleanno? Esatto!
Una lista è un insieme ordinato di valori di qualunque tipo, proprio come la lista della
spesa.
56
Esiste poi una lista speciale chiamata “lista vuota” e si indica con [ ].
Altri esempi:
["pane","latte","zucchero",1,15,230,"bicchieri",1.5,2.5]
[1,"due",3.0]
[]
["tabellina del cinque",5,10,15,20,25]
spesa=["pane","latte","zucchero",1,15,230,"bicchieri",1.5,2.5]
vocabolario = ["bicicletta","casa","scuola"]
dati_di_buffon = ["Buffon", "Gianluigi", 1978]
lista_vuota = []
Questo programma assegna alla lista squadre alcuni valori e con il ciclo WHILE
esamina tutti gli elementi della lista e ne visualizza un elemento alla volta.
Per farlo usa un indice (nel nostro caso “i”). Squadre[i] individua l'elemento i della
lista squadre.
57
Nota bene: Fai attenzione al fatto che gli indici di una lista, cosi come gli indici di una
stringa, iniziano sempre da zero; puo sembrarti strano, ma i calcolatori preferiscono
iniziare a contare da zero.
Quindi per accedere al primo elemento di una lista dobbiamo scrivere [0] e non [1].
Esercitati a selezionare gli elementi di tutte le liste che abbiamo usato come esempio
e prova a scrivere un ciclo while per esaminare e visualizzare gli elementi su video,
come nell'esempio seguente, con la lista: [3,6,9,12,15]:
2. Poi scrivere il ciclo per attraversare tutti gli elementi della lista:
i= 0
while i < 5:
print (tabellina [i])
i=i+ 1
58
Indici
Si accede agli elementi di una lista in modo simile a quello gia visto per accedere ai
caratteri di una stringa.
Una qualsiasi espressione che produca un intero puo essere un indice. Ad esempio:
tabellina[5-1] visualizza: 15
Prova a usare un numero decimale come indice e analizza il messaggio di errore che
compare: TypeError: sequence index must be integer
Lista speciale
È la lista composta da tutti numeri interi, talmente comune che Ptthon fornisce un
59
modo speciale per crearla. La funzione list(range) è lo strumento
usato per crearla. Infatti, scrivere [0,1,2,3,4] è equivalente a
scrivere list(range(5)).
La funzione list(range) in questo caso legge dalla lista di interi gli elementi che
partono dal primo indice incluso e arrivano all'ultimo indice escluso.
Il terzo indice si chiama "passo" e indica con quale intervallo leggere i numeri dalla
lista di interi partendo da 1 e arrivando a 10 escluso. In questo caso legge il primo, il
terzo, il quinto e cosi via fino a 10-1, ottenendo una lista di numeri dispari.
i= i + 1
Luigi Marco Filippo Paola Gabriella Silvia
60
allievi_3A=["Luigi","Marco","Filippo","Paola","Gabriella","Silvia"]
allievi_4E = ["Gabriele","Alessandro","Anna","Michela","Antonio"]
allievi = allievi_3A + allievi_4E
print (allievi)
Sezione di lista
Una sezione di lista è l'analogo di una sezione di stringa e ha la stessa logica di
funzionamento. Infatti, come per le stringhe, si adotta l'operatore porzione :
produce:
[“Gianni” “Luigi” “Carlo”]
print (amici [1:3])
produce:
[“Luigi” “Carlo”]
Se allievi_4E é la lista
["Gabriele","Alessandro","Anna","Michela","Antonio"]
print(allievi_4E [1:3])
produce:
[“Alessandro,Anna”]
61
allievi_4E = ["Gabriele","Alessandro","Anna","Michela","Antonio"]
allievi_4E [1:3] = []
print (allievi_4E)
[“Gabriele”,”Michela”,”Antonio”]
Ma non è cosi pratico ed è facile sbagliare. Con la funzione del è molto piu facile
cancellare un elemento da una lista.
Squadre = ["Juventus", "Inter", "Milan", "Roma"]
del Squadre [1]
print (Squadre)
[“Juventus”,”Milan”,”Roma”]
Analogamente possiamo inserire uno o piu elementi in una lista inserendoli in una
sezione vuota nella posizione desiderata.
1° esempio: se allievi_4E é la stringa
["Gabriele","Alessandro","Anna","Michela","Antonio"]
l’istruzione print (allievi_4E [2:2])
produrrà: []
2° esempio: se
allievi_4E [2:2] = ["Sandra", "Andrea"]
l’istruzione print (allievi_4E) produrrà:
[“Gabriele”,”Alessandro”,”Sandra”,”Andrea”,”Anna”,”Michela”,
“Antonio”]
Se non viene specificato il primo indice la porzione parte dall'inizio della stringa.
Senza il secondo indice la porzione finisce con il termine della stringa. Se mancano
entrambi gli indici si intende tutta la lista.
Liste annidate
tabellina = [3,6,9,12,15,[10,20,30]]
print (tabellina [5])
[10 20 30]
62
Il sesto elemento della lista tabellina è a sua volta una lista.
allievi_4E=[["Bianchi","Gabriele"],["Verdi","Alessandro"],
["Rossi","Anna"],["Neri","Michela"],["Viola","Antonio"]]
print (allievi_4E[2])
[“Rossi”, “Anna”]
Il primo è il seguente:
allievo = allievi_4E [2]
allievo [0]
Creo una lista che si chiama allievo e prendo il primo elemento di quella nuova lista.
Questa espressione deve essere letta da sinistra verso destra: trova il terzo
elemento [2] della lista allievi_4E
ed essendo questo elemento a sua volta una lista, ne estrae il primo elemento [0].
Ancora una domanda non troppo difficile. Qual è la lunghezza della lista seguente?
allievi_4E =
[["Bianchi","Gabriele"],["Verdi","Alessandro"],["Rossi","Anna"],
["Neri","Michela"],["Viola","Antonio"]]
Il ciclo FOR
(ancora piu semplice esaminare tutti gli elementi di una lista una lista)
Riprendiamo l’esempio:
allievi =["Luigi","Marco","Filippo","Paola","Gabriella","Silvia"]
i= 0
while i < len(allievi):
print (allievi[i])
i=i+ 1
Luigi
Marco
63
Filippo
Paola
Gabriella
Silvia
Possiamo leggere quasi letteralmente: “Fai quello che segue per ciascun allievo nella
lista allievi, lavorando la prima volta sul primo elemento, la seconda sul secondo, e cosi
via. Stesso risultato, ma il programma è piu breve. In termini generali devo scrivere:
for <nome di variabile> in <nome di lista> :
L’istruzione for significa: per ciascuna variabile della lista fai tutto quello che
segue. In modo più formale la lista viene analizzata dal primo
elemento sino all'ultimo. La prima volta:
produce:
il quadrato di 0 è 0
il quadrato di 1 e` 1
il quadrato di 2 e` 4
il quadrato di 3 e` 9
il quadrato di 4 e` 16
il quadrato di 5 e` 25
64
il quadrato di 6 e` 36
il quadrato di 7 e` 49
il quadrato di 8 e` 64
il quadrato di 9 e` 81
il quadrato di 10 e` 100
produce:
alba 4
banana 6
carro 5
dodici 6
giacca 6
finestra 8
ESERCIZI
9.1 Scrivi un programma che analizzi le seguenti stringhe e per ognuna visualizzi le
lettere una ad una: “banana”, “cipolla”, “bambino”, “finestra”, “girotondo”.
9.2 Scrivi un programma che sommi tutti gli elementi di una lista data di numeri.
9.4 Scrivi un programma per trovare i numeri primi in una lista di numeri che va da 2 a
20.
9.5 Scrivi un programma che conta il numero di volte in cui la lettera 'a' compare in
una stringa, usando un contatore.
9.6 Scrivi un programma che operi su una lista di numeri e conti il numero di volte in
cui un valore cade in un determinato intervallo.
65
ADESSO GIOCHIAMO A TRIS !
Buon divertimento!
a1 = 'x'
a2 = 'x'
a3 = 'x'
b1 = 'x'
b2 = 'x'
b3 = 'x'
c1 = 'x'
c2 = 'x'
c3 = 'x'
# inizializzo la variabile nmosse che conta il numero delle mosse fatte dai giocatori
nmosse = 0
# Prima mossa
print ('Il primo giocatore sarà N \n')
# Ciclo while, valido finché il numero di mosse è minore di 9
while nmosse < 9 :
print ('Muova N \n')
mossafatta = 'no'
scelta = input ('Dove vuoi scrivere N: a1, a2, a3, b1, b2, b3, c1, c2, c3? \n')
if scelta == 'a1' and a1 == 'x':
a1 = 'N'
mossafatta = 'si'
elif scelta == 'a2' and a2 == 'x':
a2 = 'N'
mossafatta ='si'
elif scelta == 'a3' and a3 == 'x':
a3 = 'N'
mossafatta ='si'
elif scelta == 'b1' and b1 =='x':
b1 = 'N'
mossafatta ='si'
elif scelta == 'b2' and b2 == 'x':
b2 = 'N'
mossafatta ='si'
elif scelta == 'b3' and b3 == 'x':
b3 = 'N'
mossafatta ='si'
elif scelta == 'c1' and c1 == 'x':
c1 = 'N'
mossafatta ='si'
elif scelta == 'c2' and c2 == 'x':
c2 = 'N'
mossafatta ='si'
68
elif scelta == 'c3' and c3 == 'x':
c3 = 'N'
mossafatta ='si'
scacchiera ()
nmosse = nmosse + 1
partitafinita = vittoria ('N')
69
elif scelta == 'b2'and b2 == 'x':
b2 = 'R'
mossafatta = 'si'
elif scelta == 'b3'and b3 == 'x':
b3 = 'R'
mossafatta = 'si'
elif scelta == 'c1'and c1 == 'x':
c1 = 'R'
mossafatta = 'si'
elif scelta == 'c2'and c2 == 'x':
c2 = 'R'
mossafatta = 'si'
elif x == 'c3'and c3 == 'x':
c3 = 'R'
mossafatta = 'si'
if mossafatta == 'no':
print ('SQUALIFICATO!')
partitafinita = 'si'
nmosse = 10
scacchiera ()
partitafinita = vittoria ('R')
if partitafinita == 'si':
print ('Ha vinto R \n')
nmosse = 10
70
Lezione 10: La Grafica
Osserva attentamente le immagini della televisione o del video del PC. Esse sono
formate da una serie di quadratini molto piccoli, quasi puntini, uno vicino all'altro.
Ingrandendo l'immagine i quadratini si vedranno molto bene. Ad esempio, se
ingrandiamo un pezzo della scritta Wikipedia riconosciamo i quadratini che
compongono l’immagine.
I pixel
Nella TV i quadratini sono circa 500 su ogni riga e ci sono circa 300 righe sullo
schermo, per un totale di circa 150.000 quadratini.
Questi quadratini si chiamano "pixel" (picture element o “elemento di un'immagine”),
e sia sul PC che sulla TV possono essere in bianco e nero o colorati. Adesso comincia
ad analizzare i puntini in bianco e nero perché quelli colorati sono un poco più
complicati.
71
Inoltre, supporrai quasi sempre che un quadratino sia bianco oppure nero. Nella
grafica più raffinata un quadratino può essere non soltanto bianco e nero ma anche
grigio più o meno scuro.
Prendi ora l'immagine di una casetta e pensa di rappresentarla sul monitor del
calcolatore. Sovrapponi poi al disegno una griglia di quadratini ognuno dei quali
rappresenta un "pixel". Lascia il quadratino in bianco se nel quadratino c'è più bianco
che nero, oppure annerisci il quadratino se c'è più nero (o colore).
Ora prova a farlo con due griglie diverse: la prima ha i quadratini di 1 cm e la seconda
di 0,5 cm.
Verificherai che se i quadratini sono più piccoli il disegno verrà meglio; in linguaggio
tecnico si dice che è più definito.
Per gli schermi a colori il discorso è un po' più complesso; per ora quindi cerca di
comprendere come funziona lo schermo in bianco e nero. Inoltre supponi che il puntino
possa essere soltanto bianco o nero, ma non grigio.
L'immagine della casetta si trasforma in una lunga fila di 1 e 0 (di bit). Se pensi questi
bit come dei quadratini fosforescenti, puoi dire che = 1 significa quadratino acceso,
=0 significa quadratino spento (in parole povere, luce o non luce su un certo quadratino
dell’immagine).
Ricorda che con 150.000 bit puoi descrivere un'immagine in bianco e nero su uno
schermo televisivo, ma ne hai bisogno di 500.000 per descrivere la stessa immagine
sul PC.
Questo perché il video del PC ha molte più righe e molte più colonne; anzi sul PC puoi
decidere tu quante righe e colonne usare. Partendo da 800 colonne x 600 righe, puoi
arrivare fino ai più potenti video che hanno 14096 colonne x 2160 righe.
73
PIXEL = picture element = elemento di un’immagine.
RISOLUZIONE = numero di pixel per unità di lunghezza, si misura
in DPI (dot X inch, punti per pollice).
IMMAGINE DIGITALE = immagine rappresentata con 0 e 1
VOCABOLARIO (quadratini o pixel).
ELETTRONICO MEMORIA VIDEO = memoria apposita del PC per il comando del
video.
DISCRETIZZARE = trasformare un'immagine in bit (0 e 1).
Si può dire anche "numerizzare" o "digitalizzare".
I moduli e le funzioni
Il primo disegno!
74
Abbiamo detto che i pixel del video sono individuati dalle coordinate (riga e colonna),
Il pixel A ha “ascissa” 4, perché sta nella colonna 4 e “ordinata” 1, perché sta nella
riga 1 e la sua posizione si indica con A(4,1).
Iniziamo a disegnare
Se vuoi disegnare il cerchio in un’altra area della finestra dei disegni, devi spostare la
tartaruga, ricordando che il punto occupato dalla piccolissima tartaruga rappresenta il
punto più basso del cerchio.
Per spostare la posizione della tartaruga dobbiamo utilizzare l’istruzione:
setposition(x,y) che porrà la tartaruga nel punto di ascissa x e coordinata y.
Quando tu disegni normalmente su un foglio, alzi e abbassi la matita per spostarti da
un punto all’altro del disegno e così dobbiamo fare anche noi. Poichè la tartaruga
rappresenta la matita per disegnare, prima di eseguire l’istruzione setposition
dobbiamo inserire l’istuzione up()che significa “solleva la matita dal foglio” e dopo la
stessa istruzione dobbiamo scrivere down()che significa “appoggia la matita sul
foglio”
Ad esempio:
up()
setposition(20,20)
down()
76
programma che disegnerà una conchiglia:
for i in range(10):
up()
setposition(10*i,10*i)
down()
circle(i*10)
Giochiamo con i colori
Tutto avviene come se avessi tre matite colorate: una rossa, una
verde e una blu. Ad esempio la scritta (50,50,200) indica un colore
fatto con un po’ di rosso, un po’ di verde e molto blu.
Per chiedere alla tartaruga di utilizzare una matita rossa sul disegno,
posso scrivere l’istruzione:
color(“red”)
Se invece voglio disegnare con la matita blu, o verde, debbo utilizzare l’istruzione
color(“blue”) oppure color(“green”), rispettivamente.
E’ anche possibile usare un modo più raffinato per specificare la sfumatura di colore
desiderata, basato sulla notazione standard (Red,Green,Blue) spesso chiamata (RGB),
ove ogni componente può assumere un valore compreso fra 0 e 255.
Ad esempio, il colore (255,0,0) indica il rosso vivo; il colore (0,255,0) indica il verde
scuro; il colore (0,100,100) indica la miscela di verde e blu molto intenso senza alcuna
componente di rosso.
Per specificare un colore facendo riferimento a questa notazione, occorre scrivere:
colormode (255) seguito, ad esempio, da color (165,42,42). In questo caso otterremo
un bel colore marrone. Per utilizzare invece la notazione color (“red”) o color (“green”)
o color (“blue”) occorre premettere l’istruzione colormode (1).
Di seguito sono indicati i programmi per disegnare tre palloncini di colore rosso, verde
e blue, nei due modi: colormode(255) e colormode (1).
La tabella dei colori disponibili è molto ampia e può essere consultata all’indirizzo:
https://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm
77
Il disegno dei segmenti
Ad esempio, per disegnare i segmenti CB,BA e AD della casetta disegnata qui sopra,
occorrerà scrivere le seguenti istruzioni:
def pos(x,y):
up()
setposition(x,y)
down()
pos(150,200)
78
color("yellow")
right(90), forward(150), right(90), forward(400), right(90),
forward(150)
color("red")
right(90), forward(400), right(225), forward(200), right(315),
forward(120), right(315), forward(200)
Infine è facile verificare che le finestre e la porta possono essere disegnate con il
seguente codice (nota nel programma l’uso dell’istruzione color che serve a
cambiare il colore dei segmenti):
color("brown")
pos(100,160)
right(45), forward(30), right(90), forward(30), right(90),
forward(30), right(90), forward(30), right(90)
pos(-160,160)
forward(30), right(90), forward(30), right(90), forward(30),
right(90), forward(30), right(90)
color("brown")
pos(-30,50)
forward(30), right(90), forward(70), right(90), forward(30),
right(90), forward(70), right(90)
79
DISEGNIAMO UN ESAGONO
programma descrizione
from turtle import * Introduco nella variabile lati il numero dei lati
lati = 6 della figura geometrica.
lunghezza = 70 Numero dei pixel di ciascun lato della figura.
angolo = 360.0/lati Angolo compreso tra due lati.
for i in range (lati): Pongo i = 0,1,2,3,4,5
forward (lunghezza) Traccia un segmento di 70 pixel e ruota la
right (angolo) tartaruga di 60°
write (“Ecco un esagono”)
Prova ora a cambiare il numero dei lati del poligono (esempio: lati = 8) e
la scritta indicando il giusto nome del poligono che hai disegnato
(triangolo, pentagono, ottagono….).
80
Lezione 11: l’Animazione e il Fumetto
Il Palloncino
Nel modulo turtle, il cursore principale che indica la posizione ed il verso della punta
della nostra “penna” è graficamente rappresentato dal simbolo “>”. Questo simbolo si
può cambiare utilizzando una funzione dedicata chiamata shape (dall’inglese “forma”).
I programmatori del modulo turtle hanno messo a disposizione diverse forme
richiamabili grazie ai loro nomi inglesi, quali ad esempio:
• “arrow”, per indicare la “freccia”;
• “turtle”, per la “tartaruga”;
• “circle”, per il “cerchio”;
• “square”, per il “quadrato”;
• “triangle”, per rappresentare un “triangolo”.
Prova anche tu a cambiare la forma del cursore semplicemente chiamando la funzione
shape e fornendo come primo ed unico parametro una tra le stringhe sopracitate
(ricordati che sono stringhe, dunque devono essere inserite tra doppi apici “”).
Ad esempio, per utilizzare una tartaruga, possiamo scrivere:
shape(“turtle”)
Questa funzione è fondamentale per il proseguo del libro. Finora abbiamo visto come il
cursore può disegnare un palloncino ma, siccome questo capitolo è dedicato
all’animazione, vediamo ora come farlo volare verso l’alto!
Per far ciò, ci serve innanzitutto cambiare la forma del cursore dal semplice “>” ad un
cerchio. Per farlo, utilizzeremo la funzione shape che abbiamo appena visto con il
parametro “circle”:
shape(“circle”)
A questo punto avremo un piccolo cerchio posizionato al centro della finestra grafica.
Per cambiare il colore di questa figura possiamo usare la funzione già vista in
81
precedenza chiamata color specificandone il colore tra parentesi (sempre in inglese).
Ad esempio, color(“red”), colorerà il nostro cerchio di rosso.
Siccome questo puntino non può rappresentare un vero e proprio palloncino, possiamo
facilmente allargarne il diametro utilizzando la funzione shapesize, dall’inglese
“dimensione della forma”, che abbiamo introdotto poco fa.
Provando con shapesize(5) riusciamo ad ottenere questo risultato:
83
from turtle import *
# Imposto il colore
color("red")
Vediamo come:
x=0
y=0
# Inizio il ciclo
while y < 200:
# Aggiorno solo le ordinate ad esempio di 10
y = y+10
goto(x,y)
84
A questo punto il palloncino volerà verso l’altro fino al raggiungimento del soffitto e a
quel punto si fermerà e il programma terminerà!
Tutto quello che abbiamo visto finora, però, è una rappresentazione di un palloncino e
non un palloncino vero e proprio.
Come possiamo fare per far volare verso l’alto un vero palloncino? Semplice, possiamo
cercare un’immagine di un palloncino e usarla come “forma” del nostro cursore! In
questo modo, possiamo far diventare il nostro puntino rosso un vero e proprio
palloncino, come questo:
85
Come utilizzare un’immagine
Spesso è utile utilizzare nei nostri programmi immagini trovate sulla rete Internet.
Per chi usa il Firefox o altri navigatori (“browser”) la soluzione più semplice è la
seguente:
1. Si cerca l’immagine desiderata su un motore di ricerca. (Si consiglia di
effettuare la ricerca con indicazioni del tipo: “immagini Paperino, gif”. O, al
limite, “Paperino, gif”. Infatti Turtle tratta solo immagini in formato gif.)
2. Si seleziona l’immagine scelta.
3. Con il tasto destro del mouse si impartisce l’ordine “Copia indirizzo”
A questo punto si può usare quell’immagine dentro ad un programma come ad esempio il
seguente per far volare un palloncino.
Si inizia scrivendo due istruzioni misteriose (per il momento):
screen = Screen()
che serve a caricare una serie di funzioni che utilizzeremo per interagire con le
componenti dello schermo in un sottoinsieme che chiamiamo “screen”
In altri termini, Screen è una classe, che possiamo immaginare come una famiglia di
funzioni: screen è un insieme di dati che noi assembliamo utilizzando le funzioni di
Screen per sviluppare il nostro programma.
screen.addshape(“indirizzo dell’immagine”)
con questo comando aggiungiamo alla lista dlle immagini predefinite (da “arrow” a
“triangle” indicate all’inizio di questo capitolo)l’immagine specificata attraverso il suo
indirizzo. Successivamente si scriveranno le due seguenti istruzioni:
shape(“indirizzo dell’immagine”)
che serve a creare una nuova forma che si aggiunge alla lista di forme vista all’inizio di
questo capitolo e
shapesize(1) o shapesize(d)
per specificare le dimensioni dell’immagine che sarà utilizzata. (Valore “1” per
precisare che si accetta la dimensione attuale, oppure valore “d” per eventualmente
aumentarne le dimensioni di un fattore d).
In sostanza, con le ultime due istruzioni, si crea un’immagine prelevandone il campione
dalla nuova lista e modificandone le dimensioni in funzione delle esigenze.
Siamo ora in grado di far volare un’immagine del palloncino più raffinata di un semplice
cerchio.
86
Il codice sorgente del programma sarà:
# Uso la forma
shape("palloncino.gif")
# Dichiaro le dimensioni
shapesize(1)
# Posizione iniziale
x=0
y=0
# Alzo la “penna”
penup()
Ricordati che quello che hai imparato negli step precedenti costituisce
solo un inizio per saper programmare e pertanto, se vuoi, dovrai
approfondire l’argomento in tempi successivi.
Intanto consolida le tue conoscenze ed esercitati utilizzando quello
che hai appreso finora.
Supponiamo di aver creato una nuova immagine sul video operando nel modo sopra
descritto.
Vi è la possibilità - invero difficile, per cui si sconsiglia la lettura di questo paragrafo
a chi non abbia molto tempo – di modificare quell’immagine attraverso spostamenti ed
87
eventuali aggiunte di segmenti di testo.
Ad esempio, possiamo spostare l’immagine appena creata premendo il tasto “ ↑”
sull’insieme delle quattro frecce direzionali della tastiera. Questo spostamento sarà
determinato da un segmento di codice, posto, come vedremo, al fondo del programma.
Questo sarà basato sulla funzione:
onkey(su, “Up”)
def sinistra():
setheading(180)
forward(5)
def destra():
setheading(0)
forward(5)
def giu():
setheading(270)
forward(5)
e quindi alla pressione delle frecce sulla tastiera corrisponderà un movimento analogo
sul monitor.
Ecco il codice completo:
def sinistra():
setheading(180)
forward(5)
def destra():
setheading(0)
forward(5)
def giu():
setheading(270)
forward(5)
# Registro le funzioni
onkey(su, 'Up')
onkey(sinistra, 'Left')
onkey(destra, 'Right')
onkey(giu, 'Down')
listen()
89
La creazione di un fumetto
Poi proviamo a sovrapporre un’immagine allo sfondo, procedendo come nel caso del
palloncino visto precedentemente. Ad esempio:
screen.addshape (“indirizzo dell’immagine”)
Infine per aggiungiamo un segmento di testo (abbiamo scelto il colore bianco); sarà
necessario scrivere:
color(“white”)
write (“testo”)
90
In questo secondo esempio, per posizionare la scritta dove vogliamo, occorre spostare
la tartaruga usando le frecce direzionali.
Una volta scelta la posizione preferita, si deve schiacciare il tasto “P” della tastiera,
che eseguirà la funzione:
def p():
color (black)
write (“testo”)
import turtle
screen = turtle.Screen()
screen.bgpic("matrimonio.gif")
move_speed = 10
def forward():
turtle.setheading(90)
turtle.forward(move_speed)
def backward():
turtle.setheading(270)
turtle.forward(move_speed)
91
def left():
turtle.setheading(180)
turtle.forward(move_speed)
def right():
turtle.setheading(0)
turtle.forward(move_speed)
def p():
turtle.color("black")
turtle.write("Minni: \n quando ci sposiamo?", False, align="center",
font=("Arial", 20, "bold"))
def a():
turtle.color("black")
turtle.write("Topolino: \n quando questo libro sarà finito", False,
align="center", font=("Arial", 20, "bold"))
turtle.penup()
turtle.speed(0)
turtle.home()
screen.onkey(forward, "Up")
screen.onkey(backward, "Down")
screen.onkey(right, "Right")
screen.onkey(left, "Left")
screen.onkey(p, "P")
screen.onkey(a, "A")
screen.listen()
92
LINK SITI IMMAGINI
http://www.clipartguide.com/_pages/0511-1111-0813-0133.html
http://clipartwork.com/clip-art/download-laptop-clipart-
3194/http://www.clipartpanda.com/categories/thinking-cap-images
http://www.massere.it/didattica/85-geometria/98-il-cubo.html
http://clipartix.com/wp-content/uploads/2017/07/Computer-clip-art-free-download-
clipart-images-3-3.png
http://cliparting.com/free-question-mark-clip-art-7622/
http://moziru.com/explore/Woman%20clipart%20computer
%20programmer/#gal_post_4346_software-clipart-computer-programming-12.png
http://school.discovery.com/clipart/category/tchr0002.html
www.free-graphics.com/clipart/
http://www.fotosearch.com/clip-art/box_2.html
http://www.awesomeclipartforeducators.com/
http://www.theteachersguide.com/Freebies.html
www://freepix.com
www.phillipmartin.info/
93
INDICE
PREMESSA pagina 2
94