2013-07-06 3 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) 

поэтому я получил много строк в «stuff», и мне нравится находить 1 строчную букву, которая сортируется по 3 букве верхнего регистра.Локальная переменная, привязанная до присвоения в Python

, но когда я запускаю этот код я получаю:

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 

я не понимаю, почему. Заранее спасибо

ответ

20

Из-за этой строки count +=1 python считает, что count является локальной переменной и не будет искать глобальную область, когда вы использовали if count == 3:. Вот почему вы получили эту ошибку.

Используйте global заявление для обработки, что:

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

От docs:

Все присвоений переменных в функции сохраняют значение в локальной таблице символов; в то время как ссылки на переменные сначала просматриваются в локальной таблице символов , затем в глобальной таблице символов, а затем в таблице встроенных имен. Таким образом, глобальным переменным нельзя назначить значение внутри функции (если не указано в глобальном заявлении), , хотя на них могут ссылаться.

+0

спасибо, хотя, что определение var вне функции решит эту проблему. поэтому каждый раз, когда я буду использовать глобальную функцию var, мне нужно будет определить ее как глобальную? –

0

Фактически лучше использовать нелокальный в этом случае. Используйте глобальный как можно более экономный. Более подробную информацию о нелокальном здесь docs.python.org/3/reference/simple_stmts.html#nonlocal

Смежные вопросы