#format wiki #LANGUAGE it <
> <> <> <> = Introduzione = In questa pagina vengono mostrati alcuni programmi scritti in Python a difficoltà crescente. Non è per niente una guida alle funzionalità del linguaggio. Se si desidera approfondire le proprie conoscenze, consultare la sezione [[#Ulteriori_risorse|Ulteriori Risorse]]. Questi listati sono scritti per l'interprete Python 3.x; per la guida nella vecchia e deprecata versione Python 2.7 consultare la [[Programmazione/Python/Listati|relativa guida]]. = Listato 1 = Esempio di script minimale: calcola l'area di un triangolo richiedendo all'utente di immettere la misura dei lati. {{{#!python #!/usr/bin/python3 """ Questa è un'area di commento usata per indicare cosa fa il programma e come. Calcola l'area di un triangolo qualsiasi, noti i suoi tre lati. Usa la formula di Erone: sqrt p*(p-a)*(p-b)*(p-c) dove: sqrt = radice quadrata; p = (a+b+c)/2; a,b,c lati """ # tutto ciò che viene preceduto dal carattere # è # considerato dall'interprete come un commento import math # importa il modulo math; anche questo è un commento a = int(input('inserisci il primo lato ')) print('primo lato = ', a) b = int(input('inserisci il secondo lato ')) print('secondo lato = ', b) c = int(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 è " , s) }}} ''Listato del programma Area``Triangolo.py'' = Listato 2 = Il programma precedente si interrompe se durante l'inserimento dei dati, per errore, viene digitato un carattere non numerico. Per questo il seguente script, che salviamo col nome `AreaTriangolo2.py`, inserisce un controllo sul dato immesso. {{{#!python #!/usr/bin/python3 import math i = 0 l = [] print("\nInserire le misure dei lati:") while True: a = input(f'\tMisura del {i+1}° lato: ') if not a.isdigit(): print("non hai digitato un numero valido. Riprova") continue # ricomincia il ciclo while e ripete la richiesta dello stesso lato # una volta verificato che il dato immesso è una cifra, lo # converte in numero a virgola mobile e lo inserisce in un array l.append(float(a)) i += 1 if i < 3: continue # ricomincia il ciclo while per passare al successivo lato else: print() print('primo lato = ', l[0]) print('secondo lato = ', l[1]) print('terzo lato = ', l[2]) p = (l[0]+l[1]+l[2]) / 2 # calcola il semiperimetro if p > l[0] and p > l[1] and p > l[2]: 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 # ricomincia il ciclo while per acquisire di nuovo tutti i lati s = math.sqrt(p * (p-l[0]) * (p-l[1]) * (p-l[2])) print("l'area di questo triangolo è " , s) print() print("Fine programma ") }}} ''Listato del programma Area``Triangolo2.py'' = Listato 3 = Questa è un'alternativa più efficiente della versione precedente `AreaTriangolo2.py`: utilizza le classi e la gestione delle eccezioni per eliminare ogni possibilità di errore di immissione senza costringere a immettere solo numeri interi. {{{#!python #!/usr/bin/python3 from math import sqrt# Importa la funzione sqrt (radice quadrata) dal modulo math class TriangoloInesistente(Exception): """Classe per sollevare un'eccezione se vengono immesse misure incompatibili.""" def __init__(self, message="\nUn triangolo con queste misure non esiste. Riprova."): self.message = message class Triangolo: """Classe per costruire gli oggetti triangolo da calcolare Oltre al costruttore, la classe ha due metodi: un metodo che calcola il perimetro e uno che calcola l'area. Attributi della classe sono le misure dei tre lati a, b, c """ def __init__(self, a, b, c): """Metodo costruttore. In Python i costruttori hanno il nome speciale __init__ Controlla se i tre valori immessi sono accettabili, cioè se sono validi come misure dei lati di un triangolo. In caso contrario solleva una eccezione TriangoloInesistente. """ if a + b > c and a + c > b and b + c > a: self.a = a self.b = b self.c = c else: # quando il tipo dei dati è corretto (numeri in virgola mobile) # ma i valori sono incompatibili. raise TriangoloInesistente def perimetro(self): "Metodo che calcola il perimetro" return self.a + self.b + self.c def area(self): "Metodo che calcola l'area (tramite formula di Erone)" p = self.perimetro() / 2.0 return sqrt(p * (p - self.a) * (p - self.b) * (p - self.c)) while True: # Chiede all'utente di immettere le misure dei lati print("\nInserire le misure dei lati:") lati=[] for lato in 'abc': while True: l = input(f"\tMisura del lato {lato}: ") try : l = float(l) # se viene inserito un valore che non si può trasformare in un numero, # ad esempio una lettera, si solleva l'eccezione ValueError except ValueError: print("\nDevi inserire valori numerici. Riprova.\n") # se invece non è stata sollevata nessuna eccezione # possiamo salvare il valore del lato else: lati.append(l) break try: # Crea 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 potrebbe sollevarsi nella classe Triangolo except TriangoloInesistente as err: #"err" è l'oggetto creato da Python durante il verificarsi dell'errore print(err.message) continue # Utilizza i metodi definiti nella classe per ottenere perimetro ed area # dell'oggetto triangolo e stampa a video i risultati. print() print("Perimetro = ", triangolo.perimetro()) print("Area = ", triangolo.area()) # Chiede all'utente se intende terminare il programma. exit = input("\nUscire [digitare 's' per confermare]? ") print("") if exit == "s": break }}} ''Listato del programma !AreaTriangolo2ConEccezioni.py'' = Listato 4 = Ora supponiamo di dover calcolare l'area di un appezzamento di terreno 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.<
> Useremo come base lo script [[#areatriangolo2|AreaTriangolo2.py]], con qualche modifica o aggiunta; lo salveremo come `AreaTriangolo3.py`. {{{#!python #!/usr/bin/python3 from math import sqrt ### fase di input nomi = [] fratelli =[] lati= [] x = 1 while x <= 3: a = input(f' Inserici il nome del {x}° fratello: ') if not a.isalpha(): print(" Errore nell'immettere il nome. Riprova") continue # ricomincia il ciclo while per reinserire il nome che era errato nomi.append(a.title()) # salva nella lista nomi il nome (con iniziale maiuscola) x += 1 for nome in nomi: a = "" while not a.isdigit(): a = input(f" Inserisci l'età di {nome}: ") if not a.isdigit(): print(" Non hai digitato un numero valido. Riprova") fratelli.append((nome, int(a))) for n, e in fratelli: print(f' Età di {n}: {e}', end=" ") print('\n') #input dei dati per il calcolo dell'area dell'appezzamento tria = [] n_tri = 0 si = '' while si != "S": n_tri += 1 lati = [] p = 0 for i in range(1, 4): while True: try: a = input(f' Inserisci il {i}° lato del {n_tri}° triangolo: ') lati.append(float(a)) except ValueError: print(" Non hai digitato un numero valido. Riprova") continue #continua il ciclo while costringendo a reimmettere il dato break # terminato l'input dei dati del triangolo # li ripresenta a video per maggior chiarezza for i, lato in enumerate(lati): print(f' {i + 1}° lato = {lato}', end=" ") p += lato / 2 if not p > lati[0] and p > lati[1] and p > lati[2]: print("\n Questi dati non rappresentano i lati di un triangolo. Riprova") continue # ricomincia il ciclo while perché i dati immessi erano errati tria.append(lati) print('\n') si = input(" hai finito di immettere i triangoli? conferma con S/s ").upper() ### fase di calcolo area appezzamento # il calcolo dell'area verrà ripetuto una volta per triangolo stot = 0 for i, lati in enumerate(tria): p = 0 print(f"\n {i + 1}° triangolo\n Lati:", end=' ') for lato in lati: print(lato, end=' ') p += lato / 2.0 print() s = sqrt(p * (p-lati[0]) * (p-lati[1]) * (p-lati[2])) print(f" Area = {s}") stot += s print(f"\n L'area totale dell'appezzamento di terreno è di mq {stot:<15.2f}") print(" quanto terreno spetta a ciascuno dei tre fratelli in base all'età:") seta = sum([eta for n, eta in fratelli]) # somma delle età dei fratelli areau = stot / seta # rapporto tra area totale e somma delle età for fratello in fratelli: nome, eta = fratello area = areau * eta print(f"\n l'area spettante a {nome} somma {area:<10.2f}") print() print(' Fine programma ') }}} ''Listato del programma !AreaTriangolo3.py'' <
><
> = Ulteriori risorse = * [[https://wiki.python.org/moin/BeginnersGuide|Guida ufficiale per principianti (Inglese)]] * [[https://www.python.it/doc/newbie/|Python per i principianti]] * [[https://www.html.it/guide/guida-python/|Una guida per Python]] * È possibile anche scrivere applicazioni dotate di interfaccia grafica, per informazioni consultare la [[Programmazione/Python/InterfacceGrafichePython3|relativa guida]]. ---- ##CategoryProgrammazione CategoryHomepage