Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

Versione 6 del 08/01/2023 22.23.35

Nascondi questo messaggio


Attenzione! Questa è una Pagina di prova. Le informazioni riportate potrebbero essere incomplete, errate e potenzialmente pericolose. Per contribuire alla realizzazione di questa pagina consultare la discussione di riferimento.

Guida verificata con Ubuntu: 20.04 22.04

Problemi in questa pagina? Segnalali in questa discussione

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.

Alcune note:

  • su ogni riga, tutto ciò che viene preceduto dal carattere # è considerato dall'interprete come un commento.

Listato 1

   1 #!/usr/bin/python3
   2 
   3 """ Questa è un'area di commento usata per indicare cosa fa il programma e come.
   4 
   5     Calcola l'area di un triangolo qualsiasi, noti i suoi tre lati.
   6     Usa la formula di Erone: sqrt p*(p-a)*(p-b)*(p-c)  
   7     dove:  sqrt = radice quadrata; p = (a+b+c)/2;  a,b,c lati
   8     Salvatelo sul disco come AreaTriangolo.py o con il nome preferito
   9 """
  10 import math
  11 a = int(input('inserisci il primo lato  '))
  12 print('primo lato = ', a)
  13 b = int(input('inserisci il secondo lato  '))
  14 print('secondo lato = ', b)
  15 c = int(input('inserisci il terzo lato  '))
  16 print('terzo lato = ', c)
  17 print();
  18 print(" ora calcolo l'area di questo triangolo")
  19 print()
  20 p = (a+b+c) / 2
  21 s = math.sqrt(p * (p-a) * (p-b) * (p-c))
  22 
  23 print("l'area  del triangolo è " , 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:

   1 #!/usr/bin/python3
   2 
   3 import math
   4 i = 0
   5 l=[]
   6 print("\nInserire le misure dei lati:")
   7 while True:
   8     a = input(f'\tMisura del {i+1}° lato:  ')
   9     if not a.isdigit():
  10         print("non hai digitato un numero valido. Riprova")
  11         continue  # ricomincia il ciclo while e ripete la richiesta dello stesso lato
  12     # una volta verificato che il dato immesso è una cifra, lo
  13     # converte in numero a virgola mobile e lo inserisce in un array 
  14     l.append(float(a))
  15     i += 1  
  16     if i < 3:
  17         continue # ricomincia il ciclo while per passare al successivo lato
  18     else:
  19         print()
  20         print('primo lato   = ', l[0])
  21         print('secondo lato = ', l[1])
  22         print('terzo lato   = ', l[2])
  23         p = (l[0] + l[1] + l[2]) / 2 # calcola il semiperimetro
  24         if  p > l[0]  and  p > l[1] and p > l[2]:
  25             break  # esce dal ciclo while per fine input
  26         else:
  27             print("questi dati non possono rappresentare i lati di un triangolo. Riprova:")
  28             i = 0
  29             l = []
  30             continue # ricomincia il ciclo while per acquisire di nuovo tutti i lati
  31 
  32 s = math.sqrt(p * (p-l[0]) * (p-l[1]) * (p-l[2]))
  33 print("l'area di questo triangolo è " , s)
  34 print()
  35 print("Fine programma ")

Listato del programma AreaTriangolo2.py

Listato 2 con eccezioni

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:

   1 #!/usr/bin/python3
   2 
   3 # Importa la funzione sqrt (radice quadrata) dal modulo math
   4 from math import sqrt
   5 
   6 
   7 class TriangoloInesistente(Exception):
   8     """Classe per sollevare un'eccezione se vengono immesse misure incompatibili."""
   9     
  10     def __init__(self, message="\nUn triangolo con queste misure non esiste. Riprova."):
  11         self.message = message
  12 
  13 
  14 class Triangolo:
  15     """Classe per costruire gli oggetti triangolo da calcolare
  16     
  17     Oltre al costruttore, la classe ha due metodi:
  18     un metodo che calcola il perimetro e uno che calcola l'area.
  19     Attributi della classe sono le misure dei tre lati a, b, c
  20     """
  21 
  22     a, b, c = 0, 0, 0
  23 
  24     def __init__(self, a, b, c):
  25         """Metodo costruttore. In Python i costruttori hanno il nome speciale __init__
  26         
  27         Controlla se i tre valori immessi sono accettabili,
  28         cioè se sono validi come misure dei lati di un triangolo.
  29         In caso contrario solleva una eccezione TriangoloInesistente.
  30         """
  31         
  32         if a + b > c and a + c > b and b + c > a:
  33             self.a = a
  34             self.b = b
  35             self.c = c
  36         else:
  37             # quando il tipo dei dati è corretto (numeri in virgola mobile) 
  38             # ma i valori sono incompatibili.
  39             raise TriangoloInesistente
  40     def perimetro(self):
  41         "Metodo che calcola il perimetro"
  42         return self.a + self.b + self.c
  43 
  44     def area(self):
  45         "Metodo che calcola l'area (tramite formula di Erone)"
  46         p = self.perimetro() / 2.0
  47         return sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
  48 
  49 
  50 while True:
  51     # Chiede all'utente di immettere le misure dei lati
  52     print("\nInserire le misure dei lati:")
  53     lati=[]
  54     for lato in 'abc':
  55         while True:
  56             l = input(f"\tMisura del lato {lato}: ")
  57             try :
  58                 l = float(l)
  59             # se viene inserito un valore che non si può trasformare in un numero,
  60             # ad esempio una lettera, si solleva l'eccezione ValueError 
  61             except ValueError:
  62                 print("\nDevi inserire valori numerici. Riprova.\n")
  63             # se invece non è stata sollevata nessuna eccezione
  64             # possiamo salvare il valore del lato
  65             else:
  66                 lati.append(l)
  67                 break
  68     try:
  69         # Crea una nuova istanza della classe Triangolo.
  70         # In pratica facciamo una chiamata al suo metodo costruttore:
  71         # sarebbe stato lo stesso scrivere "triangolo = Triangolo.__init__(a,b,c)"
  72         triangolo = Triangolo(lati[0], lati[1], lati[2])
  73     # qua gestiamo l'eccezione che potrebbe sollevarsi nella classe Triangolo
  74     except TriangoloInesistente as err:
  75         #"err" è l'oggetto creato da Python durante il verificarsi dell'errore 
  76         print(err.message)
  77         continue
  78     # Utilizza i metodi definiti nella classe per ottenere perimetro ed area
  79     # dell'oggetto triangolo e stampa a video i risultati.
  80     print()
  81     print("Perimetro = ", triangolo.perimetro())
  82     print("Area = ", triangolo.area())
  83 
  84     # Chiede all'utente se intende terminare il programma.
  85     exit = input("\nUscire [digitare 's' per confermare]? ")
  86     print("")
  87     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.py, con qualche modifica o aggiunta, che chiameremo AreaTriangolo3.py:

   1 #!/usr/bin/python3
   2 import sys
   3 import math
   4 import string
   5 # fase di input
   6 nomi = []
   7 eta = []
   8 lati = []
   9 x = 1
  10 while x <= 3:
  11         a = input('Inserici nome '+str(x)+'  fratello ')
  12         #verifichiamo l'input immesso
  13         errore = 'F'
  14         for i in range(len(a)):
  15                 if a[i] in string.ascii_letters:
  16                         continue # continua il ciclo for
  17                 else:
  18                         if i <= len(a):
  19                                 print("errore nell'immettere il  nome. Riprova")
  20                                 errore = 'T'
  21                                 break # esce dal ciclo for
  22         if errore == "T":       
  23                 continue # continua il ciclo while costringendo a reinserire il dato immesso prima in maniera errata
  24         else:
  25                 # lo rendiamo tutto maiuscolo indipendentemente se lo sia  o meno
  26                 nomi.append(str.upper(a))
  27                 print(nomi)
  28                 x +=1   # questo incremento ci serve per poter distinguere nella immissione a quale persona assegnare il nome
  29                 
  30 #ora prendiamo in input le loro eta     
  31 x = 0
  32 
  33 while  x < 3:
  34         
  35         a = input("inserisci l'eta di  "+nomi[x]+'  ')
  36         for j in range(len(a)) :
  37                 errato = 'F'
  38                 if a[j] in string.digits:
  39                         errato = 'F'
  40                         continue #continua il ciclo for
  41                 else:
  42                         errato = 'T'
  43                         print("hai digitato qualcosa che non è un numero. Riprova")
  44                         break  # termina il ciclo for 
  45         if errato =='T':
  46                 continue  #continua il ciclo while
  47                         
  48         x +=1
  49         eta.append(int(a))              
  50         if errato =='F'and x <3:
  51                 
  52                 continue # continua il ciclo while per passare al successivo input
  53         elif errato =='F' and x  >=3:
  54                 print(' Eta di' +nomi[0] +" "+ str( int(eta[0])))
  55                 print()
  56                 print(' Eta di' +nomi[1] +" "+ str( int(eta[1])))
  57                 print()   
  58                 print(' Eta di' +nomi[2] +" "+ str( int(eta[2])))
  59                 print()
  60                 break
  61 #input dei dati per il calcolo dell'area dell'appezzamento
  62                 
  63 i = 0
  64 l=[]
  65 tria = []
  66 while True:
  67         a = input('inserisci il '+str(i+1)+'  lato  ')
  68         for j in range(len(a)) :
  69                 errato = 'F'
  70                 if a[j] in string.digits:
  71                         errato = 'F'
  72                         continue #continua il ciclo for
  73                 else:
  74                         errato = 'T'
  75                         print("hai digitato qualcosa che non è un numero. Riprova")
  76                         break  # termina il ciclo for 
  77         if errato =='T':
  78                 continue  #continua il ciclo while
  79                         
  80         i +=1
  81         l.append(float(a))              
  82         if errato =='F'and i <3:
  83                 # questo controllo verifica se abbiamo terminato i dati in input relativi ad un triangolo
  84                 continue # continua il ciclo while per passare al successivo input
  85         elif errato =='F' and i >=3:
  86                 # qui avendo termianto l'input dei dati relativi ad un trinagolo li ripresenta a video per maggior chiarezza  
  87                 print(' primo lato   = ',l[0])
  88                 print()
  89                 print(' secondo lato = ',l[1])
  90                 print()   
  91                 print(' terzo lato   = ',l[2])
  92                 print()
  93                 p = (l[0]+l[1]+l[2])/2.0
  94                 if  p > l[0]  and  p>l[1] and p >l[2]:
  95                         print(" l'area di questo triangolo e' calcolabile")
  96                         tria.append(l)
  97                         l=[]
  98                         si = input(" hai finito di immettere i lati dei triangoli ?  conferma con S/s  ")
  99                         if si == "S" or si =='s':
 100                                 print("Inizia la fase di calcolo ")
 101                                 break # esce dal ciclo while per fine input
 102                         else:
 103                                 i =0
 104                                 l=[]
 105                                 continue # continua nel ciclo while per input dati nuovo triangolo
 106                 else:
 107                         print("questi dati non rappresentano i lati di un triangolo. Riprova ")
 108                         i =0
 109                         l=[]
 110                         continue # continua nel ciclo while perche i dati in input del triangolo erano errati
 111         
 112         
 113 #fase di calcolo area appezzamento
 114 n = len(tria) # il calcolo dell'area verrà ripetuto n volte una per ogni triangolo
 115 
 116 p = 0
 117 stot = 0
 118 for i,l in enumerate(tria):
 119         for j in range( len(l)):
 120                 print(l[j])
 121                 p = p+l[j]
 122         print("semiper. nel  "+str(i+1)+ " triangolo = "+ str(p/2.0))
 123         print()   
 124         p=p/2.0
 125         s = math.sqrt(p*(p-l[0])*(p-l[1])*(p-l[2]))
 126         print("area "+str(i+1)+ " triangolo = "+ str(s))
 127         print()
 128         stot = stot +s
 129         p=0
 130 print()   
 131 print("l'area totale dell'appezamento di terreno e di mq " + str(stot))  
 132 print()
 133 print("ora calcoliamo quanto terreno spetta a ciascuno dei tre fratelli")
 134 
 135 seta = 0
 136 for i in eta:
 137         seta=seta+i
 138         
 139         
 140 areau =(stot/seta)
 141 
 142 for i in eta:
 143         a =areau*i
 144         nomi.append(a)
 145 for i in range(0,3):
 146         print("l'area spettante a " +nomi[i] + " somma mq. "+ str(nomi[i+3]))    
 147         print()
 148         
 149 print(' Fine programma ')

Listato del programma AreaTriangolo3.py

Ulteriori risorse

  • È possibile anche utilizzare delle interfacce grafiche, per informazioni consultare la relativa guida.


CategoryProgrammazione CategoryHomepage