You are on page 1of 42

full circle

SE
ED P
RI E
I ZI RO
ON GR
E S AM
LA RIVISTA INDIPENDENTE PER LA COMUNITÀ LINUX UBUNTU

PE M A
EDIZIONE SPECIALE SERIE PROGRAMMAZIONE

CI A Z I
LE O N
E
PROGRAMMARE
IN PYTHON
VOLUME 1
Full Circle Magazine non è affiliata né1"sostenuta
"
full circle magazine n. 31 indice ^
da Canonical Ltd.
���� ������
����� ���� ������ ���� �����������
���� ������ � ��� ������� �������� � ���� ����
������������� �������� ���� �������� ����������������������������������
������ ��� ������� ��������� ������ ������
���� ���� �������� ����� �������� �� ������� ������������ ��� �� �������� ����� ������ ����������������������������������
������� � �������� ������� ��� �������� ������������
����
���� ������ �� ����� �� ������� �� ���� � ��� �� ����� �������� ������������� ������������������� ��
��������� �� ���� ������ �������� ��� �����������������
��� ������ ��������� ����� ������� � ���� ��������� ��� ������ �������� ������ ����������� �� �������� ��������
����� ������������ �������� ������ ����� �������� ���������� �� ������ ������ ����������
���� ���������� ������ ������
������ ��� ����� ������� � �� �������� ����� ����� ����������� �� ������ � ����� �������������
����� � �� � ���������� ��� ������ ������ ������ �� ��������� ������ ������ ��� �����������������������������
������� ��� ����������� ���������� ��� ������
�� ����� �� ������ ��� ������ ����� ����� � �������������
�������� �������� ����� ������� �����
�� ���������� ����� �� ������ ���� ���� �� �������������� �� �������� ������� ����������������������������
������ ��������� �� ��� �� �����������
�� �������� � �������� ���������� ������ ������� �������� �� ������� ���������� ����� �������
�� �� ������� ���� ������ ����� ������
����������� �� ������ �������� � �� ������ �������� ����� �� ������� ������ ���� �������������
�������������� ����� ������� �� ���� �
��������� ����� ����� �� ������ �������� ��������� �������� ����� �������� ��� ������������������������������
����� ��� ������� �������� ��
������� ��� �������� ���������� � ����������� ��� ���������� ����� ������ ������� ����� ��������������
�������� � ���� ��������������� ���
�������������� ������ ��������
������� ����������������� �� ������
����� ��������� �
�����������
���� ������������� �������������������������������

��� �������� ��������� �� ������ ������� ���� ����� ���������� ����� �� ������� �������� ������� ������������ � ��� ����������� � ��������� ���� ������ ����
���� ��� ��������� ��� ������ ��������� �������� ����������� � ������� ��� �������� �� ���� ����� �� �������� ����������� ������ ���������� �� ������ ����������
��������� �� ��� ������� ����� ������� �� ����� �������� � �� ��������� ��������� � � ������ ������� ��� ��� ���� ������ ������ ���������� � ��� ���
��������� �������� �������������������������� ��� ��� ���������� ������ ���������� �� ����� ���� ��� ����� ��������� ��� ��� ������ � �� ������� ������� �������������� ����������� ���
� ����� ��� ���� ������������ �� ��������� ����������� � ������ �������� �� ������ ������ ������ ����������� �� ������ ���������� ��� �� ������ ������� � ��� ������ � ������������
���� ������ �������� � ������������� ������������ �� ���������� �� ������� ��� �������� �� ������� � � ����� �� ����� � �� �������� �������� ����� ������� ���
���� �� ����� ���� �� ���������� � ��������� �� ����������

���� ������ ��������


