#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