<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>