|
Dimensione: 10658
Commento:
|
Dimensione: 13676
Commento:
|
| Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
| Linea 98: | Linea 98: |
| ---- CategoryComunita Ora che vi abbiamo un po incuriosito vi proponiamo un'altro script a difficoltà crescente # tutto cio che scrivo preceduto dal segno # viene considerato un commento # questo è un commento |
== Esempi == Ora che vi abbiamo un po incuriosito vi proponiamo in questa sezione diversi script esemplificativi a difficoltà crescente. # tutto cio che scrivo preceduto dal segno # viene considerato un commento [[BR]] # questo è un commento [[BR]] |
| Linea 133: | Linea 132: |
| Questo semplice programma abortisce se nell'inserire il dato per errore digitiamo un carattere non numerico. E' necessario quindi ricorrrere al controllo del dato immesso. A questo scopo è stato preparato questo altro programmino che Chiamiamo Area_Triangolo2.py | Questo semplice programma abortisce se nell'inserire il dato per errore digitiamo un carattere non numerico. E' necessario quindi ricorrrere al controllo del dato immesso. A questo scopo è stato preparato questo altro programmino che chiamiamo Area_Triangolo2.py |
| Linea 156: | Linea 155: |
| l.append(float(a)) | 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 |
| Linea 158: | Linea 157: |
| # questo controllo ci serve per riprendere l'inserimento dei dati dopo aver completato il controlo # sul dato precedente |
|
| Linea 161: | Linea 161: |
| Linea 167: | Linea 168: |
| p = (l[0]+l[1]+l[2])/2.0 | p = (l[0]+l[1]+l[2])/2.0 # calcola il semi perimetro |
| Linea 175: | Linea 176: |
| continue # contonua nel ciclo while per ricominciare i nuovi input | continue # continua nel ciclo while per ricominciare i nuovi input |
| Linea 191: | Linea 192: |
| Mostriamo anche un'alternativa che utilizza le classi e la gestione delle eccezioni. {{{ #!/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." }}} [[BR]] |
|
| Linea 193: | Linea 266: |
| noi abbiamo scomposto in un numero finito di triangoli; una volta nota l'area supponiamo che debba essere divisa, per volontà testamentarie, in tre parti |
noi abbiamo scomposto in un numero finito di triangoli;[[BR]] una volta nota l'area supponiamo che debba essere divisa, per volontà testamentaria, in tre parti |
| Linea 199: | Linea 272: |
| Linea 282: | Linea 357: |
| # questo controllo verifica se abbiamo termianto i dati in input relativi ad un triangolo | |
| Linea 285: | Linea 360: |
| # qui avendo termianto l'input dei dati relativi ad un trinagolo li ripresenta a video per maggior chiarezza | |
| Linea 355: | Linea 431: |
---- CategoryComunita |
Python è un linguaggio di programmazione molto versatile e di alto livello. Utilizzato sia per lo scripting che per la realizzazione di programmi completi. E' interpretato, orientato agli oggetti ed estensibile tramite il linguaggio C.
Introduzione
Python è un linguaggio di programmazione ideato da Guido Von Rossum nel 1991 e derivato da un precedente linguaggio chiamato ABC. E' 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++: gui (wxpython, pygtk...), tool per lo svilippo di giochi (pygame,pysdl...), databases (mysqldb...) ...BR E' un linguaggio di alto 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 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
Risorse
In lingua italiana:
Python.itBR 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.orgBR 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
Verifica della configurazione
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:
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. >>>
Adesso proviamo qualche semplice comando:
>>> 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 a realizzare un piccolo script! Aprite un editor di testo qualsiasi e scrivete:
print "Hello World!"
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.
Esempi
Ora che vi abbiamo un po incuriosito vi proponiamo in questa sezione diversi script esemplificativi a difficoltà crescente.
# tutto cio che scrivo preceduto dal segno # viene considerato un commento BR # questo è un commento BR
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 usiamo 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 Area_triangolo.py o come piu' 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' =" ,sBR Questo semplice programma abortisce se nell'inserire il dato per errore digitiamo un carattere non numerico. E' necessario quindi ricorrrere al controllo del dato immesso. A questo scopo è stato preparato questo altro programmino che chiamiamo Area_Triangolo2.py
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
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 lati non appartengono ad 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 ""BR Mostriamo anche un'alternativa che utilizza le classi e la gestione delle eccezioni.
# 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." Ora supponiamo di dover calcolare l'area di un appezzamento di terreno di svariati ettari e che noi abbiamo 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 com volete voi. BR Useremo lo stesso programma Area_Triangolo 2 con qualche modifica o aggiunta e che chiameremo Area_Triangolo3:py
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
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 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
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 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)
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 '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?BR Si Lascia al lettore questo compito facendo presente che ci sono diverse soluzioni che attendiamo come segno tangibile della attenzione che ci avete prestato.
