Professional Documents
Culture Documents
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.
���� ������
����� ���� ������ ���� �����������
���� ������ � ��� ������� �������� � ���� ����
������������� �������� ���� �������� ����������������������������������
������ ��� ������� ��������� ������ ������
���� ���� �������� ����� �������� �� ������� ������������ ��� �� �������� ����� ������ ����������������������������������
������� � �������� ������� ��� �������� ������������
����
���� ������ �� ����� �� ������� �� ���� � ��� �� ����� �������� ������������� ������������������� ��
��������� �� ���� ������ �������� ��� �����������������
��� ������ ��������� ����� ������� � ���� ��������� ��� ������ �������� ������ ����������� �� �������� ��������
����� ������������ �������� ������ ����� �������� ���������� �� ������ ������ ����������
���� ���������� ������ ������
������ ��� ����� ������� � �� �������� ����� ����� ����������� �� ������ � ����� �������������
����� � �� � ���������� ��� ������ ������ ������ �� ��������� ������ ������ ��� �����������������������������
������� ��� ����������� ���������� ��� ������
�� ����� �� ������ ��� ������ ����� ����� � �������������
�������� �������� ����� ������� �����
�� ���������� ����� �� ������ ���� ���� �� �������������� �� �������� ������� ����������������������������
������ ��������� �� ��� �� �����������
�� �������� � �������� ���������� ������ ������� �������� �� ������� ���������� ����� �������
�� �� ������� ���� ������ ����� ������
����������� �� ������ �������� � �� ������ �������� ����� �� ������� ������ ���� �������������
�������������� ����� ������� �� ���� �
��������� ����� ����� �� ������ �������� ��������� �������� ����� �������� ��� ������������������������������
����� ��� ������� �������� ��
������� ��� �������� ���������� � ����������� ��� ���������� ����� ������ ������� ����� ��������������
�������� � ���� ��������������� ���
�������������� ������ ��������
������� ����������������� �� ������
����� ��������� �
�����������
���� ������������� �������������������������������
��� �������� ��������� �� ������ ������� ���� ����� ���������� ����� �� ������� �������� ������� ������������ � ��� ����������� � ��������� ���� ������ ����
���� ��� ��������� ��� ������ ��������� �������� ����������� � ������� ��� �������� �� ���� ����� �� �������� ����������� ������ ���������� �� ������ ����������
��������� �� ��� ������� ����� ������� �� ����� �������� � �� ��������� ��������� � � ������ ������� ��� ��� ���� ������ ������ ���������� � ��� ���
��������� �������� �������������������������� ��� ��� ���������� ������ ���������� �� ����� ���� ��� ����� ��������� ��� ��� ������ � �� ������� ������� �������������� ����������� ���
� ����� ��� ���� ������������ �� ��������� ����������� � ������ �������� �� ������ ������ ������ ����������� �� ������ ���������� ��� �� ������ ������� � ��� ������ � ������������
���� ������ �������� � ������������� ������������ �� ���������� �� ������� ��� �������� �� ������� � � ����� �� ����� � �� �������� �������� ����� ������� ���
���� �� ����� ���� �� ���������� � ��������� �� ����������
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
N
ella scorsa puntata 'Dic']
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:
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ì:
�
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
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()
���������
�
� ����� ���� ��� �� ���� � ��� �� ������ �������� ��������� � ����� ������ ��������� ������� ��� ���� ��
�������� �� ����� ����� ������ ���������� ���������� � ������ ���������� ����� ������ �� ������� ���������
�� ������ �������� ���� ��������������� � ��������� �� �� ���������� �������� ����� � ������� ��� �����
������ �������� �� ���� ���� ���� � ���������� �� ������ ��������� � �������� �� ������
�� ������� ��� ����� ���� ������ �������� �������� ����� �� ��� �� ���� ���� ������ ���� �� ���������
��� ��� ������������������������ ����� �������� �� ���������� ������ ����� ������ ��� ��
������ �� ��� ��� ���� ��� ���� � ���� ���� ���� �� �� � �� �� ����� ������������� �� ����
����� ������ �� ��� � ��� �� �������� �� ��������� ������ � ������ ��� ����� �������� ������
��� ����� � ������ ��� ����� ��������� ������ �� �������� �� ��� �������� ��������������� ��
��������� ������ ��������������� �������� ������� ������ ��������� ���
�������� �� ��� ���� ����� ��������� ����� �� ������������
������������� ���������� ��� ��������� ��� ��� �� ����� �� �� ������������ ������� ���
������ ������� � ���������� ����� ��� ��������������� ������ � �������� � ����������� ��
������ ��������� ��� ����������� �� ������ ��� ���������� ������ ���������� �� ����� �������� �
������ ���������� ���� ����� �������� � ����� ��� �������� �������� � ���
�
� ��������� ����� �� ������
������ �������� �� ������
����� �� ���� ���� ����������� ��
���� ����� ������� ��� � ��������
�
�� ��� ��������� �� �������� � �� ������������
������ �������� �� ������������
������ �����
��� ������� �� ���������� ��
�� ������� �� ������ ������� ������� �������� � ���������
��� ����� ��� ����� ��������� ����
�������� �������� ������ wx.MessageBox('Hai cliccato ����������� ��������� ������ �
�������� �� ������ � ������� il pulsante, 'Info', ������� �� ����� ��� �� ���
wx.ICON_INFORMATION) ���������
���������� ������ � �� ����
�
������� ��������� ���� ��������� ����������� ��� � ����� ����������� ������ ����������
���� ��� ������� ����� ����� �������� ��������� � ��������� �� ���������� � ���������� ������������� �
������������ ��� ���������� �� ����� ����� �� ������� ������� ���� ��� ����� ��������� ����������� � �����
����������� ��� ������ ������ �������� ������� ���� �� ��� ����� �������� ���� �������� ��� ����� ������ �����
������ ��������� �������� ���� �� ����� � ������ ���� ��������� � ����� ��������� ������ ����� ��������
����������� ��� �� ��������� �� �������� ����������� ��� �� ������������ ��������� �������� �������������� ����� ��
����� �������� ��� �������� �� ��������� ������������ ������ ������ ��� � �� ��������� ���� ������������ ������������ ���
������ ������ ������������ �� �������� � ����� ����� �� �������������� �� �������� ����
�������� ��� ��������� �� ������� ������� ��� ��������� �� �� ������� �������������
�������� ������� ����� ������� ����� ����� � ��������� ���� �������� �� ������ ������ ����� ��
��� �������� �� ������� ������ ����������������� ������������ ����������� ���
����� �������� �� ����� �������� ���������� ��
������������� � ������ ������ ��� ������ ��������� ��� ������ ��� ������ ����������� ��
��������� � ����� ��� � ��������� ���������� �� ������� ���������� ���� ����
��������� ��� ����� ����� � ��������� ���������������� ���� ����� ��������� � ���� �����
��������� ��������� �������������
���� ������ �������� ��� ������ �
����������� �� ������ � ����� �
������� ���� ���� �� ������ ��� �������� ��������� ��� ��� ������� ���������� � ���� ����� ����� ���� ���
������� �� �������� ��� ���������� ������ ������ � ������ ����� �������� �� �� ����� ���� ��� �������
����������� � ������������ ����������� ��� ��������� ������� ��� ����� ����� �������� ����� � ����������� ���
��������� �� ��������� � ��������� ���� � �������������� ������ �� �����
��������� �� ��������� � �� �������������� � ����� � ������� ����� �������� ������� ���� ��� ����� ���� ������
������� �� ���������� ��� ������� ��������� �������� � ���� ����� ��������� ����� ������� ��������� ���
������ �� �������� ����������� �������� ���������� �� ������� �� �� ������ ���� ���� ��������� ��� �����������
������ ��������� � ��� ����� ���������� ������������ �� ����� ����� ��������� ��������� ����� �� ����� ������ �������
������������� ����������� �� �� ������� ���� ���� �������� �� ���� ��� ���� ������� ��������� �� ����������� ���
��������� ����� ���� ���� �� ����������� � �������� �� ����� �� ����������� ���������� ����������� �� ���������
������������ ������ ������ ���� ������� ��������� �� ������� ������� ������������� ���� �� ������� �������� �����
�� �������������� ������ ��� ������ ���������� �� �������� ���������������� �� ������� ������������� ���
�������� ������ ������������� ��� ����� ����� ����������� �� ��������� ������ ��������� � �����������
�������������������� �� ����� ��������� ��� ������ ��� ������������ ����� �� ���� ��������������������
������ ���������������� ���� ������� ������������ ��� ������� ���� ���������� ������� ����������� ���
����������� �� �������� �������� ����� ��� ����������� ��� ������ ������� ������������� ������ ������ �� �� ���� ��� ���������
���� �� ������ ����� ������� � ��������� �� ��������� � �������� �� ����� ���� � ������� �������� �������� �� �������
������������� ��� ��� �������� ����� �� ����� � ���� ������ �� ���� ��� ���� �������������� ����� � ���������� ������
������������������ ������ ���� ������� ������� ��� ���������� ���������� ��� ���� ����������� ������ �������
�� ����� � �������� ������ ����������� �� ��������� �� ���� ���� �������������������������� ������������ ��� ��������
������ ����� �������� ������ � ��� ��� ��������� ������ ����� ��� ������� �������� � �������������� ������ �� �� ����
�������� ����� �� ������ �������������� ����������� ��������������������������� �� �����
�������� � ����� � ��� ��������� � � ��� ��� ����� �������� ����
������������ ��� �� ����� � ��������������� � � ��� ��������� ������������������������ ���� �������� �� ������ ��
��� ������ ������ ������� ���� ������ ���� � ������ ��� ������ ��������� ���������� ������������ ��� �� ���������
���� �������� �������� �� ������ ������������ ���� ���� �� ����� � �������������� � ���������� �� ���� ������ ����� �� ������
�������� �������� ��� ������ ��������� ����������� �� ����
������������ �������� ���
self.Fs.Show() �������� �� ���������
self.Hide()
������������ ������� ����� ��������
�� ������������� ���������� ��
��� ������� ����� �� ������
���� ��������������� �
������������������
���������� ������ ����
���������� ��������������� �
���������� �� ���� self.parent.Show()
��������������� self.Hide()
[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)
��� � ����� ��������� ������ ��� � �� ������������� ��� �� ���� ��������� ���� ����� ��� ��������
����� ��� ��� ��� ���� ��������
�������� �� �������� �� ��������� ��� ����������
������� ����� ��������� ��� ���� ����������� ����������� �
� ���� ��� � ��������� ����� ��� � ��������������� ������ �����
��� �� ����� ������ � ����� ������� �� ������ � �������������
���������� ��������� ���� ��� ������� � ��� ����� ����
������������� ������ ������ ����� ������������ ����� ��� ������
��������� ��� ����� ���������� ���� ����� ����������� ���
������������ �� �� ���� ����� ���������
��� �� ����� � ��������� ������ �� ��� ����������� �� ������
�������� ����������� � ������� � ������� ��������
��� ������
������ �������� ��� ������� �� ���������� ����� ��� �������
������ ��� ����� � ����������� �� � �� ������������ ��������� ���
�
��������� ������� � ������������� ����������� ������ ���������� ��������� ������ �������� ���
�������� � �� ������� ���������� ��� ����� ��� ��� ���� ������ ��� ����� �
�� ��� ������� ����� ��� �� ������� ����� ���� �� �������� ������ ������ ����� �� ��������� ���� ����� ������ ��
����� ������ ��� �������� �� �� ����� ������ �� ��������� ������ ������ � �� ������ ����� ����
������������ ������� ����� ����������� ������ �� ������ ��� �������� �� ��� �� �� ����� ����� ����� ��� �� �����������
��������� �� ��� �� ���� ����������� ��� ������� ����� ���� ��� ���� �� �� �� �� ������
����� ��� ����� �� ����� �������� ������ ������������ ������ ��������� �������� �� ������� ����� �� ��� ���������
��������� ����� ������ ������ ����� ������ ���� ��� ��� � ����������� �������� ��� �����
����� �������� ����� ������� �� ������� ��� ���������� ��� � ������ � ������ ��� �� ������� ����� ��������� ��������
���������� �������� ��� ����� ������� �������� �� ��� ���� �������� ����� �������� �� ������ � ��������� ������� ����
������ ������ ����� �������� ����� �� ����������� �� ��� ���� ���������� �� �������� �� � �� ��������� ��������� ���
�������� �� ����� ����� ���� ����� ��� �� �������� � ��� ��� ����� � �� ������ ������� ���� �������� ���� �������� �
������ �� ������� ��� ��� ���������� ��� � �� ���� ���� ����� ������������ ������ ����� ������ ��� �������
���������� ����� ������ ����� ���������� ��������� ���� ����� �� ��������� � ��� �����
���������� ������ �� ������ �� ����� ��������� �� ����� �� ������ �� ����������
�
������ ������������ �� 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