## page was renamed from LinguaggioPython/Listati #format wiki #LANGUAGE it <
> <> <> = Introduzione = In questa pagina vengono mostrati alcuni programmi scritti in '''Python''' a difficoltà crescente. Non è una guida esauriente a tutte le funzionalità del linguaggio. Se si desidera approfondire le proprie conoscenze, consultare la sezione [[#risorse|Risorse]]. Alcune note: * tutto ciò che viene scritto preceduto dal carattere # è considerato dall'interprete come un commento. * questi listati sono scritti per l'interprete '''Python 2.7.xx''' per la guida nella più recente versione '''Python 3.x''', vedi [[Programmazione/Python/ListatiPython3 | ListatiPython3]] = Listato 1 = <
> <> {{{#!python #!/usr/bin/python import sys import string import math ''' questa è un'area di commento che uso per indicare cosa fa il programma 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 print " ora calcolo l'area di questo triangolo" print 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 !AreaTriangolo.py'' <
> = Listato 2 = <
> 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 salviamo col nome `AreaTriangolo2.py`: <> {{{#!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 sia una cifra, viene trasformato # in un numero a virgola mobile e inserito in un array if errato =='F'and i <3: # questo controllo ci serve per riprendere l'inserimento dei dati dopo aver completato il controllo # 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 print ' secondo lato = ',l[1] print print ' terzo lato = ',l[2] print 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 dati non possono rappresentare i lati di un triangolo. Riprova " i =0 l=[] continue # continua nel ciclo while per ricominciare i nuovi input print s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2])) print " l'area del triangolo e' =" ,s print print "Fine programma " }}} ''Listato del programma !AreaTriangolo2.py'' <
> == Listato 2 con eccezioni == <
> Mostriamo anche un'alternativa che utilizza le classi e la gestione delle eccezioni modificando il programma precedente `AreaTriangolo2.py`: {{{#!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: # stabiliamo che l'errore e' di tipo ValueError, cioe' il tipo di dato e' corretto(numeri in # virgola mobile) ma i valori sono sballati.ValueError è un errore definito da Python, ma # volendo potremmo crearci un errore personalizzato, ad esempio TriangoloInesistente raise ValueError, "\nUn triangolo con queste misure non esiste. Riprova." # 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: l=raw_input("\tMisura del lato "+lato+": ") try : l = float(l) # se l'utente inserisce un valore che non puo' essere trasformato in un numero, # ad esempio una lettera, python sollevera' l'eccezione ValueError, e noi # prontamente la gestiamo except ValueError: print "\nDevi inserire valori numerici. Riprova.\n" #se invece non e' stata sollevata nessuna eccezione, possiamo salvare il #valore del lato else: lati.append(l) break 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]) #qua gestiamo l'eccezione che noi stessi potremmo aver sollevato nella classe Triangolo except ValueError, e: #"e" e' l'oggetto creato da python durante il verificarsi dell'errore print e.message continue # 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 intende terminare il programma. exit=raw_input("\nUscire [digitare 's' per confermare]? ") print "" if exit=="s": break }}} ''Listato del programma !AreaTriangolo2.py con eccezioni'' <
> = Listato 3 = <
> Ora supponiamo di dover calcolare l'area di un appezzamento di terreno di svariati ettari scomposto in un numero finito di triangoli.<
> 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 # continua il ciclo for else: if i <= len(a): print "errore nell'immettere il nome .riprova" errore = 'T' break # esce dal ciclo for if errore == "T": continue # continua il ciclo while costringendo a reinserire il dato immesso prima in maniera errata else: # lo rendiamo tutto maiuscolo indipendentemente se lo sia o meno nomi.append(string.upper(a)) print nomi x +=1 # questo incremento ci serve per poter distinguere nella immissione a quale persona assegnare il nome #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 print ' Eta di' +nomi[1] +" "+ str( int(eta[1])) print print ' Eta di' +nomi[2] +" "+ str( int(eta[2])) print 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 terminato 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 print ' secondo lato = ',l[1] print print ' terzo lato = ',l[2] print 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 i 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 dati non rappresentano i lati di un triangolo. Riprova " i =0 l=[] continue # continua nel ciclo while perche i dati in input del triangolo erano 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) print 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) print stot = stot +s p=0 print print "l'area totale dell'appezamento di terreno e di mq " + str(stot) print 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 print' Fine programma ' }}} ''Listato del programma !AreaTriangolo3.py'' <
><
> <> = Ulteriori risorse = * È possibile anche utilizzare delle interfacce grafiche, per informazioni consultare la [[Programmazione/Python/InterfacceGrafiche|relativa guida]]. ---- CategoryProgrammazione