## 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