3757
Commento:
|
13733
formattazione del documento, alcune correzioni
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
== Presentazione == Python è un linguaggio di programmazione molto versatile e di altissimo livello. Utilizzato sia per lo scripting che per la realizzazione di programmi completi. E' interpretato, orientato agli oggetti ed estensibile tramite il linguaggio C. Tra i suoi difetti le prestazioni non eccezionali. == Breve introduzione == |
#language it [[BR]] ||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]|| = Introduzione = |
Linea 7: | Linea 9: |
E' interpretato e quindi caratterizzato da una grande portabilità su differenti piattaforme (Linux,Windows,Mac.....).[[BR]] Proprio per la sua natura di linguaggio interpretato però le sue prestazioni non sono paragonabili a quella di altri linguaggi compilati come il C o il C++. E' sempre possibile tuttavia scrivere estensioni in C all'interprete. [[BR]] Python può appoggiarsi a molte famose librerie scritte in C o C++: gui (wxpython, pygtk...), tool per lo svilippo di giochi (pygame,pysdl...), databases (mysqldb...) ...[[BR]] E' un linguaggio di altissimo livello ed ha una sintassi molto piacevole e intuitiva (ideale per chi si avvicina alla programmazione!). I programmi scritti in python risultano spesso molto sintetici ed eleganti nella forma (ma ricordiamo che tutto dipende anche dallo stile personale del programmatore! ;-)).[[BR]] E' nativamente un linguaggio orientato agli oggetti ma a differenza di altri linguaggi come il java permette anche uno stile procedurale e/o funzionale.[[BR]] E' utilizzato per una vasta gamma di scopi: scripting, creazione di programmi completi, estensioni di programmi scritti in C, realizzazione di prototipi di applicazioni che andranno poi riscritte in un differente linguaggio.... == Risorse == In lingua italiana: '''Python.it'''[[BR]] http://www.python.it/ [[BR]] Il sito di riferimento per i programmatori python italiani! Qui potete trovare le traduzioni in italiano della documentazione ufficiale nonchè le FAQ sul linguaggio. In lingua inglese: '''Pyhton.org'''[[BR]] http://www.python.org/ [[BR]] Il sito ufficiale del linguaggio python. Trovate la documentazione in inglese aggiornata all'ultima versione dell'interprete, in più tutte le novità e le iniziative che ruotano intorno a questo linguaggio. == Installazione == Con l'installazione standard di ubuntu l'interprete python dovrebbe già essere installato sulla vostra macchina, in caso contrario è sufficiente installare il pacchetto python da Synaptic o da riga di comando: ''sudo apt-get install python'' |
È interpretato e quindi caratterizzato da una grande portabilità su differenti piattaforme (Linux, Windows, Mac, ...).[[BR]] Python è estensibile tramite il linguaggio C. Può inoltre appoggiarsi a molte famose librerie scritte in C o C++ per la creazione di GUI (wxpython, pygtk...), tool per lo svilippo di giochi (pygame, pysdl...), database (mysqldb, ...).[[BR]] È un linguaggio ad alto livello, ha una sintassi molto piacevole e intuitiva (ideale per chi si avvicina alla programmazione). I programmi scritti in python risultano spesso molto sintetici ed eleganti nella forma (ma ricordiamo che tutto dipende anche dallo stile personale del programmatore! ;) ).[[BR]] È nativamente un linguaggio orientato agli oggetti ma a differenza di altri linguaggi come il java permette anche uno stile procedurale e/o funzionale.[[BR]] Ideale per realizzare applicazioni velocemnete, è utilizzato per una vasta gamma di scopi: scripting, creazione di programmi completi, estensioni di programmi scritti in C, realizzazione di prototipi di applicazioni che andranno poi riscritte in altri linguaggi. = Installazione = Con l'installazione predefinita di Ubuntu l'interprete python viene già installato. In caso contrario, è sufficiente installare il pacchetto ''python'' da utilizzando [:SynapticHowto:Synaptic] o da riga di comando: {{{ sudo apt-get install python }}} |
Linea 39: | Linea 24: |
Bene ora non vi reste che lanciare l'interprete interattivo e fare pratica. Aprite una shell e digitate python [INVIO][[BR]] Dovrebbe apparirvi qualcosa tipo questo: {{{ |
Bene ora non resta che lanciare l'interprete interattivo e fare pratica. Aprire un terminale e digitare: {{{ python }}} Dovrebbe apparire qualcosa del tipo: {{{ |
Linea 51: | Linea 35: |
Adesso proviamo qualche semplice comando: {{{ |
= Semplici comandi = Una volta avviato l'interprete, impariamo a usarlo: {{{ |
Linea 66: | Linea 46: |
Usciamo dall'interprete premendo CTRL+D oppure digitando {{{ |
Usciamo dall'interprete premendo «`Ctrl+D`», oppure digitando: {{{ |
Linea 74: | Linea 51: |
Proviamo a realizzare un piccolo script! Aprite un editor di testo qualsiasi e scrivete: {{{ |
Proviamo ora a realizzare un piccolo script. Apriamo un editor di testo qualsiasi e inseriamo le seguenti righe: {{{#!python |
Linea 81: | Linea 58: |
Salvate in in un file hello.py Adesso aprite una shell e spostatevi nella cartella dove avete salvato il file: {{{cd cartella_dove_avete_salvato_lo_script}}} date i permessi di esecuzione: {{{chmod a+x hello.py}}} e lanciate lo script: {{{python hello.py}}} Se non avete sbagliato qualcosa dovreste vedere le parole "Hello World!" stampate a video. |
Salviamo il file come `hello.py` e impostiamone i permessi di esecuzione: {{{ chmod a+x hello.py }}} Ora eseguiamo lo script: {{{ python hello.py }}} Se non è sbagliato qualcosa, si dovrebbero vedere le parole "Hello World!" stampate a video. = Esempi = Ora che vi abbiamo un po' incuriosito vi proponiamo in questa sezione diversi script esemplificativi a difficoltà crescente. [[Immagine(Icone/Piccole/note.png,,left)]] Tutto ciò che viene scritto preceduto dal carattere # è considerato dall'interprete come un commento.[[BR]][[BR]] [[BR]] [[Anchor(areatriangolo1)]] {{{#!python #!/usr/bin/python# import sys import string import math ''' questa è un'area di commento che uso per indicare cosa fa il programa o sorgente o script il programma principale o il main calcola l'area di un triangolo qualsiasi noti i suoi tre lati usando la formula di Erone formula sqrt p*(p-a)*(p-b)*p(-c) sqrt = radice quadrata, p = (a+b+c)/2 a,b,c lati salvatelo sul disco con il nome che vi propongo AreaTriangolo.py o come più vi piace ''' a = input('inserisci il primo lato ') print ' primo lato = ',a b = input('inserisci il secondo lato ') print ' secondo lato = ',b c = input('inserisci il terzo lato ') print ' terzo lato = ',c print " ora calcolo l'area di questo triangolo" p = (a+b+c)/2 s = math.sqrt(p*(p-a)*(p-b)*(p-c)) print " l'area del triangolo e' =" ,s }}} ''Listato del programma Area``Triangolo.py'' [[BR]][[BR]] Il programma precedente termina se durante l'inserimento dei dati, per errore, viene digitato un carattere non numerico. È necessario quindi inserire un controllo sul dato immesso. A questo scopo è stato preparato questo altro programmino che slaviamo nel file `AreaTriangolo2.py`: [[Anchor(areatriangolo2)]] {{{#!python #!/usr/bin/python import sys import math import string i = 0 l=[] while True: a= raw_input('inserisci il '+str(i+1)+' lato ') for j in range(len(a)) : errato = 'F' if a[j] in string.digits: errato = 'F' continue #continua il ciclo for else: errato = 'T' print "hai digitato qualcosa che non è un numero.Riprova" break # termina il ciclo for if errato =='T': continue #continua il ciclo while i +=1 l.append(float(a)) # completata la verifica che il dato inserito e' una cifra viene trasformata in un numero a virgola mobile e inserita in un array if errato =='F'and i <3: # questo controllo ci serve per riprendere l'inserimento dei dati dopo aver completato il controlo # sul dato precedente continue # continua il ciclo while per passare al successivo input elif errato =='F' and i >=3: print ' primo lato = ',l[0] print ' secondo lato = ',l[1] print ' terzo lato = ',l[2] p = (l[0]+l[1]+l[2])/2.0 # calcola il semi perimetro if p > l[0] and p>l[1] and p >l[2]: print " ora calcolo l'area di questo triangolo" break # esce dal ciclo while per fine input else: print "questi lati non appartengono ad un triangolo. Riprova " i =0 l=[] continue # continua nel ciclo while per ricominciare i nuovi input s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2])) print " l'area del triangolo e' =" ,s print "Fine programma " }}} ''Listato del programma Area``Triangolo2.py'' [[BR]][[BR]] Mostriamo anche un'alternativa che utilizza le classi e la gestione delle eccezioni modificando il programma precedente: {{{#!python #!/usr/bin/python # Importiamo la funzione sqrt (radice quadrata) dal modulo math from math import sqrt # Definiamo una classe Triangolo con tre metodi: # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo. class Triangolo: # Attributi della classe (le misure dei tre lati) a, b, c = 0, 0, 0 # Metodo costruttore def __init__(self,a,b,c): # Controlliamo se i tre valori dati possono effettivamente essere le misure dei lati di un triangolo. # Caso contrario solleviamo una bella eccezione! if ((a+b>c) and (a+c>b) and (b+c>a)): self.a=a self.b=b self.c=c else: raise Exception # Metodo che calcola il perimetro def perimetro(self): return self.a + self.b + self.c # Metodo che calcola l'area (tramite formula di Erone) def area(self): p=self.perimetro()/2.0 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c)) while True: # Chiediamo all'utente di immettere le misure dei lati print "\nInserire le misure dei lati:" lati=[] for lato in ['a','b','c']: while True: try : l=raw_input("\tMisura del lato "+lato+": ") lati.append(float(l)) break except ValueError: print "\nDevi inserire valori numerici. Riprova.\n" try : # Creiamo una nuova istanza della classe Triangolo. # In pratica facciamo una chiamata al suo metodo costruttore. # Sarebbe stato lo stesso scrivere "triangolo=Triangolo.__init__(a,b,c)" triangolo=Triangolo(lati[0],lati[1], lati[2]) # Utilizziamo i metodi definiti in precedenza per ottenere perimetro ed area dell'oggetto triangolo, # e stampiamo a video i risultati. print "" print "Perimetro = ", triangolo.perimetro() print "Area = ", triangolo.area() # Chiediamo all'utente se terminare il programma. exit=raw_input("\nUscire [digitare 's' per confermare]? ") print "" if exit=="s": break except: print "\nUn triangolo con queste misure non esiste. Riprova." }}} ''Listato del programma Area``Triangolo2.py con eccezioni'' [[BR]][[BR]] Ora supponiamo di dover calcolare l'area di un appezzamento di terreno di svariati ettari scomposto in un numero finito di triangoli.[[BR]] Una volta nota l'area, supponiamo che debba essere divisa, per volontà testamentaria, in tre parti in funzione dell'età di tre fratelli i cui nomi sono Angelo, Alberto, Amilcare o come volete voi. Useremo lo stesso programma [#areatriangolo2 AreaTriangolo2.py], con qualche modifica o aggiunta, che chiameremo `AreaTriangolo3.py`: {{{#!python #!/usr/bin/python import sys import math import string # fase di input nomi = [] eta= [] lati= [] x= 1 while x <=3: a= raw_input('Inserici nome '+str(x)+' fratello ') #verifichiamo l'input immesso errore = 'F' for i in range(len(a)): if a[i] in string.letters: continue else: if i <= len(a): print "errore nell'immettere il nome .riprova" errore = 'T' break if errore == "T": continue else: # lo rendiamo tutto maiuscolo indipendentemente se lo sia o meno nomi.append(string.upper(a)) print nomi x +=1 #ora prendiamo in input le loro eta x = 0 while x < range(len(nomi)): a= raw_input("inserisci l'eta di "+nomi[x]+' ') for j in range(len(a)) : errato = 'F' if a[j] in string.digits: errato = 'F' continue #continua il ciclo for else: errato = 'T' print "hai digitato qualcosa che non è un numero.Riprova" break # termina il ciclo for if errato =='T': continue #continua il ciclo while x +=1 eta.append(int(a)) if errato =='F'and x <3: continue # continua il ciclo while per passare al successivo input elif errato =='F' and x >=3: print ' Eta di' +nomi[0] +" "+ str( int(eta[0])) print ' Eta di' +nomi[1] +" "+ str( int(eta[1])) print ' Eta di' +nomi[2] +" "+ str( int(eta[2])) break #input dei dati per il calcolo dell'area dell'appezzamento i = 0 l=[] tria = [] while True: a= raw_input('inserisci il '+str(i+1)+' lato ') for j in range(len(a)) : errato = 'F' if a[j] in string.digits: errato = 'F' continue #continua il ciclo for else: errato = 'T' print "hai digitato qualcosa che non è un numero.Riprova" break # termina il ciclo for if errato =='T': continue #continua il ciclo while i +=1 l.append(float(a)) if errato =='F'and i <3: # questo controllo verifica se abbiamo termianto i dati in input relativi ad un triangolo continue # continua il ciclo while per passare al successivo input elif errato =='F' and i >=3: # qui avendo termianto l'input dei dati relativi ad un trinagolo li ripresenta a video per maggior chiarezza print ' primo lato = ',l[0] print ' secondo lato = ',l[1] print ' terzo lato = ',l[2] p = (l[0]+l[1]+l[2])/2.0 if p > l[0] and p>l[1] and p >l[2]: print " l'area di questo triangolo e' calcolabile" tria.append(l) l=[] si = raw_input(" hai finito di immettere lati dei triangoli ? conferma con S/s ") if si == "S" or si =='s': print "Inizia la fase di calcolo " break # esce dal ciclo while per fine input else: i =0 l=[] continue # continua nel ciclo while per input dati nuovo triangolo else: print "questi lati non appartengono ad un triangolo. Riprova " i =0 l=[] continue # continua nel ciclo while perche dati in input del triangolo errati #fase di calcolo area appezzamento n = len(tria) # il calcolo dell'area verrà ripetuto n volte una per ogni triangolo p = 0 stot = 0 for i,l in enumerate(tria): for j in range( len(l)): print l[j] p = p+l[j] print "semiper. nel "+str(i+1)+ " triangolo = "+ str(p/2.0) p=p/2.0 s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2])) print "area "+str(i+1)+ " triangolo = "+ str(s) stot = stot +s p=0 print "l'area totale dell'appezamento di terreno e di mq " + str(stot) print "ora calcoliamo quanto terreno spetta a ciascuno dei tre fratelli" seta = 0 for i in eta: seta=seta+i areau =(stot/seta) for i in eta: a =areau*i nomi.append(a) for i in range(0,3): print "l'area spettante a " +nomi[i] + " somma mq. "+ str(nomi[i+3]) print' Fine programma ' }}} ''Listato del programma Area``Triangolo3.py'' [[BR]][[BR]] Questo programma cosi come è realizzato è un po troppo lungo e considerati i numerosi cicli in esso contenuto può farci incorrere in errori. Come possiamo renderlo piu snello e piu facilemnte governabile? = Risorse = * [http://www.python.it/] {it} [[BR]] Il sito di riferimento per i programmatori python italiani! Qui potete trovare le traduzioni in italiano della documentazione ufficiale nonchè le FAQ sul linguaggio. * [http://www.python.org/] {en} [[BR]] Il sito ufficiale del linguaggio python. Trovate la documentazione in inglese aggiornata all'ultima versione dell'interprete, in più tutte le novità e le iniziative che ruotano intorno a questo linguaggio. |
Linea 96: | Linea 401: |
CategoryComunita | CategoryNuoviDocumenti |
IndiceBRTableOfContents |
Introduzione
Python è un linguaggio di programmazione ideato da Guido Von Rossum nel 1991 e derivato da un precedente linguaggio chiamato ABC. È interpretato e quindi caratterizzato da una grande portabilità su differenti piattaforme (Linux, Windows, Mac, ...).BR Python è estensibile tramite il linguaggio C. Può inoltre appoggiarsi a molte famose librerie scritte in C o C++ per la creazione di GUI (wxpython, pygtk...), tool per lo svilippo di giochi (pygame, pysdl...), database (mysqldb, ...).BR È un linguaggio ad alto livello, ha una sintassi molto piacevole e intuitiva (ideale per chi si avvicina alla programmazione). I programmi scritti in python risultano spesso molto sintetici ed eleganti nella forma (ma ricordiamo che tutto dipende anche dallo stile personale del programmatore! ).BR È nativamente un linguaggio orientato agli oggetti ma a differenza di altri linguaggi come il java permette anche uno stile procedurale e/o funzionale.BR Ideale per realizzare applicazioni velocemnete, è utilizzato per una vasta gamma di scopi: scripting, creazione di programmi completi, estensioni di programmi scritti in C, realizzazione di prototipi di applicazioni che andranno poi riscritte in altri linguaggi.
Installazione
Con l'installazione predefinita di Ubuntu l'interprete python viene già installato. In caso contrario, è sufficiente installare il pacchetto python da utilizzando [:SynapticHowto:Synaptic] o da riga di comando:
sudo apt-get install python
Verifica della configurazione
Bene ora non resta che lanciare l'interprete interattivo e fare pratica.
Aprire un terminale e digitare:
python
Dovrebbe apparire qualcosa del tipo:
Python 2.4.3 (#2, Apr 27 2006, 14:43:58) [GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
Semplici comandi
Una volta avviato l'interprete, impariamo a usarlo:
>>> print "Hello World!" Hello World! >>> print 2+3 5 >>> print "2 + 3 = ", 2+3 2 + 3 = 5
Usciamo dall'interprete premendo «Ctrl+D», oppure digitando:
>>> import sys >>> sys.exit()
Proviamo ora a realizzare un piccolo script.
Apriamo un editor di testo qualsiasi e inseriamo le seguenti righe:
Salviamo il file come hello.py e impostiamone i permessi di esecuzione:
chmod a+x hello.py
Ora eseguiamo lo script:
python hello.py
Se non è sbagliato qualcosa, si dovrebbero vedere le parole "Hello World!" stampate a video.
Esempi
Ora che vi abbiamo un po' incuriosito vi proponiamo in questa sezione diversi script esemplificativi a difficoltà crescente.
Immagine(Icone/Piccole/note.png,,left) Tutto ciò che viene scritto preceduto dal carattere # è considerato dall'interprete come un commento.BRBR BR Anchor(areatriangolo1)
1 #!/usr/bin/python#
2 import sys
3 import string
4 import math
5 ''' questa è un'area di commento che uso per indicare cosa fa il programa o sorgente o script
6 il programma principale o il main calcola l'area di un triangolo qualsiasi noti i suoi tre
7 lati usando la formula di Erone
8 formula sqrt p*(p-a)*(p-b)*p(-c) sqrt = radice quadrata, p = (a+b+c)/2 a,b,c lati
9 salvatelo sul disco con il nome che vi propongo AreaTriangolo.py o come più vi piace
10 '''
11 a = input('inserisci il primo lato ')
12 print ' primo lato = ',a
13 b = input('inserisci il secondo lato ')
14 print ' secondo lato = ',b
15 c = input('inserisci il terzo lato ')
16 print ' terzo lato = ',c
17 print
18 print " ora calcolo l'area di questo triangolo"
19 print
20 p = (a+b+c)/2
21 s = math.sqrt(p*(p-a)*(p-b)*(p-c))
22
23 print " l'area del triangolo e' =" ,s
Listato del programma AreaTriangolo.pyBRBR
Il programma precedente termina se durante l'inserimento dei dati, per errore, viene digitato un carattere non numerico. È necessario quindi inserire un controllo sul dato immesso. A questo scopo è stato preparato questo altro programmino che slaviamo nel file AreaTriangolo2.py: Anchor(areatriangolo2)
1 #!/usr/bin/python
2 import sys
3 import math
4 import string
5 i = 0
6 l=[]
7 while True:
8 a= raw_input('inserisci il '+str(i+1)+' lato ')
9 for j in range(len(a)) :
10 errato = 'F'
11 if a[j] in string.digits:
12 errato = 'F'
13 continue #continua il ciclo for
14 else:
15 errato = 'T'
16 print "hai digitato qualcosa che non è un numero.Riprova"
17 break # termina il ciclo for
18 if errato =='T':
19 continue #continua il ciclo while
20
21 i +=1
22 l.append(float(a)) # completata la verifica che il dato inserito e' una cifra viene trasformata in un numero a virgola mobile e inserita in un array
23 if errato =='F'and i <3:
24 # questo controllo ci serve per riprendere l'inserimento dei dati dopo aver completato il controlo
25 # sul dato precedente
26 continue # continua il ciclo while per passare al successivo input
27 elif errato =='F' and i >=3:
28
29 print ' primo lato = ',l[0]
30 print
31 print ' secondo lato = ',l[1]
32 print
33 print ' terzo lato = ',l[2]
34 print
35 p = (l[0]+l[1]+l[2])/2.0 # calcola il semi perimetro
36 if p > l[0] and p>l[1] and p >l[2]:
37 print " ora calcolo l'area di questo triangolo"
38 break # esce dal ciclo while per fine input
39 else:
40 print "questi lati non appartengono ad un triangolo. Riprova "
41 i =0
42 l=[]
43 continue # continua nel ciclo while per ricominciare i nuovi input
44
45
46
47
48
49 print
50
51 s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2]))
52
53 print " l'area del triangolo e' =" ,s
54 print
55 print "Fine programma "
Listato del programma AreaTriangolo2.pyBRBR
Mostriamo anche un'alternativa che utilizza le classi e la gestione delle eccezioni modificando il programma precedente:
1 #!/usr/bin/python
2
3 # Importiamo la funzione sqrt (radice quadrata) dal modulo math
4 from math import sqrt
5
6 # Definiamo una classe Triangolo con tre metodi:
7 # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo.
8 class Triangolo:
9
10 # Attributi della classe (le misure dei tre lati)
11 a, b, c = 0, 0, 0
12
13 # Metodo costruttore
14 def __init__(self,a,b,c):
15 # Controlliamo se i tre valori dati possono effettivamente essere le misure dei lati di un triangolo.
16 # Caso contrario solleviamo una bella eccezione!
17 if ((a+b>c) and (a+c>b) and (b+c>a)):
18 self.a=a
19 self.b=b
20 self.c=c
21 else: raise Exception
22
23 # Metodo che calcola il perimetro
24 def perimetro(self):
25 return self.a + self.b + self.c
26
27 # Metodo che calcola l'area (tramite formula di Erone)
28 def area(self):
29 p=self.perimetro()/2.0
30 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
31
32
33
34 while True:
35 # Chiediamo all'utente di immettere le misure dei lati
36 print "\nInserire le misure dei lati:"
37 lati=[]
38 for lato in ['a','b','c']:
39 while True:
40 try :
41 l=raw_input("\tMisura del lato "+lato+": ")
42 lati.append(float(l))
43 break
44 except ValueError:
45 print "\nDevi inserire valori numerici. Riprova.\n"
46
47 try :
48 # Creiamo una nuova istanza della classe Triangolo.
49 # In pratica facciamo una chiamata al suo metodo costruttore.
50 # Sarebbe stato lo stesso scrivere "triangolo=Triangolo.__init__(a,b,c)"
51 triangolo=Triangolo(lati[0],lati[1], lati[2])
52
53 # Utilizziamo i metodi definiti in precedenza per ottenere perimetro ed area dell'oggetto triangolo,
54 # e stampiamo a video i risultati.
55 print ""
56 print "Perimetro = ", triangolo.perimetro()
57 print "Area = ", triangolo.area()
58
59 # Chiediamo all'utente se terminare il programma.
60 exit=raw_input("\nUscire [digitare 's' per confermare]? ")
61 print ""
62 if exit=="s": break
63
64 except:
65 print "\nUn triangolo con queste misure non esiste. Riprova."
Listato del programma AreaTriangolo2.py con eccezioniBRBR
Ora supponiamo di dover calcolare l'area di un appezzamento di terreno di svariati ettari scomposto in un numero finito di triangoli.BR Una volta nota l'area, supponiamo che debba essere divisa, per volontà testamentaria, in tre parti in funzione dell'età di tre fratelli i cui nomi sono Angelo, Alberto, Amilcare o come volete voi.
Useremo lo stesso programma [#areatriangolo2 AreaTriangolo2.py], con qualche modifica o aggiunta, che chiameremo AreaTriangolo3.py:
1 #!/usr/bin/python
2 import sys
3 import math
4 import string
5 # fase di input
6 nomi = []
7 eta= []
8 lati= []
9 x= 1
10 while x <=3:
11 a= raw_input('Inserici nome '+str(x)+' fratello ')
12 #verifichiamo l'input immesso
13 errore = 'F'
14 for i in range(len(a)):
15 if a[i] in string.letters:
16 continue
17 else:
18 if i <= len(a):
19 print "errore nell'immettere il nome .riprova"
20 errore = 'T'
21 break
22 if errore == "T":
23 continue
24 else:
25 # lo rendiamo tutto maiuscolo indipendentemente se lo sia o meno
26 nomi.append(string.upper(a))
27 print nomi
28 x +=1
29
30 #ora prendiamo in input le loro eta
31 x = 0
32
33 while x < range(len(nomi)):
34
35 a= raw_input("inserisci l'eta di "+nomi[x]+' ')
36 for j in range(len(a)) :
37 errato = 'F'
38 if a[j] in string.digits:
39 errato = 'F'
40 continue #continua il ciclo for
41 else:
42 errato = 'T'
43 print "hai digitato qualcosa che non è un numero.Riprova"
44 break # termina il ciclo for
45 if errato =='T':
46 continue #continua il ciclo while
47
48 x +=1
49 eta.append(int(a))
50 if errato =='F'and x <3:
51
52 continue # continua il ciclo while per passare al successivo input
53 elif errato =='F' and x >=3:
54 print ' Eta di' +nomi[0] +" "+ str( int(eta[0]))
55 print
56 print ' Eta di' +nomi[1] +" "+ str( int(eta[1]))
57 print
58 print ' Eta di' +nomi[2] +" "+ str( int(eta[2]))
59 print
60 break
61 #input dei dati per il calcolo dell'area dell'appezzamento
62
63 i = 0
64 l=[]
65 tria = []
66 while True:
67 a= raw_input('inserisci il '+str(i+1)+' lato ')
68 for j in range(len(a)) :
69 errato = 'F'
70 if a[j] in string.digits:
71 errato = 'F'
72 continue #continua il ciclo for
73 else:
74 errato = 'T'
75 print "hai digitato qualcosa che non è un numero.Riprova"
76 break # termina il ciclo for
77 if errato =='T':
78 continue #continua il ciclo while
79
80 i +=1
81 l.append(float(a))
82 if errato =='F'and i <3:
83 # questo controllo verifica se abbiamo termianto i dati in input relativi ad un triangolo
84 continue # continua il ciclo while per passare al successivo input
85 elif errato =='F' and i >=3:
86 # qui avendo termianto l'input dei dati relativi ad un trinagolo li ripresenta a video per maggior chiarezza
87 print ' primo lato = ',l[0]
88 print
89 print ' secondo lato = ',l[1]
90 print
91 print ' terzo lato = ',l[2]
92 print
93 p = (l[0]+l[1]+l[2])/2.0
94 if p > l[0] and p>l[1] and p >l[2]:
95 print " l'area di questo triangolo e' calcolabile"
96 tria.append(l)
97 l=[]
98 si = raw_input(" hai finito di immettere lati dei triangoli ? conferma con S/s ")
99 if si == "S" or si =='s':
100 print "Inizia la fase di calcolo "
101 break # esce dal ciclo while per fine input
102 else:
103 i =0
104 l=[]
105 continue # continua nel ciclo while per input dati nuovo triangolo
106 else:
107 print "questi lati non appartengono ad un triangolo. Riprova "
108 i =0
109 l=[]
110 continue # continua nel ciclo while perche dati in input del triangolo errati
111
112
113 #fase di calcolo area appezzamento
114 n = len(tria) # il calcolo dell'area verrà ripetuto n volte una per ogni triangolo
115
116 p = 0
117 stot = 0
118 for i,l in enumerate(tria):
119 for j in range( len(l)):
120 print l[j]
121 p = p+l[j]
122 print "semiper. nel "+str(i+1)+ " triangolo = "+ str(p/2.0)
123 print
124 p=p/2.0
125 s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2]))
126 print "area "+str(i+1)+ " triangolo = "+ str(s)
127 print
128 stot = stot +s
129 p=0
130 print
131 print "l'area totale dell'appezamento di terreno e di mq " + str(stot)
132 print
133 print "ora calcoliamo quanto terreno spetta a ciascuno dei tre fratelli"
134
135 seta = 0
136 for i in eta:
137 seta=seta+i
138
139
140 areau =(stot/seta)
141
142 for i in eta:
143 a =areau*i
144 nomi.append(a)
145 for i in range(0,3):
146 print "l'area spettante a " +nomi[i] + " somma mq. "+ str(nomi[i+3])
147 print
148
149 print' Fine programma '
Listato del programma AreaTriangolo3.pyBRBR
Questo programma cosi come è realizzato è un po troppo lungo e considerati i numerosi cicli in esso contenuto può farci incorrere in errori. Come possiamo renderlo piu snello e piu facilemnte governabile?
Risorse
[http://www.python.it/] {it} BR Il sito di riferimento per i programmatori python italiani! Qui potete trovare le traduzioni in italiano della documentazione ufficiale nonchè le FAQ sul linguaggio.
[http://www.python.org/] {en} BR Il sito ufficiale del linguaggio python. Trovate la documentazione in inglese aggiornata all'ultima versione dell'interprete, in più tutte le novità e le iniziative che ruotano intorno a questo linguaggio.