<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
</head>
<body bgcolor="#FFFFFF" text="#000000">
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).<br>
Quando però richiamo la funzione <font color="#cc0000">richiesta_per-nuovo_calcolo</font>,
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. <br>
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. <br>
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.<br>
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.<br>
Dove sbaglio?<br>
Come ne vengo fuori?<br>
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.<br>
Qualcuno è disposto a farmi vedere come andrebbe riscritta questa
parte di codice?<br>
Grazie infinite ...<br>
......<br>
scelta1 = 0<br>
while scelta1 == 0:<br>
scelta_distanza = input("La distanza percorsa è espressa col
sistema metrico decimale o in miglia terrestri? metrico / miglia ")<br>
print()<br>
if scelta_distanza == "metrico":<br>
scelta2 = 0 <br>
<font color="#3366ff">def richiesta_per_nuovo_calcolo():</font><br>
<font color="#006600">replica = 0<br>
while replica == 0:<br>
nuova_elaborazione = input("Vuoi provare ad
inserire una distanza diversa per un nuovo calcolo? si / no ")<br>
if nuova_elaborazione == "no":<br>
scelta1 = scelta1 + 1<br>
scelta2 = scelta2 + 1<br>
replica = replica + 1<br>
elif nuova_elaborazione == "si":<br>
print()<br>
replica = replica + 1<br>
scelta2 = scelta2 + 1<br>
else:<br>
print()<br>
print("Devi rispondere si o no")<br>
print()</font><br>
while scelta2 == 0:<br>
distanza = input("La distanza percorsa è in km o metri?
km / mt ")<br>
print()<br>
if distanza == "km":<br>
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))<br>
km_percorsi = eval(input("Inserisci il numero dei km
percorsi "))<br>
miglia_percorse = km_percorsi / 1.609344<br>
velocità_media = km_percorsi/ore_impiegate<br>
print()<br>
print("I km percorsi equivalgono
a",miglia_percorse,"miglia")<br>
print()<br>
print("La velocità media è stata di
",velocità_media,"km/orari \no di",(velocità_media/3.6),"metri al
secondo")<br>
print()<br>
print("In miglia terrestri, la velocità media è
stata di",(velocità_media / 1.609344),"miglia/orarie")<br>
print("oppure a",(((velocità_media / 1.609344)*
1760) / 3600),"Yard al secondo")<br>
print()<br>
<font color="#cc0000">richiesta_per_nuovo_calcolo()</font><br>
elif distanza == "mt":<br>
secondi_impiegati = ((giorni*24*60*60) + (ore*60*60)
+ (minuti*60) + secondi + (decimi_di_secondo/10.0) +
(centesimi_di_secondo/100.0))<br>
metri_percorsi = eval(input("Inserisci il numero dei
metri percorsi "))<br>
yard_percorse = metri_percorsi / 0.9144<br>
velocità_media = metri_percorsi / secondi_impiegati<br>
print()<br>
print("I metri percorsi equivalgono
a",yard_percorse,"yard")<br>
print()<br>
print("La velocità media è stata di
",velocità_media,"metri/secondo \no di",(velocità_media * 3.6),"Km
orari")<br>
print()<br>
print("In miglia terrestri, la velocità media è
stata di",(velocità_media / 1.609344)*3.6,"miglia/orarie")<br>
print("oppure a",(((velocità_media /
1.609344)*3.6)*1760)/3600,"yard al secondo")<br>
print()<br>
<font color="#cc0000"> richiesta_per_nuovo_calcolo()</font><br>
else:<br>
print("Devi indicare la scelta con km o mt")<br>
print()<br>
.....<br>
</body>
</html>