Programmazione Python > Base

Problemi variabile globale

(1/3) > >>

Led:
Ciao a tutti!Stavo cercando di creare un semplicissimo programma, ma sono bloccato da circa 1 ora, però mi sto divertendo xD
Volevo creare un semplicissimo programmino che ordinava in ordine alfabetico delle parole contenute in una lista. Ecco quello che sto combinando xD:
#Dichiaro una lista vuota
lista_caratteri=[]
#Funzione menu'
def menu():
print "***********************"
print "* 1. Inserisci parola *"
print "* 2. Ordina parole    *"
print "* 3. Ritorna al menu' *"
        print "* 4. Esci             *"
print "***********************"
scelta = raw_input()

while scelta != 4:
if (scelta == 1):
print "Inserisci una parola. Srivi \"exit\" per terminare"
parola = raw_input()
if (parola == "exit"):
menu()
else:
      lista_caratteri.append(parola)
menu()

if (scelta == 2):
print "Ordinamento in corso..."
lista_caratteri.sort()
menu()

if (scelta ==3):
menu()

print "Byez!"


Il problema sta nel fatto che "scelta" è una variabile locale, e quindi non posso richiamarla all'infuori della funzione!Potrei benissimo mettere la variabile "scelta" all'infuori della funziona ma praticamente non ottengo un bel niente (un ciclo infinito e privo di significato!). Cosa dovrei fare?Come posso richiamare una variabile locale fuori la funzione?Perchè io avevo intenzione di creare una variabile fuori la funzione, col nome di "scelta2" ed assegnarci il valore di "scelta "(forse sto dicendo un mucchio di fisserie xD)...
Grazie anticipamente e ciao!



P.S. Tanto lo so che adesso arriva qualcuno e se ne esce con due righe di codice in 2 minuti  :D

Markon:
hmm, il problema lo risolvi semplicemente mettendo scelta fuori e dichiarata come intero:
int(raw_input())
Non dimenticarti mai che raw_input genera una stringa :)

Così comunque non risolvi il problema, ci sono un paio di errori :)

Vedi un pochino tu :)

Emanuele:
Una variabile locale la puoi richiamare all'esterno specificando nella funzione come globale in questo modo

global nome_variabile

Esempi http://www.gentoo.it/Programmazione/byteofpython/local-variables.html

akus85:
Led ho sistemato un po il tuo programmino....adesso cosi dovrebbe andare  ;)

#Dichiaro una lista vuota
lista_caratteri=[]
parola=""
#Funzione menu'
def menu():
  print "***********************"
  print "* 1. Inserisci parola *"
  print "* 2. Ordina parole    *"
  print "* 3. Ritorna al menu' *"
  print "* 4. Esci             *"
  print "***********************"
  #scelta = raw_input()
  return input(">>> ")   

scelta=menu()
print "scelta ",scelta
while(scelta!=4):
  if (scelta==1):
    print "Inserisci una parola.Scrivi \"exit\" per terminare"
    parola=raw_input(">> ")
    if (parola=="exit"):
      #menu()
      scelta=4
    else:
      lista_caratteri.append(parola)
      #menu()
  elif (scelta==2):
    print "Ordinamento in corso..."
    lista_caratteri.sort()
    print lista_caratteri
    #menu()
  scelta=menu()
print "Byez!"



In pratica le modifiche che ho apportato sono:

-Nella funzione menu alla fine ritorna un'intero (la scelta dell'utente) e viene associata alla variabile scelta (scelta=menu())

-All'interno del while anzichè utilizzare tutti quei if utilizzo degli elif  ed ad ogni scelta non richiamo la funzione menu() ma più semplicemente richiamo scelta=menu() alla fine delle condizioni di controllo di scelta (in pratica come ultima istruzione del while)

- scelta==3 neanche l'ho inserita come condizione di controllo perchè se è uguale a 3 visualizza l'ultima istruzione del while scelta=menu()   ;)


Spero d'essere stato abbastanza chiaro !  :fingers-crossed:

MiPnamic:
Mi intrometto per porra una domanda o meglio... per fare una considerazione...

io come alternativa al "global" prima della variabile creo una classe vuota... ad esempio:

def app:
    pass

a = app()

dopodichè le variabili di interesse "globale" le salvo come

a.var = 'variabile'

poi per comodità di "comprensione" mi creo classi diverse e distinguo i gruppi di variabili ^^ che ne dite?

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa