[Python] Ancora problemi con le funzioni ...

Carpediem i.carpediem a tiscali.it
Ven 8 Maggio 2015 18:30:13 CEST


Non ne vengo fuori: per evitare di ripetere più volte lo stesso blocco 
di istruzioni, ho creato una funzione (le cui istruzioni si comportano 
perfettamente in assenza della funzione creata).
Quando però richiamo la funzione richiesta_per-nuovo_calcolo, sia che io 
opti per la scelta "si" o quella "no" mi ritrovo con un messaggio di 
errore che non riesco a capire: unboundlocalerror local variable 
referenced before assignment.
L'errore fa riferimento a una o due variabili (a seconda della scelta 
effettuata) che in assenza della chiamata di funzione (ma in presenza 
delle stesse righe di comando in essa contenute) non determinano alcun 
errore e il programma procede senza intoppi.
Sono da poco alle prese con le funzioni e ho pensato che forse l'errore 
sta nel fatto che le variabili chiamate sono al di fuori di essa. Il 
problema è che ho bisogno di assegnare ad esse un nuovo valore per 
determinare il comportamento dei cicli while in precedenza scritti.
Alla fine mi ritrovo con un programma scritto sicuramente male ma che 
gira mentre lo stesso programma che sto provando a riscrivere 
utilizzando le funzioni (quindi con l'intenzione di scriverlo meglio) 
che però si blocca.
Dove sbaglio?
Come ne vengo fuori?
Ogni volta che leggo qualcosa su come creare ed utilizzare le funzioni 
mi sembra tutto chiaro e poi al dunque mi ritrovo nell'incapacità di 
gestirle.
Qualcuno è disposto a farmi vedere come andrebbe riscritta questa parte 
di codice?
Grazie infinite ...
......
scelta1 = 0
while scelta1 == 0:
     scelta_distanza = input("La distanza percorsa è espressa col 
sistema metrico decimale o in miglia terrestri? metrico / miglia ")
     print()
     if scelta_distanza == "metrico":
         scelta2 = 0
def richiesta_per_nuovo_calcolo():
replica = 0
             while replica == 0:
                 nuova_elaborazione = input("Vuoi provare ad inserire 
una distanza diversa per un nuovo calcolo? si / no ")
                 if nuova_elaborazione == "no":
                     scelta1 = scelta1 + 1
                     scelta2 = scelta2 + 1
                     replica = replica + 1
                 elif nuova_elaborazione == "si":
                     print()
                     replica = replica + 1
                     scelta2 = scelta2 + 1
                 else:
                     print()
                     print("Devi rispondere si o no")
                     print()
         while scelta2 == 0:
             distanza = input("La distanza percorsa è in km o metri? km 
/ mt ")
             print()
             if distanza == "km":
                 ore_impiegate = ((giorni*24) + ore + (minuti/60.0) + 
(secondi/3600.0) + ((decimi_di_secondo/10.0)/3600.0)+ 
((centesimi_di_secondo/100.0)/3600.0))
                 km_percorsi = eval(input("Inserisci il numero dei km 
percorsi "))
                 miglia_percorse = km_percorsi / 1.609344
                 velocità_media = km_percorsi/ore_impiegate
                 print()
                 print("I km percorsi equivalgono 
a",miglia_percorse,"miglia")
                 print()
                 print("La velocità media è stata di 
",velocità_media,"km/orari \no di",(velocità_media/3.6),"metri al secondo")
                 print()
                 print("In miglia terrestri, la velocità media è stata 
di",(velocità_media / 1.609344),"miglia/orarie")
                 print("oppure a",(((velocità_media / 1.609344)* 1760) / 
3600),"Yard al secondo")
                 print()
richiesta_per_nuovo_calcolo()
             elif distanza == "mt":
                 secondi_impiegati = ((giorni*24*60*60) + (ore*60*60) + 
(minuti*60) + secondi + (decimi_di_secondo/10.0) + 
(centesimi_di_secondo/100.0))
                 metri_percorsi = eval(input("Inserisci il numero dei 
metri percorsi "))
                 yard_percorse = metri_percorsi / 0.9144
                 velocità_media = metri_percorsi / secondi_impiegati
                 print()
                 print("I metri percorsi equivalgono 
a",yard_percorse,"yard")
                 print()
                 print("La velocità media è stata di 
",velocità_media,"metri/secondo \no di",(velocità_media * 3.6),"Km orari")
                 print()
                 print("In miglia terrestri, la velocità media è stata 
di",(velocità_media / 1.609344)*3.6,"miglia/orarie")
                 print("oppure a",(((velocità_media / 
1.609344)*3.6)*1760)/3600,"yard al secondo")
                 print()
richiesta_per_nuovo_calcolo()
             else:
                 print("Devi indicare la scelta con km o mt")
                 print()
.....
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150508/c8939bcc/attachment-0001.html>


Maggiori informazioni sulla lista Python