[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