2013-07-06 14 views
10
Truel="" 
count = 0 
finle_touch=False #true after it find the first 3 upperletter 

# check if there is 1 lower letter after three upper letter 
def one_lower(i): 
    count=0 
    if i == i.lower: 
     finle_touch=True 
     Truel=i 

# check for 3 upper letter 
def three_upper(s): 
    for i in s: 
     if count == 3: 
      if finle_touch==True: 
       break 
      else: 
       one_lower(i) 
     elif i == i.upper: 
      count +=1 
      print(count) #for debug 
     else: 
      count ==0 
      finle_touch=False 

stuff="dsfsfFSfsssfSFSFFSsfssSSsSSSS......." 
three_upper(stuff) 
print(Truel) 

così ho ottenuto molta stringa su "roba" e mi piace trovare 1 lettera minuscola che sorrida con 3 lettere maiuscole.Variabile locale referenziata prima dell'assegnazione in Python

ma quando ho eseguito questo codice ottengo:

Traceback (most recent call last): 
    File "C:\Python33\mypy\code.py", line 1294, in <module> 
    three_upper(stuff) 
    File "C:\Python33\mypy\code.py", line 1280, in three_upper 
    if count == 3: 
UnboundLocalError: local variable 'count' referenced before assignment 

non capisco perché. grazie in anticipo

risposta

20

A causa di questa riga count +=1 python ritiene che count sia una variabile locale e che non esegua la ricerca dell'ambito globale quando si utilizza if count == 3:. Ecco perché hai ricevuto quell'errore.

Usa global dichiarazione per gestire che:

def three_upper(s): #check for 3 upper letter 
    global count 
    for i in s: 

Da docs:

Tutte le assegnazioni di variabili in un negozio di funzione il valore nella tabella simbolo locale; mentre i riferimenti variabili vengono prima visualizzati nella tabella dei simboli locale, quindi nella tabella dei simboli globale, quindi nella tabella dei nomi predefiniti. Pertanto, non è possibile assegnare direttamente alle variabili globali un valore all'interno di una funzione (a meno che non venga indicato in un'istruzione globale), sebbene possano essere referenziate.

+0

grazie, io però che definire la variabile al di fuori della funzione risolverà questo problema. quindi ogni volta che userò global var in function dovrò definirlo globale? –

Problemi correlati