HOW-TO Programmare In Python - Parte 1
prossimo articolo quella con GUI seguente comando: programma in python.' sul
(Graphical User Interface, ndt terminale.
N/A
Interfaccia Utente Grafica). chmod +x ciao.py
Iniziamo subito con la creazione di nome = raw_input("Qual'è il
eseguito all'interno della tuo nome? ")
una semplice applicazione.
cartella in cui avete salvato il file
Questa è un pò più complessa.
Il nostro primo programma python. A questo punto,
eseguiamo il programma. Ci sono due parti in questa riga.
La prima è nome =, mentre la
Utilizzando un editor di testo greg@earth:~/esempi_python$ seconda è raw_input("Qual'è il
come gedit, scriviamo qualche ./ciao.py tuo nome? "). Cominciamo a
Sviluppo Grafica Internet M/media Sistema
riga di codice. Scrivete le seguenti considerare la seconda parte. Il
quattro righe: Ciao. Sono un programma in python.
Quale è il tuo nome? Ferd
comando raw_input stamperà a
Burphel video la frase "Qual'è il tuo nome?
#!/usr/bin/env python
Benvenuto Fred Burphel! " e sucessivamente rimarrà in
CD/DVD HDD USB Drive Laptop Wireless
print 'Ciao. Sono un programma greg@earth:~/esempi_python$ attesa che l'utente (voi) scriva
in python.' qualcosa (seguito poi dal tasto

T
È stato semplice! Vediamo {Invio}). Vediamo ora la prima
ra i tanti linguaggi di nome = raw_input("Qual'è il cosa faccia effettivamente ogni parte: nome =. Questa parte del
programmazione tuo nome? ")
singola riga del nostro codice. comando crea una variabile
disponibili oggi, Python è
print "Benvenuto " + nome + "!" chiamata "nome". Cosa è una
quello di più facile #!/usr/bin/env python
variabile ? Potete pensare ad una
apprendimento. Python vede la
E questo è tutto ciò che ci variabile come ad una scatola di
luce verso la fine degli anni 80 e, a Questa riga dice al sistema
occorre. Salvate il file con il nome di cartone. Potete riporci dentro
partire da allora, è enormemente che sta avendo a che fare con un
ciao.py in qualsiasi posizione delle cose: scarpe, parti di
maturato. Solitamente si trova già programma python e quindi di
preferiate. Suggerirei di utilizzare computer, carta o qualsiasi altra
installato nella maggior parte utilizzare l'interprete python di
una cartella di nome esempi_python cosa. Alla scatola non interessa
delle distribuzioni Linux ed è default per eseguire il programma.
da creare nella propria home. cosa le si mette dentro:
spesso il linguaggio di riferimento
Questo piccolo esempio mostra semplicemente lo conserverà. In
per chi intende imparare a print 'Ciao. Sono un programma
come sia semplice scrivere codice in in python.' questo caso, conserverà ciò che
programmare. In questo articolo
Python. Prima di eseguire il verra scritto. Nel mio esempio, ho
affronteremo la programmazione
programma dobbiamo impostare il In breve, questo stampa la scritto Ferd Burphel. Python
da riga di comando, in un
file come eseguibile. Lo faremo con il prima riga 'Ciao. Sono un prenderà la stringa e la
full circle magazine n. 27 7 Indice ^
PROGRAMMARE IN PYTHON - PARTE 1
conserverà nella scatola chiamata "credits" or "license" for SyntaxError: invalid syntax
"nome" in modo da utilizzarla more information. >>> >>> print var * 2
sucessivamente nel programma. 8
>>> >>>
Questo è dovuto al fatto che la
print "Benvenuto " + nome + "!" parola "print" è riconosciuto come
Vi trovate, a questo punto comando mentre "Print" non lo è. Se scriviamo nuovamente
nella shell di python. A partire da La differenza tra maiuscolo e "print var" ecco cosa otterremo:
Usiamo ancora il comando
qui potete eseguire un enorme minuscolo è molto importante in
print per mostrare qualcosa sullo
numero di cose ma vediamo, Python. >>> print var
schermo: in questo caso 4
prima di tutto, con cosa abbiamo
"Benvenuto " più qualsiasi cosa >>>
a che fare. La prima cosa che
sia contenuto nella variabile Adesso giochiamo un altro po'
potrete notare è la versione di con le variabili.
"nome" seguito da un punto var non è cambiata. È ancora
python: la mia è 2.5.2.
esclamativo. Abbiamo la somma di 2+2 ovvero 4.
Sucessivamente, potrete notare var = 2+2
concatenato, o meglio, messo
una frase che dice che, per
insieme tre pezzi di informazione: Stiamo facendo delle cose
ottenere aiuto, potete scrivere Noterete che non succede
"Benvenuto ", l'informazione molto semplici appositamente per
"help" sul terminale. Lascerò che nulla a parte il fatto che Python vi
contenuta nella variabile "nome" un tutorial dedicato a chi è alle
lo facciate autonomamente. riproporrà il solito prompt ">>>".
e il punto esclamativo. prime armi. La complessità andrà
Adesso scrivete: Va tutto bene. Ciò che abbiamo
crescendo nei prossimi tutorial.
Prima di procedere con il detto a Python di fare è di creare
print 2+2 Ma per il momento vediamo
prossimo esempio, una variabile (scatola) chiamata
qualche altro esempio sulle
approfondiamo alcuni argomenti. var e di metterci dentro la somma
e premete invio. Vi verrà risposto variabili.
Apriamo un terminale e scriviamo: "2+2". Per vedere il contenuto
della variabile var, scrivete:
>>> print 2+2 Scrivete, nell'inteprete, quanto
python 4 segue:
>>> print var
Dovreste vedere qualcosa di >>> strng = 'È venuto il tempo
simile al seguente: Notate che abbiamo scritto la e premete invio per tutti i buoni uomini di
parola "print" in minuscolo. Cosa venire in aiuto del partito!'
>>> print var >>> print strng
greg@earth:~/esempi_python$ sarebbe successo se avessimo 4
python È venuto il tempo per tutti i
scritto "Print 2+2"? la risposta >>> buoni uomini di venire in
Python 2.5.2 (r252:60911, Oct dell'interprete sarebbe stata aiuto del partito!
5 2008, 19:24:49) questa: D'ora in poi potremo usare più >>>
>>> Print 2+2
File "<stdin>", line 1
e più volte var esattamente come
[GCC 4.3.2] on linux2 Abbiamo creato una variabile
Print 2+2 se fosse il numero 4, come nel
^ caso seguente: di nome strng (diminutivo di
Type "help", "copyright",
full circle magazine n. 27 8 Indice ^
PROGRAMMARE IN PYTHON - PARTE 1
stringa) che contiene il valore "È s contenente il carattere '4' come dovremmo fare la seguente cosa: programmazione, non utilizza le
venuto il tempo per tutti i buoni qui di seguito? parentesi tonde "(" o graffe "{"
uomini di venire in aiuto del >>> print int(s) * 4 per realizzare gruppi di codice,
>>> s = '4' 16
partito!". D'ora in poi (fino a che ma utilizza l'indentazione.
>>> print s >>>
rimaniamo nella stessa istanza 4
dell'interprete) la nostra variabile Salvate il programma col
La stringa (s), che è '4', è stata
strng sarà sempre uguale, a nome "ciclo_for.py". Prima di
Sembrerebbe che s contenga il convertita in un intero e quindi
meno che non decidiamo di provare l'esecuzione,
valore intero 4, ma in realtà non è moltiplicata per 4 che ci da 16.
cambiarla. Cosa succederebbe se approfondiamo il concetto del
così. In realtà contiene la
decidessimo di moltiplicare ciclo for.
rappresentazione testuale di 4. Abbiamo introdotto il comando
questa variabile per 4? Quindi, se proviamo a scrivere print, il comando raw_input,
Un ciclo è una parte di codice
'print s * 4' ecco cosa otterremmo: l'assegnazione delle variabili e la
>>> print strng * 4 che esegue un insieme di
differenza tra stringhe e interi.
>>> print s * 4 istruzioni per un determinato
È venuto il tempo per tutti i 4444 numero di volte. Nel nostro caso,
buoni uomini di venire in >>>
Andiamo ancora un pò più in là.
il programma effettuerà 10 cicli,
aiuto del partito!È venuto il Scrivete, nell'interprete Python,
tempo per tutti i buoni uomini stampando il valore della variabile
Ancora una volta, l'interprete quit() ritrovandovi nuovamente al
di venire in aiuto del cntr (diminutivo di contatore). Il
partito!È venuto il tempo per sa che s è una stringa e non un prompt dei comandi.
comanda espresso in italiano
tutti i buoni uomini di venire valore numerico. Lo sa perchè corrente sarebbe "assegna alla
in aiuto del partito!È venuto
il tempo per tutti i buoni abbiamo racchiuso il numero 4 tra Semplice ciclo For variabile cntr 0; per 10 volte
uomini di venire in aiuto del apici singoli, rendendolo una stampa il contenuto di cntr;
partito! stringa. Proviamo, a questo punto, a
aumenta di uno cntr; ricomincia
programmare un semplice ciclo.
>>> da capo". Sembra abbastanza
Possiamo dimostrarlo Riaprite l'editor e scrivete il
semplice. La parte di codice
scrivendo print type(s) per vedere seguente programma.
Beh, non è esattamente ciò che vi "range(0,10)" dice di iniziare con il
cosa il sistema ritenga sia la valore 0 e di continuare il ciclo
sareste aspettati, vero? Viene #! /usr/bin/env python
variabile. fino a che il valore di cntr non sia
stampato il valore di strng 4 volte.
Perchè? Beh, l'interprete sa che strng for cntr in range(0,10): 10 per poi interrompere il ciclo
>>> print type(s)
conteneva una stringa di caratteri, non stesso.
<type 'str'> print cntr
un valore. Non è possibile fare >>>
matematica con le stringhe. Ora, come visto in precedenza,
Assicuratevi di usare il tasto
È confermato. È un tipo diamo il comando
tab prima di "print cntr". È
Cosa succederebbe se stringa. Se volessimo utilizzarlo fondamentale. Python, chmod +x ciclo_for.py
avessimo una variabile chiamata come valore numerico, diversamente da altri linguaggi di

full circle magazine n. 27 9 Indice ^


PROGRAMMARE IN PYTHON - PARTE 1
ed eseguiamo il programma sistema. Se aveste modificato la 3
chiamata in "range(1,10)" il ciclo 4
./ciclo_for.py 5
avrebbe iniziato a contare da 1 ma si 6
sarebbe comunque fermato a 9 7
in un terminale. poichè, non appena cntr avesse 8
contenuto 10, il ciclo sarebbe 9
greg@earth:~/esempi_python$ 10
terminato. Perciò, per fare in modo Tutto fatto
./ciclo_for.py
0 che venga stampato greg@earth:~/esempi_python$
1 "1,2,3,4,5,6,7,8,9,10" dovremo
2 usare "range(1,11)" perchè il ciclo Assicuratevi che l'indentazione sia
3
4
for si interromperà non appena il corretta. Ricordate: l'indentazione
5 numero maggiore viene raggiunto. mostra la formattazione del blocco.
6 Approfondiremo ulteriormente
7 Notate anche la sintassi del l'indentazione nei prossimi tutorial.
8
9
comando. È "for variabile in
greg@earth:~/esempi_python$ range(valore iniziale, valore finale):". Il Questo è tutto per ora. La
simbolo ":" avvisa che quel che segue prossima volta faremo un ripasso
Bene! Sembra che tutto abbia sarà un blocco di codice che dovrà prima di andare avanti con altre
funzionato anche se il conteggio è essere indentato. È estremamente istruzioni per la programmazione
proseguito solo fino a 9 prima di importante che vi ricordiate di utilizzare i python. Nel frattempo
fermarsi. Guardate nuovamente due punti ":" e che indentiate il codice considerate l'installazione di un
l'output. Ci sono 10 numeri contenuto nel blocco. qualche editor specifico per
stampati, partendo dallo 0 e python come Dr. Python o SPE
arrivando al 9. Questò è ciò che Se modifichiamo il codice nel (Stani's Python Editor) entrambi
abbiamo chiesto: stampa 10 volte seguente modo: disponibili tramite Synaptic.
il valore di cntr aggiungendo ogni
#! /usr/bin/env python
volta uno alla variabile e poi
termina non appena questo for cntr in range(1,11):
valore è 10. print cntr
è il proprietario
print 'Tutto fatto'
della
Potete notare che, per quanto una società di consulenza in
programmare può essere semplice, avremo il seguente output... Aurora, Colorado e programma
greg@earth:~/esempi_python$ dal 1972. Ama cucinare, fare
alle volte può divenire complesso e ./ciclo_for.py escursioni, ascoltare musica e
dovete essere sempre certi di quel 1 passare il tempo con la sua
che state chiedendo di fare al 2 famiglia.

full circle magazine n. 27 10 Indice ^


HOW-TO Programmare in Python - Parte 2

N
ella scorsa puntata 'Dic']

FCM n. 27 - Python Parte 1 abbiamo visto un Fino ad ora, abbiamo creato


programma elementare Per creare una lista, delle liste utilizzando informazioni
che utilizzava raw_input racchiudiamo i valori tra parentesi sotto forma di stringhe. È possibile
per ricevere una risposta quadre ('[' e ']'). Abbiamo utilizzare anche numeri interi.
dall'utente, alcuni semplici tipi di chiamato la nostra lista 'mesi'. Per Rifacendoci alla precedente lista
variabile e un semplice ciclo che utilizzarla, dovremmo scrivere dei mesi, possiamo creare una
utilizzava la dichiarazione "for". In qualcosa tipo print mesi[0] o lista che contenga il numero di
questa puntata approfondiremo mesi[1] (comando che giorni per ognuno di loro.
ulteriormente le variabili e stamperebbe 'Gen' o 'Feb').
Sviluppo Grafica Internet M/media Sistema
scriveremo alcuni programmi. Ricordate di contare sempre GiorniInMese = [31, 28, 31, 30,
partendo dallo zero. Per sapere la 31, 30, 31, 31, 30, 31, 30, 31]
dimensione di una lista possiamo
usare il comando: Se scrivessimo GiorniInMese[1]
Analizziamo un nuovo tipo di (per Febbraio) ci verrebbe
CD/DVD HDD USB Drive Laptop Wireless
variabili chiamate liste. In altri
print len(mesi) restituito il numero intero 28.
linguaggi una lista verrebbe Notate che ho chiamato la lista
che restituirà 12. GiorniInMese. Altrettanto
considerata come un array.
Tornando alla nostra analogia con facilmente avrei potuto chiamarla
Ho ricevuto un mail da parte di David
Un altro esempio di lista 'giorniinmese' o semplicemente
Turner il quale mi ha fatto notare come le scatole di cartone, un array (o
l'utilizzo del tasto Tab per l'indentazione potrebbe essere quello delle 'X'... ma queste forme sarebbero
lista) sarebbe una serie di scatole,
del codice sia fuorviante poiché alcuni categorie all'interno di un libro di meno leggibili. Una buona pratica
editor potrebbero utilizzare più o meno di contenenti oggetti, incollate tra di
cucina. Ad esempio: di programmazione suggerisce (e
quattro spazi per effettuarla. E ciò è loro. Per esempio, potremmo
corretto. Molti programmatori Python (me conservare forchette in una ciò è comunque soggetto ad
compreso), per risparmiare tempo
categorie = ['Primi piatti', interpretazione) che i nomi delle
scatola, coltelli in un'altra e 'Carni', 'Pesce', 'Zuppe',
configurano il tasto Tab del proprio editor
cucchiai in un'altra ancora. 'Biscotti'] variabili siano facilmente
in modo che rappresenti quattro spazi. Il comprensibili. Analizzeremo più
problema comunque è che, se Vediamo una semplice lista dei
qualcun'altro non ha nel suo editor le nomi dei mesi. Il nostro codice Quindi la categoria[0] sarà avanti il perché. Per ora,
stesse configurazioni, si potrebbero verrebbe così: 'Primi piatti' mentre la categoria[4] giochiamo un altro po' con le liste.
creare dei problemi nel codice sia di
funzionamento che di leggibilità. Ragion
sarà 'Biscotti'. Molto semplice.
mesi = ['Gen', 'Feb', 'Mar', Sicuramente vi saranno venuti in Prima di iniziare con il prossimo
per cui, cercate di abituarvi ad utilizzare
gli spazi al posto del tasto Tab. 'Apr', 'Mag', 'Giu', 'Lug', mente diversi utilizzi per le liste. programma di esempio, vediamo
'Ago', 'Set', 'Ott', 'Nov', alcune altre cose di Python.
full circle magazine #28 7 indice ^
PROGRAMMARE IN PYTHON - PARTE 2
sarebbe lo spazio dopo la parola componenti separate dallo spazio, utilizzeremmo il '%d'. Eccone un
'tempo'. diamo il comando: esempio:

Abbiamo brevemente Possiamo sapere la dimensione print strng.split(' ') Mesi = ['Gen', 'Feb', 'Mar',
'Apr', 'Mag', 'Giu', 'Lug',
introdotto le stringhe nella Parte 1 di una stringa utilizzando la
'Ago', 'Set', 'Ott', 'Nov',
e ora le approfondiremo. Una funzione len(): che ci restituirà una lista 'Dic']
stringa è una serie di caratteri. contenente ['Il', 'tempo', "e'", GiorniInMese = [31, 28, 31, 30,
Nient'altro che questo. In effetti, print len(strng) 'giunto']. Questi comandi sono 31, 30, 31, 31, 30, 31, 30, 31]
estremamente potenti. Ci sono for cntr in range(0,12):
potete pensare ad una stringa print '%s ha %d giorni.' % (
come un array di caratteri. Ad che restituirà 18. Se, nel nostro numerose funzioni presenti in Mesi[cntr], GiorniInMese[cntr] )
esempio, se assegniamo la stringa codice, volessimo scoprire in quale python che analizzeremo in
"Il tempo è giunto" ad una posizione, all'interno della stringa, seguito. Il risultato sarà:
variabile di nome strng e si trova la parola 'tempo' possiamo
successivamente vogliamo sapere scrivere: Gen ha 31 giorni.
quale sia il secondo carattere della Feb ha 28 giorni.
pos = strng.find('tempo') C'è un'ultima cosa di cui vorrei Mar ha 31 giorni.
stringa, ecco cosa potremmo Apr ha 30 giorni.
scrivere: parlare prima di passare al nostro Mag ha 31 giorni.
A questo punto la variabile pos prossimo programma di esempio. Giu ha 30 giorni.
strng = "Il tempo è giunto" (diminutivo di posizione) conterrà Quando voglio stampare qualcosa Lug ha 31 giorni.
print strng[1] 3, che significa che la parola che contenga sia caratteri che Ago ha 31 giorni.
'tempo' inizia alla posizione 3 della Set ha 30 giorni.
variabili di tipo testo, possiamo Ott ha 31 giorni.
Il risultato sarà 'l'. Ricordando nostra stringa. Se avessimo utilizzare quello che viene definito Nov ha 30 giorni.
che è sempre necessario iniziare a chiesto alla nostra stringa, tramite Sostituzione di Variabili. Lo si fa in Dic ha 31 giorni.
contare da 0, il primo carattere la funzione find, di trovare una modo molto semplice. Se
sarà [0], il secondo [1], il terzo [2] parola che non è contenuta nella volessimo sostituire una stringa, Una cosa molto importante da
e così via. Se volessimo avere i stessa: utilizzeremo il simbolo '%s' e comprendere è l'utilizzo dell'apice
caratteri a partire dalla posizione 3 successivamente diremo a Python singolo e dell'apice doppio. Sia che
fino alla posizione 9, dovremmo pos = strng.find('mela')
con cosa sostituirlo. Per esempio, assegniamo una stringa ad una
scrivere: per stampare un mese dalla nostra variabile nel seguente modo:
il valore contenuto in pos
precedente lista, potremmo
print strng[3:9] sarebbe -1. st = 'Il tempo è giunto'
utilizzare il seguente costrutto:

che ci restituirà 'tempo'. Come Possiamo anche ottenere ogni print 'Mese = %s' % mesi[0] che in quest'altro modo
nel ciclo for della volta scorsa, il singola parola contenuta nella
conteggio si fermerà a 9 ma non stringa tramite il comando split. Il risultato sarà 'Mese = Gen'. st = "Il tempo è giunto"
restituirà il nono carattere, che Per dividere la stringa, nelle Se volessimo sostituire un intero,
full circle magazine #28 8 indice ^
PROGRAMMARE IN PYTHON - PARTE 2
il risultato sarà lo stesso. in 'Non c'è'. Questo simbolo si variabile è uguale ad un importanti. I commenti servono
chiama carattere di escape (ndt, determinato valore. In questo caso anche per dire a Python di
Però, se è necessario inserire pronunciato ischeip) e la sua utilizzeremo il segno "==" (due ignorare determinate righe di
un apice singolo all'interno della funzione è di informare Python di segni di uguale): codice. Per commentare una riga
stringa, come in questo caso: stampare, in questo caso, il si utilizza il segno '#'. Ad esempio:
carattere apice singolo senza variabile == valore
st = 'Ha detto che l'ha visto' considerarlo come un delimitatore # Questo è un commento
della stringa. Altri caratteri di Perciò, se abbiamo una
vi verrà restituito un errore di escape (giusto per citarne variabile che si chiama ciclo e Potete inserire commenti in
sintassi. Sarà perciò necessario qualcuno) sono '\n' che è l'a-capo vogliamo controllare se sia uguale, qualsiasi parte all'interno di una
effettuare l'assegnazione nel e '\t' che rappresenta un tab. Li per esempio, al valore 12, ecco riga, ma tenete a mente che
seguente modo: affronteremo più avanti con un cosa faremo: Python ignorerà tutto ciò che
esempio. segue il segno '#'.
st = "Ha detto che l'ha visto" if ciclo == 12:

Potete vederla così: per definire Per ora non preoccupatevi


una stringa, questa deve essere dell'if né dei due punti. L'unica Torniamo ora sulla
contenuta tra un qualche tipo di Dobbiamo imparare alcune cosa da ricordare è che per dichiarazione "if" che abbiamo
apice (uno all'inizio e uno alla fine) altre cose prima di cominciare con effettuare una comparazione brevemente introdotto prima.
i quali devono coincidere. Se vi il nostro prossimo esempio. La dovremo usare il simbolo '=='. Quando vogliamo effettuare una
trovate nel caso in cui è necessario prima è la differenza tra decisione in base al valore di
avere diversi tipi di apice, utilizzate l'assegnazione e l'uguaglianza. qualcosa, possiamo utilizzare la
come apici esterni quelli che non Abbiamo già usato l'assegnazione dichiarazione if:
vi sono necessari all'interno della più volte nei nostri esempi. La prossima cosa che vedremo
stringa, come nell'esempio Quando vogliamo assegnare un sono i commenti. I commenti sono if ciclo == 12:
precedente. Vi chiederete: e se valore ad una variabile, utilizziamo importanti per diversi motivi. Non
dovessi inserire una stringa del solo aiutano gli altri a capire quali Questo comando controllerà la
l'operatore di assegnazione '=' (il
tipo "Mi disse "Non c'è problema"" fossero le nostre intenzioni nel variabile 'ciclo' e, se il suo valore
segno di uguale):
? In questo caso, potrete definire la codice, ma aiutano anche noi sarà 12, allora verrà eseguito tutto
stringa nel modo seguente: variabile = valore stessi a capire, passato un po' di ciò che è contenuto nel blocco
tempo dalla scrittura, con quali indentato successivo. Spesso ciò
st = 'Mi disse "Non c\'è finalità, ad esempio 6 mesi fa, sarà sufficiente. Tuttavia, come
problema"'
Quando invece vogliamo
paragonare una variabile con un abbiamo scritto quel determinato potremmo fare se volessimo che
determinato valore, dobbiamo codice. Quando inizierete a "se una variabile è qualcosa allora
Noterete il segno di backslash fai questo, altrimenti fai
effettuare una comparazione. scrivere diversi programmi, i
davanti al simbolo di apice singolo quest'altro" ? In pseudo codice,
Diciamo di voler controllare se una commenti saranno molto
full circle magazine #28 9 indice ^
PROGRAMMARE IN PYTHON - PARTE 2
potremmo dire: Notate che stiamo
ciclo = 1
utilizzando l'operatore '<' while ciclo == 1:
se x == y allora per testare se x è MINORE risposta = raw_input("Scrivi qualcosa o scrivi 'stop' per
fai qualcosa terminare => ")
altrimenti
DI un certo valore (in
questo caso 6 o 10). Altri if risposta == 'stop':
fai qualcos'altro print 'sto terminando...'
comuni operatori di ciclo = 0
In Python invece diremo: paragone sono il else:
maggiore di '>', minore o print 'Hai scritto %s' % risposta
if x == y: uguale a '<=', maggiore o
fai qualcosa Scrivi qualcosa o scrivi 'stop'
uguale a '>=' e diverso da '!='. 1
else: per terminare => RANA
2 Hai scritto RANA
fai qualcos'altro 3 Scrivi qualcosa o scrivi 'stop'
4 per terminare => uccello
Le cose principali da ricordarsi 5 Hai scritto uccello
sono: A questo punto, analizziamo la 6 Scrivi qualcosa o scrivi 'stop'
dichiarazione while. La 7 per terminare => 42
dichiarazione while permette di 8 Hai scritto 42
1. terminate ogni dichiarazione 9
creare dei cicli che saranno ripetuti Scrivi qualcosa o scrivi 'stop'
if o else con il due punti 10 per terminare => STOP
fino a che una determinata soglia
Hai scritto STOP
2. INDENTATE le righe del non verrà raggiunta (N.d.t. while Esattamente ciò che volevamo Scrivi qualcosa o scrivi 'stop'
vostro codice == fintanto che). Un semplice vedere. Nella Fig. 1 (in alto a per terminare => stop
esempio sarebbe quello di sto terminando...
destra) c'è un esempio simile ma,
Se per caso aveste più di un assegnare ad una variabile per quanto ancora semplice,
chiamata "ciclo" il valore 1. Quindi, Notate che quando ho scritto
valore da raffrontare, potreste leggermente più complesso.
fintanto che la variabile sia minore 'STOP' il programma non è
usare il formato if/elif/else. Ad
o uguale a 10, stampare il valore terminato. Ciò è accaduto perché
esempio In questo esempio abbiamo
di 'ciclo' e aggiungere 1 a ciclo. abbiamo raffrontato il valore della
combinato la dichiarazione if, il
x = 5 Quando ciclo è superiore a 10, variabile 'risposta' con 'stop'
ciclo while, la dichiarazione
if x == 1: interrompere l'esecuzione. (risposta == 'stop'). 'STOP' NON è
raw_input, l'operatore di
print 'X vale 1' uguale a 'stop'.
elif x < 6: assegnamento e l'operatore di
ciclo = 1
print 'X è minore di 6' while ciclo <= 10: confronto (tutti 8 righe di
elif x < 10:
Un ulteriore veloce esempio
print ciclo programma).
print 'X è minore di 10' ciclo = ciclo + 1
prima di lasciarci per un altro
else: mese. Diciamo di voler controllare
print 'X è maggiore o uguale Se eseguirete questo
Eseguito nel terminale, il se un utente ha il permesso per
a 10' programma, ecco cosa vedrete:
risultato sarà il seguente: accedere al programma. Sebbene
questo esempio non mostri il
full circle magazine #28 10 indice ^
PROGRAMMARE IN PYTHON - PARTE 2
modo migliore di effettuare un #---------------------------------------------------
compito simile, è comunque utile #password_test.py
per provare alcune delle cose che # esempio su come utilizzare l'if/else, le liste, gli assegnamenti, raw_input
abbiamo imparato. In pratica, # i commenti e i confronti
#---------------------------------------------------
chiederemo all'utente di inserire # Assegnazione dei nomi utente e delle password
nome e password, li utenti = ['Fred', 'John', 'Steve', 'Ann', 'Mary']
confronteremo con le informazioni password = ['accesso', 'cane', '12345', 'neo', 'qwerty']
conservate nel nostro codice e #---------------------------------------------------
# Richiedi nome utente e password
decideremo, in base a ciò che nomeutnt = raw_input('Inserisci il tuo nome utente => ')
troveremo, cosa permettere pwd = raw_input('Inserisci la tua password => ')
all'utente. Utilizzeremo due liste: #---------------------------------------------------
una per contenere gli utenti # Controlla che l'utente sia nella lista
if nomeutnt in utenti:
autorizzati e una per contenere le posizione = utenti.index(nomeutnt) # Trova la posizione dell'utente nella lista degli utenti
password. Utilizzeremo poi if pwd == password[posizione]:
raw_input per ottenere le print 'Ciao %s. Hai il permesso per accedere.' % nomeutnt
informazioni da parte dell'utente else:
print 'La password inserita non e' valida. Accesso non consentito.'
e, infine, utilizzeremo la else:
dichiarazione if/elif/else per print 'Spiacente... non ti conosco. Accesso non consentito.'
controllare e decidere se l'utente è
autorizzato. Ricordate: questo non
è il metodo migliore per fare 1 della lista delle password. In
stiamo facendo è un controllo per
questo tipo di controlli. questo modo potremo controllare
vedere se il nome che abbiamo
Analizzeremo un metodo più le due informazioni. A questo
inserito è contenuto nella lista. In
efficiente in un futuro articolo.
caso positivo, dovremo trovare la punto, capire il programma
Potete vedere il codice nel
posizione dell'utente nella lista. dovrebbe essere abbastanza
riquadro a destra. semplice.
Utilizzeremo, quindi,
utenti.index(nomeutnt) per sapere
Salvate il codice in un file dal
in che posizione della lista si trova
nome 'password_test.py' ed
l'utente e utilizzeremo questa è il proprietario
eseguitelo provando diverse
informazione per estrarre la sua della
combinazioni. una società di consulenza in
password conservata, nella stessa
Aurora, Colorado e programma
posizione, nell'altra lista. Per dal 1972. Gli piace cucinare, fare
L'unica cosa di cui non
esempio 'John' è alla posizione 1 escursioni, ascoltare musica e
abbiamo ancora parlato è la serie
nella lista degli utenti. La sua passare il tempo con la sua
di controlli che iniziano con 'if famiglia.
password, 'cane', è nella posizione
nomeutnt is utenti:'. Ciò che
full circle magazine #28 11 indice ^
HOW-TO Programmare in Python - Parte 3
propri, usare quelli a corredo di farlo.
#=======================================
FCM nn. 27-28 - Python parti 1-2 Python, o usare moduli creati # random_esempio.py
da altri. Lo stesso Python è Nella riga # Esempio dell'uso del modulo random
fornito di centinaia di moduli sette viene #=======================================
import random
diversi che facilitano la usato 'for' per
# print 14 random integers
programmazione. Un elenco dei stampare 14 for cntr in range(1,15):
moduli globali forniti con numeri casuali. print random.randint(1,10)
Python lo potete trovare su La riga otto usa
http://docs.python.org/modindex randint() per
.html. Alcuni moduli sono stampare un intero tra 1 e 10. Quando inizierete a
Sviluppo Grafica Internet M/media Sistema specifici per un determinato Notare come sia necessario programmare in Python, è
sistema operativo, ma la indicare a Python a quale probabile che creerete vostri
maggior parte sono totalmente modulo la funzione appartiene. moduli da riutilizzare
cross-platform (possono essere Lo si fa (in questo caso) con successivamente, senza
CD/DVD HDD USB Drive Laptop Wireless usati ugualmente su Linux, Mac random.randint. Perché creare riscriverli. Se sarà necessario
e Microsoft Windows). Per usare moduli? Bene, se tutte le cambiare qualcosa in quel

N
un modulo esterno, bisogna possibili funzioni fossero incluse gruppo di codice, lo si potrà
ell'ultimo articolo, importarlo nel programma. Uno in Python, non solo quest'ultimo fare con meno probabilità di
abbiamo studiato le dei moduli forniti con Python è diventerebbe enorme e lento, compromettere il programma
liste, le sostituzioni 'random'. Tale modulo permette ma la correzione dei bug principale. Ci sono dei limiti a
letterali, i commenti, di generare numeri pseudo- diventerebbe un incubo. tutto questo e ne parleremo
uguaglianza contro casuali. Useremo il modulo Usando i moduli è possibile successivamente. Ora, quando
assegnamento, le istruzioni if e come mostrato in alto a destra frammentare il codice in gruppi, abbiamo usato
while. Vi avevo promesso che mi nel nostro primo esempio. ciascuno con un proprio scopo. precedentemente l'istruzione
sarei occupato dei moduli e delle Se, per esempio, non si ha 'import random', abbiamo detto
funzioni. Quindi iniziamo. Esaminiamo ciascuna riga di necessità di funzioni database, a Python di garantirci l'accesso
codice. Le prime quattro sono non serve conoscere l'esistenza a tutte le funzioni del modulo
Moduli commenti. Ne abbiamo parlato del modulo SQLite. Se però ne random. Se, al contrario,
nell'articolo passato. La riga avrete bisogno è pronto per avessimo bisogno di accedere
I moduli sono una via per cinque dice a Python di usare il l'uso. (In realtà faremo uso dei alla sola funzione randinit(),
estendere la programmazione modulo random. Dobbiamo moduli database più avanti in possiamo riscrivere l'istruzione
Python. È possibile crearne di esplicitamente dire a Python di questa serie.) import così:

full circle magazine n. 29 7 indice ^


PROGRAMMARE IN PYTHON - PARTE 3
sommarli, quindi
from random import randint moltiplicarli, e poi #semplice esempio
sottrarli, mostrando print 'Somma dei due numeri %d e %d = %d ' % (1,2,1+2)
Ora quando chiamiamo la print 'Moltiplicazione dei due numeri %d e %d = %d ' % (1,2,1*2)
ogni volta valori e print 'Sottrazione di due numeri %d e %d = %d ' % (1,2,1-2)
nostra funzione non dobbiamo risultati. Per print '\n'
più usare l'identificatore complicare le cose, print 'Somma dei due numeri %d e %d = %d ' % (1,4,1+4)
'random.'. Il nostro codice dobbiamo ripetere print 'Moltiplicazione dei due numeri %d e %d = %d ' % (1,4,1*4)
cambia così print 'Sottrazione di due numeri %d e %d = %d ' % (1,4,1-4)
tutto tre volte con tre print '\n'
serie di numeri. Il print 'Somma dei due numeri %d e %d = %d ' % (10,5,10+5)
from random import randint nostro esempio print 'Moltiplicazione dei due numeri %d e %d = %d ' % (10,5,10*5)
# stampa 14 interi casuali print 'Sottrazione di due numeri %d e %d = %d ' % (10,5,10-5)
for cntr in range(1,15): assomiglierà a quello
print '\n'
print randint(1,10) mostrato a destra.

Funzioni Non solo si tratta di


tanto codice da digitare, ma
sono) tra parentesi. Questa riga causare troppi problemi al
è terminata da due punti (:). Il programma principale.
può comportare errori, sia di codice nella funzione è Chiamiamo la nostra funzione,
Quando abbiamo importato il
battitura che in modifiche indentato. Il nostro esempio in questo caso, usando il suo
modulo random, ne abbiamo
successive. Invece creeremo migliorato (#2) è mostrato in nome seguito dai parametri.
usato la funzione randinit(). Una
una funzione chiamata 'DoTwo' basso.
funzione è un blocco di codice
che prende due numeri, compie Ecco un altro esempio di
creato per essere chiamato,
i calcoli e stampa ogni volta Come potete vedere, c'è funzione. Consideriamo i
anche più di una volta, che è
l'output. Inizieremo usando la meno codice da inserire - 8 seguenti requisiti.
più semplice da gestire e che ci
parola chiave 'def' (che avvisa righe invece di 12. Se dobbiamo
risparmia la fatica di riscriverlo
che ci apprestiamo a definire cambiare qualcosa nella nostra Vogliamo creare un
ripetutamente. In modo
una funzione). Dopo 'def' funzione, è possibile farlo senza programma che stampi in
grossolano e indicativo,
immettere
possiamo dire che, ogni volta
mo il
che si ha la necessità di scrivere #semplice esempio 2 ancora semplice, ma migliore
nome
lo stesso codice più di una o def DoTwo(num1,num2):
scelto per print 'Somma di due numeri %d e %d = %d ' % (num1,num2,num1+num2)
due volte, quel codice è un
la print 'Moltiplicazione di due numeri %d e %d = %d ' % (num1,num2,num1*num2)
buon candidato a diventare una print 'Sottrazione di due numeri %d e %d = %d ' % (num1,num2,num1-num2)
funzione
funzione. Anche se i due print '\n'
e quindi
esempi seguenti sono semplici, DoTwo(1,2)
un elenco DoTwo(1,4)
sono un buon punto di partenza
di DoTwo(10,5)
per l'uso delle funzioni. Diciamo
parametri
di prendere due numeri,
(se ce ne
full circle magazine n. 29 8 indice ^
PROGRAMMARE IN PYTHON - PARTE 3
maniera elegante un elenco di in basso prendiamo la larghezza scrivere 'print Ecco la riga chiamante.
oggetti acquistati. Deve desiderata, sottraiamo due per i SopraOrSotto(40)' o qualunque
assomigliare al testo sotto. due caratteri + utilizzando la altra larghezza desideriamo per print SopraOrSotto('=',40)
formula " '=' * (larghezza-2)". la riga. Ora abbiamo una
Il costo di ciascun oggetto e Per rendere le cose ancora più funzione che si occupa di due Così adesso non solo ci
il totale di tutti gli stessi sarà semplici, useremo la delle righe. Passiamo ora a siamo occupati di tre righe, ma
formattato come dollari e sostituzione di variabile per creare una nuova funzione che abbiamo ridotto il numero delle
centesimi. La larghezza mantenere tutti gli oggetti su si occupi della riga separatore routine da 3 a 2. Così non ci
dell'output dovrà essere una riga. La stringa da usando un codice simile... resta che stampare la parte
variabile. I valori a destra e stampare sarà così codificata oppure possiamo modificare la centrale. Chiamiamo la
sinistra saranno anch'essi ('+',('=' * larghezza-2)),'+'). funzione appena scritta per prossima funzione 'Fmt'. Le
variabili. Useremo 3 funzioni Potremmo ora far sì che la includere il parametro del passeremo 4 parametri come
per raggiungere lo scopo. Una nostra routine stampi la stringa carattere da usare in mezzo ai segue:
stamperà la prima e ultima riga, direttamente, ma useremo la segni +. Facciamolo. Possiamo - il valore da stampare a
una stamperà le righe con i parola chiave return per inviare continuare a chiamarla sinistra
dettagli degli oggetti inclusa la la stringa generata alla riga SopraOrSotto. - la larghezza di questa
riga con il totale e una chiamante. Chiameremo questa "colonna"
stamperà la riga separatore. funzione 'SopraOrSotto' e il def - il valore da stampare a
SopraOrSotto(carattere,larghe destra (che dovrebbe essere un
Fortunatamente Python ci codice della funzione sarà zza):
fornisce una serie di questo: # 'larghezza' è la
valore con virgola)
funzionalità che facilitano il larghezza totale della riga - la larghezza di questa
compito. Ricorderete che def SopraOrSotto(larghezza): ritornata "colonna"
# 'larghezza' è la # 'carattere' è il
moltiplicammo una stringa per larghezza totale della riga carattere da inserire tra i
4 e che ci vennero restituite che verrà restituita '+'
Il primo compito è formattare
quattro copie della stessa return '%s%s%s' % return '%s%s%s' % l'informazione della parte
stringa. Possiamo usare quella ('+',('=' * (larghezza- ('+',(carattere * (larghezza- destra. Poiché vogliamo
2)),'+') 2)),'+') rappresentare il valore in dollari
tecnica anche in questo caso.
Per stampare le righe in alto e e centesimi, si può usare una
Potremmo Ora è possibile constatare funzione speciale per la
tralasciare il l'utilità dei commenti. sostituzione di variabile che
'+===============================+' commento, ma è Ricordate, faremo restituire la dice: stampa il valore come
'| Oggetto 1 X.XX |' utile sapere a colpo stringa generata, così dobbiamo numero con virgola con n
'| Oggetto 2 X.XX |' d'occhio il significato avere qualcosa da ricevere decimali. Il comando sarà
'|-------------------------------|'
del parametro quando la chiamiamo. Invece di '%2.f'. Assegnerò questo valore
'| Totale X.XX |'
'+===============================+' 'larghezza'. Per assegnarla ad un'altra stringa, alla variabile 'part2'. Così la
chiamarla, possiamo semplicemente la stamperemo. nostra riga sarà 'part2 = '%.2f'
full circle magazine n. 29 9 indice ^
PROGRAMMARE IN PYTHON - PARTE 3
% val2'. Possiamo usare anche giustifichiamo a sinistra con i commenti. La
+======================================+
una serie di funzioni incluse nel spazi per (col_sn-2) caratteri. possiamo | Oggetto 1 3.00 |
modulo string di Python Sottraiamo per permettere '| ' chiamare in | Oggetto 2 15.00 |
chiamate ljust e rjust. ljust sul lato sinistro. questo modo. +--------------------------------------+
giustificherà la stringa a - | Totale 18.00 |
print +======================================+
sinistra, riempiendo la parte Giustifichiamo a destra la
Fmt('Oggetto
destra con qualsiasi carattere si stringa al prezzo di rightbit-2
1',30,oggetto1,10)
voglia. rjust fa la stessa cosa, spazi. ' |' termina la stringa. sinistra e 10 per quella destra.
eccetto che il riempimento va a Questi uguagliano il 40 inviato
Di nuovo, avremmo potuto
sinistra. Ora la parte Questo è quanto. Anche se precedentemente alla routine
assegnare il valore di ritorno ad
interessante. Usando le potevo inserire un sistema per il SopraOrSotto. Allora, avvia il
un'altra stringa, ma
sostituzioni metteremo insieme controllo degli errori, lascio tuo editor e inserisci il codice
semplicemente la stampiamo.
una stringa bella corposa e la questo compito a voi. Quindi... sottostante.
Notate che abbiamo inviato 30
ritorneremo al codice la nostra funzione Fmt è di sole
per la larghezza della parte
chiamante. Ecco la nostra due righe senza la definizione e Salvate il codice come
prossima riga.
#pprint1.py
return 'ss' % ('| #Esempio di funzioni quasi-utili
',val1.ljust(col_sn-
2,''),part2.rjust(col_dx- def SopraOrSotto(carattere,larghezza):
2,''),' |') # 'larghezza' è la larghezza totale della riga ritornata
return '%s%s%s' % ('+',(carattere * (larghezza-2)),'+')
Non lasciatevi scoraggiare
dall'aspetto, dissezioniamola def Fmt(val1,col_sn,val2,col_dx):
# stampa due valori riempiti con spazi
per vedere quanto in realtà sia # val1 è stampato a sinistra, val2 è stampato a destra
semplice: # col_sn è la larghezza della parte sinistra, col_sn è la larghezza della parte destra
- Restituiremo la part2 = '%.2f' % val2
nostra stringa al codice return '%s%s%s%s' % ('| ',val1.ljust(col_sn-2,' '),part2.rjust(col_dx-2,' '),' |')
chiamante. # Definiamo il prezzo di ciascun oggetto
'ss' - Andremo a racchiudere oggetto1 = 3.00
quattro valori nella stringa. oggetto2 = 15.00
# Ora stampiamo il tutto...
Ciascun %s è un segna posto. print SopraOrSotto('=',40)
- Inizia la lista variabile print Fmt('Oggetto 1',30,oggetto1,10)
- Stampa questi caratteri print Fmt('Oggetto 2',30,oggetto2,10)
- print SopraOrSotto('-',40)
print Fmt('Totale',30,oggetto1+oggetto2,10)
Prende la variabile val1 che print SopraOrSotto('=',40)
abbiamo passato, la

full circle magazine n. 29 10 indice ^


PROGRAMMARE IN PYTHON - PARTE 3
'pprint1.py' ed eseguitelo. sono stati acquistati e
L'output dovrebbe assomigliare vogliamo usare questa oggetti = [['Soda',1.45],['Caramelle',.75],['Pane',1.95],['Latte',2.59]]
al testo in alto a destra della informazione nella print SopraOrSotto('=',40)
pagina precedente. nostra routine print.
L'unica modifica da totale = 0 #NUOVA RIGA
Anche se questo è un apportare riguarda la for cntr in range(0,4): #NUOVA RIGA
print Fmt(oggetti[cntr][0],30,oggetti[cntr][1],10) #NUOVA RIGA
esempio molto semplice, vi parte finale del totale += oggetti[cntr][1] #NUOVA RIGA
dovrebbe dare una buona idea su programma. Salviamo print SopraOrSotto('-',40)
come usare le funzioni. Ora, l'ultimo programma print Fmt('Totale',30,totale,10) #RIGA CAMBIATA
estendiamo ancora un pò il come 'pprint2.py', print SopraOrSotto('=',40)
concetto e impariamo qualcosa quindi commentate la
sulle liste. Ricordate quando nella definizione dei due oggettox e ciascun suo elemento. Notate Fatelo imitando la riga totale, ma
parte 2 abbiamo iniziato a inseriamo la lista di cui sopra. che ho anche impostato una usando (totale * .086) come
discuterne? Bene, una cosa che Ora dovrebbe assomigliare a variabile chiamata totale. costo.
ho tralasciato è che una lista può questo. Abbiamo impostato totale a 0
contenere qualunque cosa, prima di entrare nel for. Quindi print
#oggetto1 = 3.00 quando si stampa ciascun Fmt('Tasse:',30,totale*.086,10)
comprese altre liste. Dichiariamo
#oggetto2 = 15.00 oggetto venduto, aggiungiamo il
una nuova lista nel nostro oggetti Se volete, potete aggiungere
programma chiamata oggetti e =[['Soda',1.45],['Caramelle',.7 costo al totale. Infine, stampiamo
altri oggetti alla lista e vedere
riempiamola così: 5],['Pane',1.95],['Latte',2.59] il totale subito dopo la riga
] separatore. Salvate il programma come va. Questo è tutto per
oggetti = ed eseguitelo. Dovreste ottenere questa parte. La prossima volta
[['Soda',1.45],['Caramelle',.75 Dopo, rimuovete tutte le righe qualcosa di simile al testo in ci concentreremo sulle classi.
],['Pane',1.95],['Latte',2.59]]
che chiamano Fmt(). Quindi basso.
aggiungete le seguenti righe
Se volessimo accedervi come (con #NUOVA RIGA alla fine) per Se siete un po' folli, potete
fosse una normale lista rendere il vostro codice come aggiungere una riga per le tasse.
useremmo print oggetti[0]. Però, quello mostrato
ciò che otterremmo è a destra.
['Soda',1.45], che non è proprio +======================================+
quello che cercavamo. Noi | Soda 1.45 | è il proprietario
Ho | Caramella 0.75 | della
vogliamo accedere a ciascun | Pane 1.95 | una società di consulenza in
impostato una
oggetto della lista. Così useremo | Latte 2.59 | Aurora, Colorado e programma
variabile
'print oggetti[0][0]' per 'Soda' e +--------------------------------------+ dal 1972. Gli piace cucinare, fare
contatore nel | Totale 6.74 | escursioni, ascoltare musica e
[0][1] per recuperarne il costo di for che cicla +======================================+ passare il tempo con la sua
1.45. Ora, abbiamo 4 oggetti che famiglia.
nella lista per
full circle magazine n. 29 11 indice ^
������ ����������� �� ������ � ����� �
class Dog():
��������� � ������ ����� ��� def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage):
#here we setup the attributes of our dog
self.name = dogname
self.color = dogcolor
self.height = dogheight
self.build = dogbuild
self.mood = dogmood
self.age = dogage
self.Hungry = False
self.Tired = False
��� �������� �������� ������� ������
��������������������������������
������� � �� ������� �� ����� ���� ��� �����������
���� ��������� ����������� ���
�������� ��� ����� ������ �� ����� ������ ����� �� ��
����� ��� ����� ���
������ � ��� ��� ��� ���������� ��������� ����
�������������� ��������
�������������� ��� �������� � ��������������
������ ��� ��� ����� ������ �������� ����������� ��������� ��������
���� �� ��� ����� �� ������� ��
�������� � ����� ������� /--Beagle
�������� � �� �������


Dog ---|-- Lab
� ����� ��������� �� ������������ ������� ����� ���� \--Shepherd/Heeler
����� � ��� ������� �����
������ ������ ��� ����� �� ���� ����� ����������
������ ������� ������������ ���
������� ������� ����� ��� ����� ������� �� ��������� �������� ����������� �������
��������� ����� ��� ������������
������� ����� ���� �� ������� �������� ����� ��� ��������� ����� ������ �����
�������� ����� ����������
���� �� �������������� ���� ����������� ��� �������� �� ������� �� ������� ��� �������
�������������
���� �� ������ � � ��� ���� ������ � �������� ������������� �� ������� ���� ��������� �����
����������������
�������� ������� � ����������� �� �������� ��� ��������� ����� ��� ������
�������������������� ����� �
� �� ������ ������ ���� � ��������� �����
������������ ��� ������� �
�� ������ � �� ����� ��� �� ����������� �� ������� � �����
������������� ����
����������� �� �������� �� ������ ���� � �� �� Beagle = Dog()
������������
������� � ������������� �� ����������� ����������� ������ Beagle.Name = 'Archie'
����������������������� � Beagle.Height = 'Short'
���� �� ����������� ��������� � ��������� ���� �����
���� ���� Beagle.Build = 'Chubby'
�������������� �� ��� ������ �������������� ���������� ���� Beagle.Color = 'Brown'
�������� �� ������������ ����� ��������� ���������
���� ����� ������ � ��� ����
��������� �� ������ ����� �� ������������ ������ �� ����� ������
���� �� ����� ��������� ��������
���� ������ �������� �� �� � ������ �
PROGRAMMARE IN PYTHON - PARTE 4
������� ������� �� ������ ������ ������ ���� �������� �������
���� ��������� ������� ��� ������ ������� ������� def Eat(self):
���������� ��� �� ������ ������ ����� ������������ ���� �� if self.Hungry:
print 'Yum Yum...Num Num'
������� � �� ���� ����� ������� ����� �� ������� ���� ��� self.Hungry = False
������� �� ������� ����� else:
����� �� ��������� ���������� ������� � print 'Sniff Sniff...Not Hungry'
�������������� ���������� �� ���������� �� ������������� def Sleep(self):
print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'
�������� ��� ������� ������ ������ ����� ������� self.Tired = False
��������� �� �������� ���� ���� ���������� ���� ������ �� �����
���������� � ����� � ��� ��� �������� �� ���� � �������
����������� � ��� �������� �� ���� �� �������� ����� def Bark(self):
���������������� ���������� �� if self.mood == 'Grumpy':
���� ������� ������ ������� � �� �� �������� ���������� ��� print 'GRRRRR...Woof Woof'
elif self.mood == 'Laid Back':
����� �� ������ �������� ��������������� � print 'Yawn...ok...Woof'
������ ��������� �� ������ ��������������� ����������� elif self.mood == 'Crazy':
��� ������ ������� �� ������ �� ����� ������� �� print 'Bark Bark Bark Bark Bark Bark Bark'
���� ������� ����� ��� ����� ���������� ������� �� ��� else:
print 'Woof Woof'
�� ��������� ��� ���������� ������ � �������� � �������
������ �������� ������������� Lab.mood
������� �� ��������� ����� ������ �������� ���� ���� ������ � ������ ��� �� print 'I am hungry = %s' %
������� �������� ������������ ��� ����������� � ������� ������� ���������� ������� ����� Lab.Hungry
������ ����� ����� �� ����� � Lab.Bark()
������ ���� �������� � ������� ���������� ��� ����� �� ������
Heeler.Bark()
�� ����������� �� � ������ ��� ��������� ����� �������� ����� ������ ����������
����������� ����� ������� ������ ��� �������� ������ ����� ������������ �� ������� ������
������ ���� ����� ������ ��
������� ��� �� ����� �� ���� � �������
Beagle =
������� �� �������� � ���� �����
����� ��� ��������
Dog('Archie','Brown','Short', ����� ���������� ������ ��� � ��
����� �����������
'Chubby','Grumpy',12) Lab = ��������� ������ �� ����������
print Beagle.name ����������
Dog('Nina','Black','Medium',' �� ������� ����� �� ����
print Beagle.color
print Beagle.mood My name is Archie
Heavy','Laid Back',7) �������� ��� ��� ������� ����
Heeler = �������� �� ����� �� ����������
print Beagle.Hungry My color is Brown Dog('Bear','Black','Tall','Sk
My mood is Grumpy inny','Crazy',9)
I am hungry = False My name is Archie
�� ������ �� ������ ��� Sniff Sniff...Not Hungry
print 'My Name is %s' %
Lab.name My color is Brown
��������� ��� ������� �� �� Yum Yum...Num Num My mood is Grumpy
print 'My color is %s' %
����� ����� ������� ��� �� ����� GRRRRR...Woof Woof Lab.color I am hungry = False
���� �� ���� ��� ������� ����� print 'My Mood is %s' % Sniff Sniff...Not Hungry

���� ������ �������� �� �� � ������ �


PROGRAMMARE IN PYTHON - PARTE 4
Yum Yum...Num Num
GRRRRR...Woof Woof
class Dog():
My Name is Nina
def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage):
My color is Black
#here we setup the attributes of our dog
My Mood is Laid Back
self.name = dogname
I am hungry = False
self.color = dogcolor
Yawn...ok...Woof
self.height = dogheight
Bark Bark Bark Bark Bark
self.build = dogbuild
Bark Bark
self.mood = dogmood
self.age = dogage
��� ��� ����� �� ����� �� self.Hungry = False
������ ������� ���� ��������� self.Tired = False
�� ������ ��� ��������� ����� def Eat(self):
������� ���� ����� � if self.Hungry:
������������������ � ������� print 'Yum Yum...Num Num'
self.Hungry = False
else:
�� �������� ����� print 'Sniff Sniff...Not Hungry'
����������� �����
�������������� �� ��� � def Sleep(self):
����������� ������� ������� print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'
self.Tired = False
������� ��� �� ����� ���
������������ def Bark(self):
if self.mood == 'Grumpy':
print 'GRRRRR...Woof Woof'
elif self.mood == 'Laid Back':
print 'Yawn...ok...Woof'
elif self.mood == 'Crazy':
print 'Bark Bark Bark Bark Bark Bark Bark'
else:
print 'Woof Woof'

Beagle = Dog('Archie','Brown','Short','Chubby','Grumpy',12)
print 'My name is %s' % Beagle.name
� �� ������������
print 'My color is %s' % Beagle.color
����� �������� ���������� ����
print 'My mood is %s' % Beagle.mood
��� ������� �� ���������� ��
print 'I am hungry = %s' % Beagle.Hungry
������� �������� � ���������
Beagle.Eat()
��� ����� ��� ��������� ����
Beagle.Hungry = True
����������� ��������� ������ �
Beagle.Eat()
������� �� ����� ��� �� ���
Beagle.Bark()
���������

���� ������ �������� �� �� � ������ �


������ ����������� �� ������ � ����� �
����������� �� ������� ������� �� �������� ��������� � ������ ���������� ����� ����� ����
��� ��� ����� � ������ ����� ��� �� ��������� �� ������� ����� �� ���������� ������ �� ����� � ������ ������������ ��� ������
�������� � ������������ �������� � ������������ � ������ �� ��� ������������ ���������� ��
����� � ������ � ��������� ����� �� ������� ���� ��������� ��
������������ ������ �������� ���������� ��������� ��������� ��� ������
���������� ��� ����������� � ����� ��������� �������
��������� ����� �������� � ��������������������������� ���������� ��� �� ���������
����������� ��� �������� ��� ���� ��� �� ������������� �� ��������������������������� ��
��� ������������ ��� ����� �������� �� ����� ��������� ���� ��������� ����� ������ ���
����������� �������� ������� ��� ���������� ����� �� �� ������� ������������ ����
�������� ������� �������� ������� ������� �� �������� ���������� � ���������� �������� ������ �� ��������� � �
������������������������������ ���� ��������� ����������������� �� ���������������� �������� � � ��
� ����������� ��������� �� �������� ��������� ���������� �������� ����� ��������� �����
���������� ������ ������� �� ���������� ������ ���������� ��������� ���������� ��� �� ������
������ ��� ��� ����� ������ �������� ���� �� ��� ��� ��������� ��� �� ���������� ���������� �� �������� �������� ������ � ������
����� ������� �� ���������� �������� ������ �� �������� �� ����� �������� ��������� ���� ����
������� ��� �������� ��������� ��� ���������� �� ������� ������� � �� ��������� ��������� �����


� ����� ���� ��� �� ���� � ��� �� ������ �������� ��������� � ����� ������ ��������� ������� ��� ���� ��
�������� �� ����� ����� ������ ���������� ���������� � ������ ���������� ����� ������ �� ������� ���������
�� ������ �������� ���� ��������������� � ��������� �� �� ���������� �������� ����� � ������� ��� �����
������ �������� �� ���� ���� ���� � ���������� �� ������ ��������� � �������� �� ������
�� ������� ��� ����� ���� ������ �������� �������� ����� �� ��� �� ���� ���� ������ ���� �� ���������
��� ��� ������������������������ ����� �������� �� ���������� ������ ����� ������ ��� ��
������ �� ��� ��� ���� ��� ���� � ���� ���� ���� �� �� � �� �� ����� ������������� �� ����
����� ������ �� ��� � ��� �� �������� �� ��������� ������ � ������ ��� ����� �������� ������
��� ����� � ������ ��� ����� ��������� ������ �� �������� �� ��� �������� ��������������� ��
��������� ������ ��������������� �������� ������� ������ ��������� ���
�������� �� ��� ���� ����� ��������� ����� �� ������������
������������� ���������� ��� ��������� ��� ��� �� ����� �� �� ������������ ������� ���
������ ������� � ���������� ����� ��� ��������������� ������ � �������� � ����������� ��
������ ��������� ��� ����������� �� ������ ��� ���������� ������ ���������� �� ����� �������� �
������ ���������� ���� ����� �������� � ����� ��� �������� �������� � ���

���� ������ �������� �� �� ������ �


����������� �� ������ � ����� �
����������� � ������������ �� ��� ������������ ���� ����� ��� ����� �������� ���������� ������ ����������� ����������
�������� � ��������� ��������� �� ��������� �� ������ �������� ��� ������� ��������� �������
��������� � ������� �������� ��� �� ������� �� �� ���������� �� �� ������� �� ����� ��� ����� �� ��� �� �������� ������
��������� �������� ������ ����� ������� �� ��� ��������� ����� ��������� � �������� �� �� �����
����� �� ��������� ���� ������� ��� �������� �� ��������� ����������� ��� ������ � �������� �������� ��������
�������������� � �� ������ ���� ������� �������� ����� ��� ������� ��� �� ���������� �� ����� ��� �������� �
������������� ������ ������� �� ���������� ������ �������� ������ � ������� ����������� ��� ���� ������
�������� ��� �������� ������� ������ ������� ��
��� ������������ ����� ��������� ��������� �� ������ ��������� ��
��������� ������� ����� �������� ������ ��� ����� ������� ���� ����
���������� ������������ ������ � ����������� �������� �� ��� �������� ������ ��� �� �����
��� ������� �� ���������� ��������� �� �������� ����� ������ ����� ��������������� �� �� ��
�������� ���� ������ ��� ����� ��� � ��� � ������ ��� ������� ���������� ����� ��� ������� ��
��������� ������������ ��� ������ �� ����������� �� ���� ������ �����
�������� ����������� ������� �������� ��� �������� ������
������������� ��� �� �������� � ��������� ���� ��������
����� �� ����� ���� �� ���� � ��������� �������� ����� ���������
������� � ������ ��� ����� �������� ��������� ������ �� �� ������� ����� �������� ���������
�� ������� �� �������� ��� �������� ��� ���� ����� ������ � ������ ���� ���� ��� �����
������� � �� �� �� �������� � �� ������ ��� �������������� �������� � ��������� ����������
������������ �� ������ �� �������� ������ ��� � ������� ���������� ������ ������������ �� ������
������ ����� ����������� ���� ����� ���� � ������ ��� ��������� ��� ������ ������ �������� ��
������� � ���� �������� �� ����� �� ������ ������ �������� � ������ � �������
������ ����� ������ ���� ��� ����������� ��� ���
�������� �������� �������� � �������������� �� ��������� ��
������� �� ���� ���� ������������ �� ������ �� ��� ���� ������ �� ��� �� ������ �������� ��������
��������� ��� �� ��������� ��� �������� � ��������� ��������� ��� ����� �������� ������ �
������������ ��� ������ �������� �������� �� ����� ���� ������ ����� �������������� ��
��������� �� ��������� ���� �� ��� �������� ���� � ����������� ���� ���� �� ������ ��� �������
��������� ��� �� ���� ���� ������ �� ��������� ����� ����� ������ �� �������� �� ��� �������� �����
��������� ��� ���� �� ������ ��� ��� �� ����� ���� �� ��� ������� ���������� ������� �� ����� �� ��� ������ ���� �� ����� �������
�� ��������� ����� ��������� ��� ��������� �� �� ��� ��������� ���� � ��� �� � ������� �������� ���� ���� ���
��������� ������������ �� �� ����� ��������� ����������� ��� �� ��������� ���� �������� ���
��� ���������� ������ ��� ������ ������� ���� ���� ����� ��� ��������� ���� �������� ��� ��������������� �������� �������
�������� ����� ����� ����� ��������� ����� ��������� �� ������� � ��� ����� ��������� � ������������ ���
��������� �� ������� ������ ��� �������������������������� ���� �� ��� ������� � ������������ ��� ���� �� ������
���� ������ �������� �� �� ������ �
PROGRAMMARE IN PYTHON - PARTE 5
del frame, tenete premuto il frame. Poi, ripassare al designer, All'inizio, c'è il metodo
tasto Ctrl e usate i tasti freccia selezionate il pulsante e andate init_ctrls. Notate il commento
per muoverlo dove si vuole. Ora nella linguetta 'Evts' proprio sotto la definizione. Non
osservate l'inspector. Ci sono dell'Ispezionatore. Cliccate su modificate il codice di questa
quattro linguette. Cliccare su ButtonEvent e quindi doppio sezione. Se lo fate, lo
'Constr'. Da qui possiamo click su wx.EVT_BUTTON, e rimpiangerete. Ovunque SOTTO
cambiare etichetta, nome, notate che nella finestra sotto questa routine dovrebbe essere
posizione, dimensione e stile. otteniamo un pulsante evento sicuro. In questa routine,
Per ora cambiamo il nome in chiamato troverete le definizioni di ciascun
'btnShowDialog' e la proprietà 'OnBtnShowDialogButton'. Clic controllo del nostro frame.
Label in 'Cliccami'. su Invia e salvate.
Quindi, osservate la routine
__init__. Qui potete inserire
che ci serve. Ritornare alla qualunque chiamata al codice di
linguetta 'Constr', e cambiare il inizializzazione. Infine, la routine
titolo da 'Frame1' a 'La nostra OnBtnShowDialogButton. Qui è
prima GUI'. Cliccate Invia e dove metteremo il codice da
salvate ancora una volta. Ora eseguire quando l'utente clicca il
eseguiamo la nostra pulsante. Osservate che ora qui
applicazione. Cliccate il pulsante c'è la riga event.Skip(). In parole
giallo Esegui nell'Editor. semplici, dice di uscire dalla
Ora, trascuriamo il resto della routine quando si richiama
linguetta e passiamo a quella l'evento.
Objs. Questa mostra tutti i
controlli usati e la loro relazione Prima di andare oltre, Ora, quello che faremo è
genitore/figlio. Come potete Cliccate quanto volete sul guardiamo cosa abbiamo chiamare un finestra messaggio
vedere, il pulsante è figlio di pulsante, ma non accadrà nulla. ottenuto sotto forma di codice da far comparire con del testo.
panel1, che è figlio di Frame1. Perché? Bene, non abbiamo (pagina 11). Si tratta di un'operazione
detto al pulsante cosa fare. Per comune per i programmatori per
Premete Invia e salvate i questo, dobbiamo impostare un La prima riga è un commento portare a conoscenza l'utente di
cambiamenti. Ritornate ancora evento che deve verificarsi che dice a Boa Constructor che qualcosa - un errore, o che un
una volta al designer, e notate quando l'utente clicca il nostro si tratta di un file boa. È ignorato processo è terminato. In questo
che (assumendo che sia ancora bottone. Cliccare sulla X dal compilatore Python, ma non caso, chiameremo l'inclusa
selezionata la linguetta Objs), nell'angolo in alto a sinistra per da Boa. La riga successiva routine wx.MessageBox. La
Frame1 è ora selezionato. interrompere l'esecuzione del importa wxPython. Ora saltiamo routine viene chiamata con due
Questo va bene perché è quello alla definizione della classe. parametri. Il primo è il testo che
full circle magazine n. 31 indice ^
����������� �� ������ � ����� �
����������� �������� ��� ��� �������� ���
#Boa:Frame:Frame1
��������� � �� ������� � �� �������� �� import wx
������� ���������� �� ���� ����������� � def create(parent):
return Frame1(parent)
������������ � �������� �� ��������� ����� ��������� [wxID_FRAME1, wxID_FRAME1BTNSHOWDIALOG, wxID_FRAME1PANEL1,
�������� ����� ���������� ] = [wx.NewId() for _init_ctrls in range(3)]

wx.MessageBox('Hai cliccato class Frame1(wx.Frame):


���� �� ����� def _init_ctrls(self, prnt):
il pulsante', 'Info')
�������� �� ���� # generated method, don't edit
wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
�������� �� ���� ��
������� � ���� ���� ��� pos=wx.Point(543, 330), size=wx.Size(458, 253),
����� ��� ��� style=wx.DEFAULT_FRAME_STYLE, title=u'Our First GUI')
�������� ������ �������� ��������
��������� ��� ��� �� self.SetClientSize(wx.Size(458, 253))
�������� ������ �������� ������ self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
�������� ������� pos=wx.Point(0, 0), size=wx.Size(458, 253),
style=wx.TAB_TRAVERSAL)
self.btnShowDialog = wx.Button(id=wxID_FRAME1BTNSHOWDIALOG,
label=u'Click Me', name=u'btnShowDialog', parent=self.panel1,
� ������ �������� �� pos=wx.Point(185, 99), size=wx.Size(85, 32), style=0)
������� self.btnShowDialog.Bind(wx.EVT_BUTTON, self.OnBtnShowDialogButton,
� ������� id=wxID_FRAME1BTNSHOWDIALOG)

def __init__(self, parent):


� ������ ���� ���� ��� self._init_ctrls(parent)
� ������
def OnBtnShowDialogButton(self, event):
�������� �� ������ event.Skip()


� ��������� ����� �� ������
������ �������� �� ������
����� �� ���� ���� ����������� ��
���� ����� ������� ��� � ��������

�� ��� ��������� �� �������� � �� ������������
������ �������� �� ������������
������ �����
��� ������� �� ���������� ��
�� ������� �� ������ ������� ������� �������� � ���������
��� ����� ��� ����� ��������� ����
�������� �������� ������ wx.MessageBox('Hai cliccato ����������� ��������� ������ �
�������� �� ������ � ������� il pulsante, 'Info', ������� �� ����� ��� �� ���
wx.ICON_INFORMATION) ���������
���������� ������ � �� ����

���� ������ �������� �� �� ������ �


������ ����������� �� ������ � ����� �
������� ��� ����������� � ��� ���� ���� ����� ���������
��� ��� ����� � ������ ����� ��� �������� ����� �� ��������� ����� ������ ���� ���� ����� ���������
�������� ������ �� ��������� �� �������� � ��������� � ��������
����� �� ����������� ������ �� ���� ���� ��� �������� ����� �
������������ ������� ������ �� ������� �� ������ ������� ��������
���������� �� ������� �� ����� ��� �������������� ������� ���� ���
������ �� ����� �������� �������� ��� �� ������� ������� ��
������� ���� ��� �������� ������ ������ ��������� ��������� ��
��������� �� ���������� �������� � ��� �� �������� ����� �� ������ ������ ����� ������� ��� �� ������
�� ������������ ������ �������� ������ ����� ������� ��� ����������
�������� ������� �������� ������� ������� ���������� ��� ��������� ����� ������� ���� ����� ��� �����������
����� �� ��������� ������ �������� ������ ����� �������� �� ���� � �������
������� ������ ���� �������������� ����������� ��� ��
�������������� � ���� ���� ��������� ������ ��� ����������� ���������� �� �������� ��
������ ��� ��� ����� ������ ���������� ��������� � ��������� ����� � ����� ������ ���������� ���������� ���
��������
����������� ��� �� ��������� � ���� � ������������ ����������� ��� ����� ������� �
���� ����������� ����� �������� ��������� �� ������� ����� ������ �� ������ ��� ������


������� ��������� ���� ��������� ����������� ��� � ����� ����������� ������ ����������
���� ��� ������� ����� ����� �������� ��������� � ��������� �� ���������� � ���������� ������������� �
������������ ��� ���������� �� ����� ����� �� ������� ������� ���� ��� ����� ��������� ����������� � �����
����������� ��� ������ ������ �������� ������� ���� �� ��� ����� �������� ���� �������� ��� ����� ������ �����
������ ��������� �������� ���� �� ����� � ������ ���� ��������� � ����� ��������� ������ ����� ��������
����������� ��� �� ��������� �� �������� ����������� ��� �� ������������ ��������� �������� �������������� ����� ��
����� �������� ��� �������� �� ��������� ������������ ������ ������ ��� � �� ��������� ���� ������������ ������������ ���
������ ������ ������������ �� �������� � ����� ����� �� �������������� �� �������� ����
�������� ��� ��������� �� ������� ������� ��� ��������� �� �� ������� �������������
�������� ������� ����� ������� ����� ����� � ��������� ���� �������� �� ������ ������ ����� ��
��� �������� �� ������� ������ ����������������� ������������ ����������� ���
����� �������� �� ����� �������� ���������� ��
������������� � ������ ������ ��� ������ ��������� ��� ������ ��� ������ ����������� ��
��������� � ����� ��� � ��������� ���������� �� ������� ���������� ���� ����
��������� ��� ����� ����� � ��������� ���������������� ���� ����� ��������� � ���� �����
��������� ��������� �������������
���� ������ �������� ��� ������ �
����������� �� ������ � ����� �
������� ���� ���� �� ������ ��� �������� ��������� ��� ��� ������� ���������� � ���� ����� ����� ���� ���
������� �� �������� ��� ���������� ������ ������ � ������ ����� �������� �� �� ����� ���� ��� �������
����������� � ������������ ����������� ��� ��������� ������� ��� ����� ����� �������� ����� � ����������� ���
��������� �� ��������� � ��������� ���� � �������������� ������ �� �����
��������� �� ��������� � �� �������������� � ����� � ������� ����� �������� ������� ���� ��� ����� ���� ������
������� �� ���������� ��� ������� ��������� �������� � ���� ����� ��������� ����� ������� ��������� ���
������ �� �������� ����������� �������� ���������� �� ������� �� �� ������ ���� ���� ��������� ��� �����������
������ ��������� � ��� ����� ���������� ������������ �� ����� ����� ��������� ��������� ����� �� ����� ������ �������
������������� ����������� �� �� ������� ���� ���� �������� �� ���� ��� ���� ������� ��������� �� ����������� ���
��������� ����� ���� ���� �� ����������� � �������� �� ����� �� ����������� ���������� ����������� �� ���������
������������ ������ ������ ���� ������� ��������� �� ������� ������� ������������� ���� �� ������� �������� �����
�� �������������� ������ ��� ������ ���������� �� �������� ���������������� �� ������� ������������� ���
�������� ������ ������������� ��� ����� ����� ����������� �� ��������� ������ ��������� � �����������
�������������������� �� ����� ��������� ��� ������ ��� ������������ ����� �� ���� ��������������������
������ ���������������� ���� ������� ������������ ��� ������� ���� ���������� ������� ����������� ���
����������� �� �������� �������� ����� ��� ����������� ��� ������ ������� ������������� ������ ������ �� �� ���� ��� ���������
���� �� ������ ����� ������� � ��������� �� ��������� � �������� �� ����� ���� � ������� �������� �������� �� �������
������������� ��� ��� �������� ����� �� ����� � ���� ������ �� ���� ��� ���� �������������� ����� � ���������� ������
������������������ ������ ���� ������� ������� ��� ���������� ���������� ��� ���� ����������� ������ �������
�� ����� � �������� ������ ����������� �� ��������� �� ���� ���� �������������������������� ������������ ��� ��������
������ ����� �������� ������ � ��� ��� ��������� ������ ����� ��� ������� �������� � �������������� ������ �� �� ����
�������� ����� �� ������ �������������� ����������� ��������������������������� �� �����
�������� � ����� � ��� ��������� � � ��� ��� ����� �������� ����
������������ ��� �� ����� � ��������������� � � ��� ��������� ������������������������ ���� �������� �� ������ ��
��� ������ ������ ������� ���� ������ ���� � ������ ��� ������ ��������� ���������� ������������ ��� �� ���������
���� �������� �������� �� ������ ������������ ���� ���� �� ����� � �������������� � ���������� �� ���� ������ ����� �� ������
�������� �������� ��� ������ ��������� ����������� �� ����
������������ �������� ���
self.Fs.Show() �������� �� ���������
self.Hide()
������������ ������� ����� ��������
�� ������������� ���������� ��
��� ������� ����� �� ������
���� ��������������� �
������������������
���������� ������ ����
���������� ��������������� �
���������� �� ���� self.parent.Show()
��������������� self.Hide()

���� ������ �������� ��� ������ �


����������� �� ������ � ����� � Codice FrameMain:
��������� ��� ����������� ��������
#Boa:Frame:FrameMain
�� ����� ���������� ������ ���� �� ������ ��� ����������
��������� �� �������� ��� ��� ������ ����� ������� � �� import wx
��������� ���������� ���� ������ ������������ import FrameSecond
���� �������� �� ��������
def create(parent):
return FrameMain(parent)

[wxID_FRAMEMAIN, wxID_FRAMEMAINBTNEXIT,
wxID_FRAMEMAINBTNSHOWNEW,
wxID_FRAMEMAINPANEL1,
] = [wx.NewId() for _init_ctrls in range(4)]

class FrameMain(wx.Frame):
def _init_ctrls(self, prnt):
Codice GUI2: # generated method, don't edit
wx.Frame.__init__(self, id=wxID_FRAMEMAIN,
#!/usr/bin/env python name=u'FrameMain',
#Boa:App:BoaApp parent=prnt, pos=wx.Point(846, 177),
size=wx.Size(400, 340),
import wx style=wx.DEFAULT_FRAME_STYLE, title=u'Main
Frame')
import FrameMain self.SetClientSize(wx.Size(400, 340))
import FrameSecond self.Center(wx.BOTH)

modules ={u'FrameMain': [1, 'Main frame of Application', self.panel1 = wx.Panel(id=wxID_FRAMEMAINPANEL1,


u'FrameMain.py'], name='panel1',
u'FrameSecond': [0, '', u'FrameSecond.py']} parent=self, pos=wx.Point(0, 0),
size=wx.Size(400, 340),
class BoaApp(wx.App): style=wx.TAB_TRAVERSAL)
def OnInit(self):
self.main = FrameMain.create(None) self.btnShowNew =
self.main.Show() wx.Button(id=wxID_FRAMEMAINBTNSHOWNEW,
self.SetTopWindow(self.main) label=u'Show the other frame',
return True name=u'btnShowNew',
parent=self.panel1, pos=wx.Point(120,
def main(): 103), size=wx.Size(168, 29),
application = BoaApp(0) style=0)
application.MainLoop() self.btnShowNew.SetBackgroundColour(wx.Colour(25,
175, 23))
if __name__ == '__main__': self.btnShowNew.Bind(wx.EVT_BUTTON,
main() self.OnBtnShowNewButton,
id=wxID_FRAMEMAINBTNSHOWNEW)

���� ������ �������� ��� ������ �


����������� �� ������ � ����� �
Codice FrameMain (cont.): parent=prnt, pos=wx.Point(849, 457),
self.btnExit = size=wx.Size(419, 236),
wx.Button(id=wxID_FRAMEMAINBTNEXIT, label=u'Exit', style=wx.DEFAULT_FRAME_STYLE, title=u'Second
name=u'btnExit', parent=self.panel1, Frame')
pos=wx.Point(162, 191), self.SetClientSize(wx.Size(419, 236))
size=wx.Size(85, 29), style=0) self.Center(wx.BOTH)
self.btnExit.SetBackgroundColour(wx.Colour(225, self.SetBackgroundStyle(wx.BG_STYLE_COLOUR)
218, 91))
self.btnExit.Bind(wx.EVT_BUTTON, self.panel1 = wx.Panel(id=wxID_FRAMESECONDPANEL1,
self.OnBtnExitButton, name='panel1',
id=wxID_FRAMEMAINBTNEXIT) parent=self, pos=wx.Point(0, 0),
size=wx.Size(419, 236),
def __init__(self, parent): style=wx.TAB_TRAVERSAL)
self._init_ctrls(parent)
self.Fs = FrameSecond.FrameSecond(self) self.btnFSExit =
wx.Button(id=wxID_FRAMESECONDBTNFSEXIT, label=u'Exit',
def OnBtnShowNewButton(self, event): name=u'btnFSExit', parent=self.panel1,
#event.Skip() pos=wx.Point(174, 180),
self.Fs.Show() size=wx.Size(85, 29), style=0)
self.Hide() self.btnFSExit.Bind(wx.EVT_BUTTON,
self.OnBtnFSExitButton,
def OnBtnExitButton(self, event): id=wxID_FRAMESECONDBTNFSEXIT)
#event.Skip()
self.Close() self.staticText1 =
wx.StaticText(id=wxID_FRAMESECONDSTATICTEXT1,
Codice FrameSecond: label=u"Hi there...I'm the second form!",
#Boa:Frame:FrameSecond name='staticText1',
parent=self.panel1, pos=wx.Point(45, 49),
import wx size=wx.Size(336, 23),
style=0)
def create(parent): self.staticText1.SetFont(wx.Font(14, wx.SWISS,
return FrameSecond(parent) wx.NORMAL, wx.BOLD,
False, u'Sans'))
[wxID_FRAMESECOND, wxID_FRAMESECONDBTNFSEXIT,
wxID_FRAMESECONDPANEL1, def __init__(self, parent):
wxID_FRAMESECONDSTATICTEXT1, self._init_ctrls(parent)
] = [wx.NewId() for _init_ctrls in range(4)] self.parent = parent

class FrameSecond(wx.Frame): def OnBtnFSExitButton(self, event):


def _init_ctrls(self, prnt): #event.Skip()
# generated method, don't edit self.parent.Show()
wx.Frame.__init__(self, id=wxID_FRAMESECOND, self.Hide()
name=u'FrameSecond',

���� ������ �������� ��� ������ �


����������� �� ������ � ����� �
��� ������ �������� Tipo controllo - Prefisso nome
�� ���� ����� ������������
��������������� �� ����� � ������� Static text - st_
Button - btn_
������� ���� �� ����� ��� ����� Text Box - txt_
������ ������� �� ����� ����� Check Box - chk_ ��� ������������� �� � ������� ��������
����� � ����� �� ������������� ��
���������� � �������� �� Radio Button - rb_ ������� ������� ������� ��� ���
�������� ������� ���� ��� Frame - Frm_ or Frame_
������� ���� ��� ������� �����
������ ���������� � ����������� ������� ����� ����� �������
������ ����������� ���� ���� ��� ��� ���� ��� �����������
�������� ���� ��� ����� �������� � �� ����� ���� �� ������
���������� ��� �������� ���� �������� ��� ����� �����
��������������� ����������� ��������

�� ����� �������� ��� �� �������� ����� ���������


������� ������� �� ����������� �� ����� �� �������������� �� ���� ������ ��� �����

��� � ����� ��������� ������ ��� � �� ������������� ��� �� ���� ��������� ���� ����� ��� ��������
����� ��� ��� ��� ���� ��������
�������� �� �������� �� ��������� ��� ����������
������� ����� ��������� ��� ���� ����������� ����������� �
� ���� ��� � ��������� ����� ��� � ��������������� ������ �����
��� �� ����� ������ � ����� ������� �� ������ � �������������
���������� ��������� ���� ��� ������� � ��� ����� ����
������������� ������ ������ ����� ������������ ����� ��� ������
��������� ��� ����� ���������� ���� ����� ����������� ���
������������ �� �� ���� ����� ���������
��� �� ����� � ��������� ������ �� ��� ����������� �� ������
�������� ����������� � ������� � ������� ��������
��� ������
������ �������� ��� ������� �� ���������� ����� ��� �������
������ ��� ����� � ����������� �� � �� ������������ ��������� ���

������� �� �� ����� ����� �������� ���������� ����


��� ������� �� ���������� ��
������������� ����������
������� �������� � ���������
���������� �� ���� ��� ������� ��� ����� ��� ��������� ����
������� ����� �������� �� ������ ����������� ��������� ������ �
�� ��������� ������� �� ����� ��� �� ���
���������

�� ������� ����� �� ������� �����


���� ������ �������� ��� ������ �
������ ����������� �� ������ � ����� �
������ ����� ������� �� ������� ��������� �� �������� ����� �� ������� �� ����������
��� ��� ����� � ������ ����� � � � ��������� ����� �������� ������ ����� �������� � ��� ��������� ����������
�������� ��������� ��� �� ����� ����� ��������� �� ���� �� ������������� ������� ���� ��
�� ����������� ������� �� ����� ������� �������� ������� ��� ���������� ������ �����
���������� �� ��� ������ ���� �� �������� � �� ���� ������ ������������� ����� ���
���������� � �������� � ����� ������ ������ ����������� ��������� � ����� ����������� ���
������ ����������� ������ � ����� ��� �� ���������� ������ ������ ��������� �� ����� ��
���� ������ ����� ������ ������ ���������� ����� �� ������� �� ��� ��������� ���������
������ �������������� ������ ������� �����������
�� ������ � ������ �� ���� ����
�������� ������� �������� ������� ������� ����� ������������� ��� �� ��������� ������� ������ ��� ������ ���� ����� ����� ����
������ �������� ���������� ��� ��������� �� ��������� � �� ���� ������ ���� �� ���
������� ������ ���������� ������ ���� ������ ��������� ������� ������������ ���� ������������
������� ����� �� ����� ��� ���� ��� �������� �� ������ �������� �� ��� �������
������ ��� ��� ����� ������ �������� ��������� �� ������ �� ��������
�������������� � ����� ������� ����� �� �������� ����� ����� ������� �������� ������
�� ������� ���� ����� ����� ������ ������������ ��� ����� ����� ���� ����� ����� �� ������


��������� ������� � ������������� ����������� ������ ���������� ��������� ������ �������� ���
�������� � �� ������� ���������� ��� ����� ��� ��� ���� ������ ��� ����� �
�� ��� ������� ����� ��� �� ������� ����� ���� �� �������� ������ ������ ����� �� ��������� ���� ����� ������ ��
����� ������ ��� �������� �� �� ����� ������ �� ��������� ������ ������ � �� ������ ����� ����
������������ ������� ����� ����������� ������ �� ������ ��� �������� �� ��� �� �� ����� ����� ����� ��� �� �����������
��������� �� ��� �� ���� ����������� ��� ������� ����� ���� ��� ���� �� �� �� �� ������
����� ��� ����� �� ����� �������� ������ ������������ ������ ��������� �������� �� ������� ����� �� ��� ���������
��������� ����� ������ ������ ����� ������ ���� ��� ��� � ����������� �������� ��� �����
����� �������� ����� ������� �� ������� ��� ���������� ��� � ������ � ������ ��� �� ������� ����� ��������� ��������
���������� �������� ��� ����� ������� �������� �� ��� ���� �������� ����� �������� �� ������ � ��������� ������� ����
������ ������ ����� �������� ����� �� ����������� �� ��� ���� ���������� �� �������� �� � �� ��������� ��������� ���
�������� �� ����� ����� ���� ����� ��� �� �������� � ��� ��� ����� � �� ������ ������� ���� �������� ���� �������� �
������ �� ������� ��� ��� ���������� ��� � �� ���� ���� ����� ������������ ������ ����� ������ ��� �������
���������� ����� ������ ����� ���������� ��������� ���� ����� �� ��������� � ��� �����
���������� ������ �� ������ �� ����� ��������� �� ����� �� ������ �� ����������

���� ������ �������� �� �� ������ �


����������� �� ������ � ����� �
������������� �� ������ ��� ������� �� ���� ������� ����� �������� �� �������� ����
� ������������� ����� ��� ������ ��� ������ �� ����� ������ � ����� ��
��������� ����� ��� �������� �������� �� �������� � ���� ��� ������ ��� �������
� �� ��� ��� ����������� �� ����� �� ������� ���� �������� �� ����� �������� ����� �������� �� ��������� �
������ ����� ���������� ������ ������ ���� ����� �� ������ �������� �����
������ �������� ����� ��� � ����� ����� ���������� ��� �� ������������ ����� � ���� �������
���� ������ �� �� ���������� �������� �������� ������ �� ��������� �� �������� �������
�������� �������� ������� ������� � ����� ������ ��� ������� �� ������ �����
��� ������ ��� ��� �� ���� ������� �������� �������� ��� ������� ���� �������� ��� � ����� �� ���� ��������� �����
���������� � ����������� �� � ������ �������� ��������� � ����� ������� �� �������� ��� ������
�������� ������������ ������ ����� �������� ����� ����� �� ����������� ����� ������� � ��� ������ �� ����� �������
��������� ������ ��� ����� �� �������� ����� ������������ � ����� �� �����
����� ������� ����� ��� ���� ���������� ����� �������� ��� ��� � �� ����� �� ��������
� �������� ���� ���� ��� ���������� ������� �� ������ ����� �������� �� ����� ��������� � ������� ������� �������
�������� ����� ������ ������� �� ������� � ������������� �� � �� ������������ ����� � �������� ������� �������
������� ���� ���� �� ��������� � ������ �� �������� � �� ������������ �� ��� ��� �� � ��������� �� ������ �� ������
������� ������ ����� ������� ���� ������������ �� ����� �������� ����� ������� � �� ����������� � ��������� �� ������ �� �������
���� � ����� �� ������ ������� �������� �� ����� ����� ���� � ���� ������ �����
����� �� ������������ � ����������� � �� ����� �� ������������ �� ���� ����� � �������
�������� ������ �� �������� ���������� � �������� �� ��� �� ���������� ������ � �����
���� �������� ��� � ����� �������� �� ����� �� �������� � ������ � �� ������� ������ �����������
����� ���������� ��� ���� ���� ������� ������ ��� �������� ��� ��� �������� �� ������
������������ ���������� ��� ���� ������� �������� ���� �������� �� ��������
���� ��� � ����� ��� ��� ��� ������� ��� �� �������� ��� ������ ��������� �� ��� �� ���������� ��� ����� ������������
���������� ����� ��������� �� ������ ��������� �� ���������� ����� ������ ��� �� ������
� �������������� ��������� �� ��� ������ ������ ����� ������� ������������� ����� ������� � ������������
��� ����� ���������� � �������� �� �������� � �� ������ ��� ���������� ���
��������� �� �������� ����� ���� �������� �������������� ��� ����� ������ ����� ��� ���������� ������� � ����� �����
��������� ����� ���������� �� ������� � ���������� �� ������� �������� ��� � ��������
���������� ��� �������� �� ��������� ������ ���� ����� � ������
������ �������� ������� ������� �������� �� �������� ��� �� �������
���� �� �������� ������� �� ������ � ��� ��� ����� ����
������� ������� �� ������ ����� �� ������� ����� ������� �� ����� ������ ���� ������ ��� ��������� ��� ��������
��� ������� ���� ������ �� ��������� ���� � ������
������ �� �������� ��������� ���� ��������� �������� ������ �������� ������� ���� ��� ��������� � ��������
������� �� ��� �������� ��� ��������� ����������� �� ������ ������� ����� ���� ������
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
��������� ����� � ������ ����� ������� ����� ������� �� ����� � ��� �����������
������������ �� ���������� � �� SELECT * FROM Ricette ������� ���� �������� ����� �� ������
������ ����� ������ ������� ���� �������� ��������� �� ��������
����� �� ���� ����� � ����� �� �� ���������� �������� ���� INSERT INTO Ricette ���� �����
�� ������ ����� ��� ������ (nome,porzioni,provenienza)
���������� ������� � ���� ���� VALUES ("Tacos",4,"Greg")
�������� ���� ������� ��������� ������ ��������� �� SELECT r.nome,
��� ������ ����� �� ������ r.porzioni,r.provenienza,i.Is
������� ������ ������ ������ � � ��� ���������� �� ������ truzioni FROM Ricette r LEFT
������� ������ � ������ � ���� ��������� � �������� JOIN Istruzioni i ON (r.pkID
�������� �����
���� ���� ������ � ������� ��������� �� ������� ����� = i.ricettaID) WHERE r.pkID
����������� �������� � ����� ���������������� �������� ������ = 1
DELETE FROM Ricette WHERE
����� � ������ �� ���� ������ pkID = 10
�������� ������ ���� ��������� �� SELECT * FROM Ricette WHERE � ��� ����� � ������
pkID = 2 ���������� ��� ���������� ��
������ �� ������ ������� ������ ����� ������������
��������������� ��� ��� �� ������� �� �� ��������� ��� ����� ��������� ��� ������ ��
���������� ����������� ������ ��������� �� ������
������ ������ ��� �� �������� �� �������� ������
����� �� ���������� ����� ������� � �������� �������
������ �������� ����
������� ���� ���������� ��
���������� �� ��������
����� ���������� ���� �� ���� ������ �� ������ �������� ���� ����� ������� ���
��� ��������� ��������
����� ������� � �� ������ �� ��������� ������������ ��
���� ��� ��� ������� ��� ������ ������� �������
�������� � ��� ����� �� �������� � ������ ��������� ��� ���
������ ������ ������� �� � �� ��� �������� ��� ������� ������
������� ����� ������ ��� ������ ������ �������� �� ������ ��
������� ������ ��� ���������� ����������� ������ ���������
���� � ��������� ��� ����� �� �� ��������� ��������� ��
��� ������� ��� ���������� ��� ����� � ���� ����� �������
����� ��� ������ ��������������� ������ �� �� ��������� ��
������ ��������� ���� �� ������ �������� ������� �� �����
������� ����� ���������� � ��
�� ������ ���������� ���� ���������� ����� �� ����������
��������� �� ��������� ���
SELECT nome,porzioni FROM ��� ��� ���� �������� ��
��� ���������� �� ������ ��� Ricette ������� ����� ������� ������� ��
�������� ���� �����
��������� ������� ������������ ��������� ����� �������� �������
������� �� ������� ����� ��� �������� ��� ������ SELECT �������� ���������� ��
������� �� ������� ������ Ricette.nome,Ricette.porzioni ������������� ������������ �� ��
SELECT [cosa] FROM [quale(i) ����� �� �������� � ,Ricette.provenienza,Istruzio ������ �������� ������
tabella(e)] WHERE ni.Istruzioni FROM Ricette
[restrizioni] LEFT JOIN Istruzioni ON
INSERT INTO [nome tabella] (Ricette.pkID = �������� ���������� ��
(lista campi) VALUES (valori Istruzioni.ricettaID) WHERE ������� �����
���� �� �������� �������� da inserire) Ricette.pkID = 1
����� � ����� ����� ������� import apsw
������� �������� ����� ��� �������� ��� ������� ���� �� ������ �� ��������
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
������ ������� ������� ��
������ ��� ����������� ��� �� RICETTE ISTRUZIONI INGREDIENTI
������ ��������� ���� ������� ------------ ---------------------- --------------------
����� ������ �������� ��� pkID (Integer Primary Key) pkID(Integer Primary Key) pkID (Integer Primary Key)
���������� ������ ������� nome (Text) ricettaID (Integer) recipeID (Integer)
fonte (Text) istruzioni (Text) ingredienti (Text)
������ ������������ ������ porzioni (Text)
�������� ���������������
����������� ��� ���������
������ �� ���� �� ��� ��������� �������� ������������ ���
���������� �� ���� ��� ���� ��� ������� ����� ������ � ��� �� ������� ��� ������ �� �������
��������� ����� �� �����
����� ��������� �� ������������ ������� �� ������������ �������� ��������� ��� ���������
�������������� ��� ��������
������� ������� ��� ���������� �� ���� ������� �������� ��� � ��
�������� ����� ����������� �
���������� �������� �� ���� �� ��������� �� ������� ���
�������� ������ ����� �������
���������� ����� ��� �������� �������� ����������� ��� ������ �� ��������
�������� �� ���� � ���������
��� �� ��������� ������ ��������� ���� ������ ������ ���������������� sql = 'CREATE TABLE Ricette
���������� ������� ������� ��� �������� ������� � ��� ������� ������������� ��� ��� ������� (pkiD INTEGER PRIMARY KEY,
����� ����������� ��� ��� ��������� �� ����� ������ ����� ������ nome TEXT, porzioni TEXT,
�������� �������� ���� ������ provenienza TEXT)'
�������� �������� �� ������ ���
����� ���� ������� �� �� ����� �������� ������� �� ������ � ��
�������� ����� � �� ������ ����� ������� ������ ������ ��� �������� ���� � ���� ��
# Aprire/creare il database
�������� ����� ����������� ����� ��� ��������� �������������� �������� �������������� ��
connessione=apsw.Connection(" �������� � ���������� ������ ����� ����� ������� � ������ ������� ����
cookbook1.db3") ����� ��� ��� ������ ����� �������� �� ������� ���������� �
cursore=connection.cursor() ������������� ��������� � �� cursore.execute(sql)
������� �������� �������������
���� ������ �� � ��������� �� ����� ����� ����������� ��
��� ������� �� ������ ��������������� ��� ������ ��� ������� �� ����� ��������
������� ���� � ������ ��
����������� � �� ������ �������� ��� ��������� �� ������ ���� � ��������� ���� ������� ����� sql = 'CREATE TABLE
��� �������� ������ �� ������ ����� ������ �� ������� �� ������� �������� �� ������� Istruzioni (pkID INTEGER
�������� �� �� ������� ��� ��� ������� �� ������ ������ ����������� � �� ��� ��� PRIMARY KEY, istruzioni
������ ���������� ��� ��� ���������� ��� ���� ����� ������� TEXT, ricettaID NUMERIC)'
���������� ������ ������� ��
�������� �� ������������ ����� �������� ������� ������ ������ ��� ������� ����������� cursore.execute(sql)
��������� ��� �� ���������� � ������ ���� ����������� ��� ��� �� ������� ���� � ��
�������� �� ����� ����� ����������� ����� ���������� � ����� ��������� ����� �� ������� sql = 'CREATE TABLE
�� �������� �������� ��� ����������� ��������� ���� Ingredienti (pkID INTEGER
��������
�������� ����� ��� ��� ���� �������� PRIMARY KEY, ingredienti
�������� ���� ��� ��� ���� TEXT, ricettaID NUMERIC)'
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
��������� Coprire e cucinare per 20 ����� ������ ������� ��� ������
cursore.execute(sql) minuti o fino alla completa �������������� ������� ��� ��
sql = "SELECT evaporazione del brodo.")' %
ultimoid ������ ��������� �� ������� �
������ �� ������ �� �������� last_insert_rowid()"
�� ���������� �� ������ ����� ��
������� �� ������� ������ ������� ����� ����� �� ������ ��
cursore.execute(sql) cursore.execute(sql)
���� ��� �������� � ���� �� ������ ��� ������� ��������
�������� �������� for x in �������� ��� � ����������� �
������ ��� ������ ������ ��
cursore.execute(sql):
������������ �� ��������� ���� �����������
���������� ���� � �������� ultimoid = x[0]
��� �������� �� ���� ����� �������
��������������� ���� ��� ��� �� ��������� �� �������� ��
������ ������� ����� ���������� ��������������� ����
�� ����������� ��� � ����� ����� ��� �� ����� � �������
������ ���� ����������� � ���� ��� ������� �������� ��������
���������� �� ������������ �������� �����
�� �� ����� ����� �� ������ ��� ������� ����������� �����
������ ������� � ���� ���� �������������� ���� ��� ��
�� ������� ������ �������� �� ������� ������������ ��� ��
�������� �������� � ����� �� ��������������
����������� ������ � ��� �� ������� �� �� �������� ����
��������� ������� ���
����� � ��� �������� �� ������ ����
��������������� �� ������
����� ������� �� ���������� ������ ���� ��� ������ �� ���
sql = 'INSERT INTO
������ ���������� �� ���� ������������� ������ ������� Ingredienti
����� ����� ���������� ����� ����� ��������� �� ������ ����� (ricettaID,ingredienti)
������������ ��� ������������� ������� ��� � ��� ��������� VALUES ( %s,"1 tazza di riso
�������� ���� ������ ��� parzialmente cotto (non
����� ������� ������� ������� cotto)")' % ultimoid
�������� ����� �� ����� ������
INSERT INTO Ricette (nome, ����������� ������ �� ����� ����� cursore.execute(sql)
porzioni, provenienza) ��� �������� �� ������
VALUES ("Riso ��������� ����� ��������� �����
Spagnolo",4,"Greg Walters") ���� �� ��� � ����� ��������
�� �� ������ ��� �������������� �� ������� �� �������� ����� ��
��������������� �������� ���� �� �������������� �� ����
������� �������� ������������
������� �� ������ ��������� �
������������� ��� �� ����������� �� ������ �������� ������
����� �������� ����� ��� ��
�������� �������� ��������� �� ������� ��� ��� � �� ������������
sql = 'INSERT INTO ���� ���� �������� ����� �
Istruzioni (ricettaID, ��� ������� �� ���������� ��
SELECT last_insert_rowid() istruzioni) VALUES( �������������������������
������� �������� � ���������
%s,"Rosolare la carne. ��� ����������� ��� ����� ��� ��������� ����
����� �� ��������� ��� � �� Aggiungere tutti gli altri ����������� ��������� ������ �
ingredienti. Portare a �� �������� ����� ������� ������� �� ����� ��� �� ���
����� �������� �������� ����� ebollizione. Mescolare.
������ ��� ������� �������� ���������
��� ����� �� ���������� ���� �� Cuocere a fuoco lento.
���� ������ �������� �� �� ������ �
������ ����������� �� ������ � ����� �
�������� ����� ��� ������ ���
#!/usr/bin/python
��������� � ������ ����� � � � �������� �� ������ �������� #------------------------------------------------------
�������� ��� �� ����� ��� ������ # Ricettario.py
��������� �������� �� ���� � # Creato per Programmare in Python #8
������� # e Full Circle Magazine
#------------------------------------------------------
import apsw
��� ���������� �� ������ import string
����� �� �������� ��� ����� import webbrowser
��������� �� ������ ������� ��
class Ricettario:
������ ���� ���� �� ������
�������� ������� �������� ������� ������� ����� ��� �������� ��� ����� �� def Menu():
������� ��� �������� ��� cbk = Ricettario() # Inizializza la classe
���������� ������� �� �����
Menu()
������ �������� �� ��������
������ ��� ��� ����� ������ �������� ���� �������� ������ ����
�������� �� ����� � �������
def Menu():


������ ������������ �� cbk = Ricettario() # Inizializza la classe
���������� �� ������ ���� ��� ��������� ������������ loop = True
�������� �� ������� ��� ��� � �������� �� ���� ����� while loop == True:
������� �������� ����� print
������ ��������� '==================================================='
����� �� ������ ���� print ' DATABASE RICETTE'
����� ������ ��� ����� ������� ����� ����������� ���� print
������ ����������� �� ����� � ��� ������ ������� ����� �������� '==================================================='
������������ ���������� �� ������� print ' 1 - Mostra tutte le ricette'
��������� �� ������ ��� print ' 2 - Cerca una ricetta'
�� ���������� �� ������ ������� �������� ��� ��������� print ' 3 - Mostra una ricetta'
��� ������ �� ������ ��������� ��� ���������� ��� ��������� ������ print ' 4 - Elimina una ricetta'
�������� ��������� �� ���������� � ���� � ������ ������ �� print ' 5 - Aggiungi una ricetta'
���� �������� � ���������� ������� print ' 6 - Stampa una ricetta'
�������� ����� ��� ���������� �� print ' 0 - Esci'
���� ����������� ���������� ����� ���� � ������ ���� � print
��� ��������������� ��� ���� ��� ������ ������� �� ������� '==================================================='
���������� ������ ������� ����������� ��� ��������� ��� response = raw_input('Inserisci una selezione -> ')
������� �� ������ �� �����
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� � /usr/bin/python -u
"/home/greg/python_examples/APSW/cookbook/cookbook_stub.py"
===================================================
DATABASE RICETTE
if risposta == '1': # Mostra tutte le ricette ===================================================
pass 1 - Mostra tutte le ricette
elif risposta == '2': # Cerca una ricetta 2 - Cerca una ricetta
pass 3 - Mostra una ricetta
elif risposta == '3': # Mostra una ricetta 4 - Elimina una ricetta
pass 5 - Aggiungi una ricetta
elif risposta == '4': # Elimina una ricetta 6 - Stampa una ricetta
pass 0 - Esci
elif risposta == '5': # Aggiungi una ricetta ===================================================
pass Inserire una selezione ->
elif risposta == '6': # Stampa una ricetta
pass
elif risposta == '0': # Termina il programma �������� �������������� ���������
print 'Arrivederci' �������� �� ����� ��������� ����
loop = False
����� � ������ ����� �����
else: ������� �� ��������� �� ������� �� ������ ����� ������� �� �� � � ��
print 'Comando non riconosciuto. Riprova.' �� ��� �������� ���� ������ ���������� �� �������
�������������� ��� ��������� ���� �� �������������� ��
�������� ������ ���������� � ������� � ������ ����� �� ��� ���������� �������� ����� ������ �������� ����������� ��
������ �� ������ ������� �� ������� �������� �������� ����� �� ������� ���� ��� ��������� ������� ���� ���
��������� ������ ������ ����� �� �������� ����� ������ ������ ������� ������� ����� �� ������ ������������������������� ��
��������� �������� �������� ����� ����������� ������ ������� �� ���������� ������ �� ��������� �������� ��� �������� �� ������
������ ������ �� �������� ����� ��� �������� ��� ������ ����� �� ���� ���� �� ������ �� ���� �����
������������ ����� ������� def MostraTutteRicette(self): ������ �����������
def __init__(self): �������� �� ��� ��� �������� �� pass
pass def CercaRicetta(self):
������� ��� �������� �� ��� ��� pass �������� ���� �� ���� �
������ � ���� �� ��� ������� def MostraRicetta(self,quale): ��������� �� �������� ����� �����
���� ������� �� ��������� ������� �������� �� ����� � ��� �� pass �� ����� ���������
���� ����� ������� �� �������� �������� �� ��� ��� �������� ��� def
������ �������� ����� �� EliminaRicetta(self,quale): def __init__(self):
�������� �� ��� ��� �������� �� pass
����������� �������� ������ ����������� � �� ��� ��� �� global connessione
def InserisciNuova(self): global cursore
�������� �� ������ � ������ ������ ��� �� ��������� pass self.totalcount = 0
�������� �� ���� � ������� ������������ �� def Stampa(self,quale): connessione=apsw.Connection(
pass "cookbook.db3")
�������� ������������������ ���
�������� ������������� ��������� �� ����� ��������� ����� cursore=connessione.cursor()
�������� �� ���� � �������� ������ ����� ���� �� ����
� ������ ������� ����
������ ��� �������� ���� ������ ����������� ����� �� ������� ����� ������� ��� ���������
������� ������������ � ���������
�������� ������������� �� ����� ������� �������� �������� ������� ��� ����������� �
������ ��
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
for x in ������ �������� �� ���������
cursore.execute(sql): ������� �� ���� � ����������
if risposta == '1': # Mostra tutte le ricette cntr += 1
cbk.MostraTutteRicette() print '%s %s %s %s' ��������� � ������� ������
elif risposta == '2': # Cerca una ricetta %(str(x[0]).rjust(5),x[1].ljus �������� �� ���� ����� ������
pass t(30),x[2].ljust(20),x[3].ljus
elif response == '3': # Mostra una ricetta ���������
t(30))
cbk.MostraTutteRicette() print '-------------'
elif response == '4': # Elimina una ricetta self.totricette = cntr ������� ���� �� ������ ��
cbk.MostraTutteRicette() ��������� ��� ����� �� ������
elif response == '5': # Aggiungi una ricetta
pass �� ��������� ���� �������� �� ������� �� �� �������� ��
elif response == '6': # Stampa una ricetta ������ �� ������� �������� ��������� � ������� �����������
cbk.MostraTutteRicette() ����������� �� ������ �������� � ��� ����� ���� � ������
elif response == '0': # Termina il programma �������� ��� ����� �� ����� ����
print 'Arrivederci' ������� �� ����� � ��������
loop = False ����� �� ������� �� ���� �� ��� ��� ����� ��������� �������� ���
else: �������� ��������� ��� � ��� �������� ������
print 'Comando non riconosciuto. Riprova.' ����� �� ������ ���� ���������
������ ���� �� ��� ����� �� �� ������ �� ������� �����
����� ���������� ����� �������� ��������� ��������� ���� ���
�������� ������� ��������� �� ������� �� ������� �� ���������� ���� ���� ������������
��������������� �� �����
������� ����������� ����� ������ ������������� ���� � �� � ��� �����
��������� ���� ���� ������ ��
������ ����������� ���� ������� �� ������� ��� ������������ �
�������� �������� ������ ��
��������� ��������������� ��� �������� ��� �������� �� ����� print 'Ricette totali - %s'
���������� �� ������� �� %cbk.totricette
������� ��� ������� �� ������ �������� � �������� ��������
����������� �� ������� ���������
�� �������� �� ������� ��� ��� ������ ���� �������
������� ������ ������� ��
����������� � �� �������� Item Nome Porzioni Provenienza def MostraTutteRicette(self):
print '%s %s %s %s'
--------------------------- %('Item'.ljust(5),'Nome'.ljust(30),'Porzioni'.ljust(20
�� ����� ���������� ���� �� ),'Provenienza'.ljust(30))
���������� �� print '---------------------------------'
��� ������ �������� ������
�������� ��������������������� sql = 'SELECT * FROM Ricette'
������������ ���� ����������� �� cntr = 0
������ ����������� � ������� �������� � �������� �� ���������� for x in cursore.execute(sql):
���� ��������� �������� ��� �� ������� ����� ���� ����� cntr += 1
������� ������� �� ��������� �� print '%s %s %s %s'
�������� ��� ���������� ���������
�������� �������� ��� �������� %(str(x[0]).rjust(5),x[1].ljust(30),x[2].ljust(20),x[3
].ljust(30))
��� �� ������������ ����� ����� sql = 'SELECT * FROM print '---------------------------------'
������� ������� �������� � Ricette' self.totricette = cntr
������� �� ������� ��������� cntr = 0

���� ������ �������� �� �� ������ �


����������� �� ������ � ����� �
������� �
�������������������������������
Inserire una selezione -> 1
Item Nome Porzioni Provenienza �������� ����� �������������� �
-------------------------------------------------------------------------------------- ���� ���� ���������� �������
1 Spanish Rice 4 Greg ������������ ����� ����� �������
2 Pickled Pepper-Onion Relish 9 half pints Complete Guide to Home Canning ����������� ���� ��������� ���
--------------------------------------------------------------------------------------
=================================================== ������ ������ ����� �������
DATABASE RICETTE �������� � ������ �� ���� ������
=================================================== ������ �������� ����� �����
1 - Mostra tutte le ricette ���������� ��������� �������
2 - Cerca una ricetta
3 - Mostra una ricetta ����������� � ���� ���� ��
4 - Elimina una ricetta ���������� ����� ������� �����������
5 - Aggiungi una ricetta ������� ���� ����� ��� �� �������
6 - Stampa una ricetta ������������ ��� ������
0 - Esci
=================================================== ���������� ��� �������� �����
Inserire una selezione -> �� ����� ���� ��� ����� ������
�� ������� � �������� �� ������ ��
������� ����� �������� �������
print '---------------------- ���������� ���������� �� ������� ������ ��� �������� ��������
------------------------------ ��� ������ �� ��������� ��� ������ ���������� �������� ���
' ����� ��� ����� ��� ��������
������ ������ �� ����� ��������� �� ����� �� ���� ������� ������ �����������
���������� ��������������� ��� ������ ���� ������ � ����
res = raw_input('Premere ����� �������� ������ ���������
Tasto A -> ') �� ���� ����� ������� �������� �� ��������� ���������� � ������ ���������� ��� �����
��� �� � �������� �� ������ ������ ��� ��������� ��� �������� �������������� ������ �����
��� �� ������� ��������� ����� ������� �� ������� �������� ����� ������ ���������� ������������� ��
��������� � ������ ��� �������� � ����������� ����������� ����� ���� ��� ���������������� ����� ������� �� ����� ����� �������
�� ���������� ����� � ������� ���� �������� � �������
��������� ����� �� ����� try:
����������� �� ����� ��� ��������� ����� res = int(raw_input('Seleziona una ricetta -> '))
���������� �� ����� ����� �������� �������� �������������� �������� if res <= cbk.totricette:
���� ������������ � � ������ ���������� ��� �� ����������� cbk.MostraRicetta(res)
� �� ������� ������ ������� elif res == cbk.totricette + 1:
���������� �� ���������� ���� print 'Torno al menu...'
��� ������� ������ �� �� ������ ������������ ���� �� ������ ���� else:
����������� ����������� ������� ������ �������� � ���� ������� print 'Comando non riconosciuto. Torno al menu.'
�� ��������� ����������� ����� ���� � ��� � except ValueError:
����������� ���� ����� � �� print 'Non un numero. Torno al menu.'
���������� �� ���������
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
������ ���������� �� �������
���� ���� SELECT * FROM Ricette WHERE def MostraRicetta(self,which):
nome like '%riso%' sql = 'SELECT * FROM Ricette WHERE pkID = %s' %
cbk.CercaRicetta() str(which)
print
����� ���� ��� �� ��������� '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
��� �������������� �� ������ ��� � ����� �� ��������� �� for x in cursore.execute(sql):
������ �� �������� ����� ������ ������������ ����� ������ ricettaid =x[0]
����������� ���������� �� ������ ��������� �������� ����� �� print "Titolo: " + x[1]
print "Porzioni: " + x[2]
��� ������������ ��� ������ ��� ������� ��� ������������� �� print "Provenienza: " + x[3]
�������� ����� ������ ��������� ���� ������� �� ��������� �� print
������������ ��� �������� �� '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
��� ����� �� ����� ���� ���� ������ ��� �������� ������ ��� sql = 'SELECT * FROM Ingredienti WHERE RicettaID
= %s' % icettaid
������ �� ����������� � �� ������ ������� �������� print 'Lista Ingredienti:'
������� ��������� �� ���� �� ��������� ������� �� � ���� for x in cursore.execute(sql):
�������� ������ ���������� ��� ������� �� ����� ����� � print x[1]
�������� �� ������� ��� �������� ���������� ����� print ''
print 'Istruzioni:'
���������� ��� ������� �������� ����������� ��� �� ������� sql = 'SELECT * FROM Istruzioni WHERE RicettaID
���������� ��� ������� ��� ���� = %s' % ricettaid
����� �������� ����� ����������� � sql = "SELECT for x in cursore.execute(sql):
r.pkid,r.nome,r.porzioni,r.pro print x[1]
����� ����� ������������ ��� venienza,i.ingredienti FROM print
������ ��� �������� ����� Ricette r Left Join '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
������������� �� �������� ingredienti i on (r.pkid = resp = raw_input('Premere Tasto A -> ')
������ ������ ��� �������� �� i.ricettaid) WHERE
i.ingredienti like '%%%s%%'
������� �� ������� ������� �� GROUP BY r.pkid" %risposta if cercain != '4':
��� ����� �������� �� ����� ��� ����� ������� ������� ��� �������
������� ����� �������� ���������� �� �������� ��������� ��
�� ������� ������������ ����� ��� ���������� �� ������� ���
������ ��� ������������ ���������� ������� ��������
����� ������� ������� � ��� ������ �������� ������������ ���
������� �� ������������� ������� ��� ����� ����� ������� �������
����������� �� ������ ������������ � ������ � � ������ ������ ��
�� ��������� ����� �� �������� � �������� ��������� ���
������ � ���������� �� ������� �������� �� � � ������ ��� ����
��������� ���� ������ ����� � ��� ������ ������
����������� �� ��������� ������� ������ ����� ������ ������ ��� ��
�������� �������� �� ������ �������� ������ ����������
������ ������ � ���� ����� ����� ���� ���� ��� ������ �
���������� ���� �������� �� ������������ �� ������ ���� ���
������� �������� ������ �� ������� ������ �� ����� �������� ��
��������� ����� ���� ����� ��� � ������ ����������� ������ ����� ���� ������ �� ������ ����
cercain =
������� ��� ������� ���������� ������������ ����� �� ����������� �� raw_input('Inserisci Tipo di ���� �� ������ ��� ���� ��
��� ���� �� ������ ������� �� ����������� � ��������� ��� ���� Ricerca -> ') ������ �� ��������� ���������� ���
������ ����� ��������
���� ������ �������� �� �� ������ �
def CercaRicetta(self):
# mostra il menu di ricerca
print '-------------------------------'
print ' Cerca in'
print '-------------------------------'
print ' 1 - Nome ricetta'
print ' 2 - Provenienza ricetta'
print ' 3 - Ingredienti'
print ' 4 - Esci'
cercain = raw_input('Inserire Tipo di Ricerca -> ')
if cercain != '4':
if cercain == '1':
cerca = 'Nome Ricetta'
elif cercain == '2':
cerca = 'Provenienza Ricetta'
elif cercain == '3':
cerca = 'Ingredienti'
parm = cercain
risposta = raw_input('Cosa cerco in %s (nulla per uscire) -> ' % cerca)
if parm == '1': # Nome Ricetta
sql = "SELECT pkid,nome,provenienza,porzioni FROM Ricette WHERE nome like '%%%s%%'" %risposta
elif parm == '2': # Provenienza Ricetta
sql = "SELECT pkid,nome,provenienza,porzioni FROM Ricette WHERE provenienza like '%%%s%%'" %risposta
elif parm == '3': # Ingredienti
sql = "SELECT r.pkid,r.nome,r.porzioni,r.provenienza,i.ingredienti FROM Ricette r Left Join ingredienti
i on (r.pkid = i.ricettaid) WHERE i.ingredienti like '%%%s%%' GROUP BY r.pkid" %risposta
try:
if parm == '3':
print '%s %s %s %s %s'
%('Item'.ljust(5),'Nome'.ljust(30),'Porzioni'.ljust(20),'Provenienza'.ljust(30),'Ingredienti'.ljust(30))
print '--------------------------------------------------------------------------------------'
else:
print '%s %s %s %s' %('Item'.ljust(5),'Nome'.ljust(30),'Porzioni'.ljust(20),'Provenienza'.ljust(30))
print '--------------------------------------------------------------------------------------'
for x in cursore.execute(sql):
if parm == '3':
print '%s %s %s %s %s'
%(str(x[0]).rjust(5),x[1].ljust(30),x[2].ljust(20),x[3].ljust(30),x[4].ljust(30))
else:
print '%s %s %s %s' %(str(x[0]).rjust(5),x[1].ljust(30),x[3].ljust(20),x[2].ljust(30))
except:
print 'Errore'
print '--------------------------------------------------------------------------------------'
inkey = raw_input('Premere un tasto')

���� ������ �������� �� �� ������ �


����������� �� ������ � ����� �
����������� �� ������ ��� �� ��
�������� ������� ��� ���� ��������
� ����� ���� ��� ������� �� Inserire una selezione -> 2
��������� � ������ ��� ��� -------------------------------
��������� ���������� �������� Cerca in
��������� ���������� ������ -------------------------------
1 - Nome Ricetta
��������� � ������ ���������� 2 - Provenienza Ricetta
���� ����� ��������� 3 - Ingredienti
4 - Esci
������ ������ ���� �� Inserire Tipo di Ricerca -> 1
Cosa cerco in Nome Ricetta (nulla per uscire) -> rice
��������� ������ �� �� ���� Item Nome Porzioni Provenienza
������ ��������� ���� �������� --------------------------------------------------------------------------------------
��� ������� �������� �� ���� � 1 Spanish Rice 4 Greg
����� ��������� � ��� �������� --------------------------------------------------------------------------------------
Premere un tasto
��������� ������� ������ �������
�� �������� ����� � ���������� ���������� ��������� ��� �� ������� ����� ��������������
������� �� ������ ���������
����������� �������� Inserire una selezione -> 2
���������� ��� ���� ���� ������ -------------------------------
Cerca in
�������� ���� ��� �������� �� -------------------------------
������� ��������������� 1 - Nome Ricetta
2 - Provenienza Ricetta
cbk.InserisciNuova() 3 - Ingredienti
4 - Esci
Inserire Tipo Ricerca -> 3
�� ������ �� �������� Cosa cerco in Ingredienti (nulla per uscire) -> onion
�� ���������������� ����� ������ Item Nome Porzioni Provenienza Ingredienti
���������� � ����
������������������������������ --------------------------------------------------------------------------------------
1 Spanish Rice 4 Greg 1 small
Onion chopped
�������� ��������� ��� ����� 2 Pickled Pepper-Onion Relish 9 half pints Complete Guide to Home Canning 6 cups
�������� ������� ��� ��� ��� finely chopped Onions
������������ ������ ���������� --------------------------------------------------------------------------------------
Premere un tasto
���������� �� �������� �� ������� ��
����������� � �� ���������
������ ��������� �� �� ����� ���
�������� ������� ����������� ��
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
���������� ���� ����� ����� �� ����� ������ �������� ���
cbk.MostraTutteRicette()
�������� ��������� �� �� ���� ��� ��������� ���������� ��� �
print '0 - Ritorna al Menu'
����� � �� �������� ��������� �� ������� �� ����� ��������� �� try:
����������� ������ ��������� �� �������� �� �� �������� � ��� res = int(raw_input('Seleziona una Ricetta da
��������� ����� ������� ������������������� �� ���� ELIMINARE o 0 per uscire -> '))
if res != 0:
��������� ���������� �� ������ �������� �� ���������� ���
cbk.EliminaRicetta(res)
����������� ����� �� ��������� ��� ��������������� ������ ���� elif res == '0':
������� ���������� ������ ����� ������ ����� �������� print 'Ritorno al Menu...'
���� ������� ����� �������� ���������� ������ �� ����� � ��� else:
print 'Comando non riconosciuto. Torno al
������ � ���������� �� ����� �� �������� �������� ����
menu.'
�������� ���� ���������� ���� ���������� ������ ����� ������� except ValueError:
����� ������� ��� ������ �������� �� �� ������������ ��� print 'Non un numero...torno al menu.'
������������ ������������ ������ ������ ����� ����� ���� �
��� ������� �� �������� ����� ��� � �� ����� ������
def EliminaRicetta(self,quale):
����� ����������� � ����� ���������� �� ������ ����� resp = raw_input('Sei SICURO di voler ELIMINARE
����������� �� ��� ����� ������ � ������� �������� ������ �� ����� questo record? (S/n) -> ')
����������� ���������� �������� ����� ����� ����� ��� ������� if string.upper(resp) == 'S':
������� ���������� �� ������ ���������� sql = "DELETE FROM Ricette WHERE pkID = %s" %
str(quale)
��������� �� ������ ����� �� cursore.execute(sql)
���� ����� �������� �� �������� ��� ������ �� ��������� ����� sql = "DELETE FROM Istruzioni WHERE ricettaID
��� �� �������� �������������� �������� ��� �������� �� = %s" % str(quale)
��� � �� ������ ��� ��� ������� �������� �������� �� ���� ���� cursore.execute(sql)
sql = "DELETE FROM Ingredienti WHERE ricettaID
��������� �� �������� ������� ����� ��������� �� �������� = %s" % str(quale)
������������ �� ����� �������� ��� ������� ����������� ��� cursore.execute(sql)
���� �������� �� ������ �� ���� � ���������� ���� ������ print "Ricetta ELIMINATA"
������� ���������� �� �������� resp = raw_input('Premere il tasto A -> ')
else:
����������� ����� �������� print "Eliminazione annullata - Torno al menu"
������� ����� ������ ���������� ���� ��� ��������� � �������� ��
����� �� ������ �� ����� � ������ ������ �������� �� ���� ����
��� �� �������� ����������������� ������ ����������� ����� ������ ����������� �� ������ ����� ������� ������� � ��
� �������� �� ���� � ������ ����� ��������� ��� ���� ��� ��
��������� ����������� �� ������� ���������� ��� ����� �������� ������� ������� ��������� ������ �� ���
�������� ��� ��������������� �� ����� �� ������� ��� ������������ � ��������� ���
����� ��������� ���������� ����������� ������ ��� �� �������� ��� �� ������� �� � �� ������� ������ ���� ��� ��
����� ������� ��������� ������ �� �������� ��������� �������������������� ��� ���� �� �������� � �� ������������
����� � �������� ���� ���� ���������� �� �������� ������ ����� ������ ��������� � ���� ������ ������ � ��� ���������
���� ������ �������� �� �� ������ �
����������� �� ������ � ����� �
��� �������� ����� ����������� �
����������� ��� �� �����������
cbk.MostraTutteRicette()
����� ������ �� ������ �� �������� print '0 - Torna al Menu'
����� ��� ��������� ������� try:
��������� �� ���� ��� �� ������� res = int(raw_input('Seleziona una Ricetta da ELIMINARE o 0 per uscire ->
���������� � ������ '))
if res != 0:
��������������������������� cbk.Stampa(res)
��� �� ���� ������ ������� elif res == '0':
�������� ��� ��������������� print 'Torno al Menu...'
��������� ��� ������� �������� else:
print 'Comando non riconosciuto. Torno al menu.'
�� �� ��������� except ValueError:
print 'Non un numero...torno al menu.'
���� �� ���� ������ �
����� �� ��������� ���
������������ �� �������� ����� ��
������ �������� �� �� ��������
������������ �� �� ����� �����
def Stampa(self,quale):
������ ��� ���� ������� ��� ��� fi = open('stamparicetta.html','w')
���� ���� �� ��� ������ sql = "SELECT * FROM Ricette WHERE pkID = %s" % quale
������������ ����� � ����� for x in cursore.execute(sql):
������� �������� ������ �������� NomeRicetta = x[1]
ProvenienzaRicetta = x[3]
������������������������� PorzioniRicetta = x[2]
��� ���������� �� ������� fi.write("<H1>%s</H1>" % NomeRicetta)
fi.write("<H2>Provenienza: %s</H2>" % ProvenienzaRicetta)
fi.write("<H2>Porzioni: %s</H2>" % PorzioniRicetta)
fi.write("<H3> Lista Ingredienti: </H3>")
sql = 'SELECT * FROM Ingredienti WHERE RicettaID = %s' % quale
for x in cursore.execute(sql):
fi.write("<li>%s</li>" % x[1])
fi.write("<H3>Istruzioni:</H3>")
� �� ������������ sql = 'SELECT * FROM Istruzioni WHERE RicettaID = %s' % quale
����� � for x in cursore.execute(sql):
��� ������� �� ���������� �� fi.write(x[1])
������� �������� � ��������� fi.close()
��� ����� ��� ��������� ���� webbrowser.open('stamparicetta.html')
����������� ��������� ������ � print "Fatto"
������� �� ����� ��� �� ���
���������

���� ������ �������� �� �� ������ �