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()
.....
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a