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

vì vậy tôi nhận được rất nhiều chuỗi trên 'công cụ' và tôi muốn tìm 1 chữ thường viết bằng 3 chữ cái hoa.Biến cục bộ được tham chiếu trước khi gán trong Python

nhưng khi tôi chạy mã này tôi nhận được:

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 

tôi không hiểu tại sao. cảm ơn trước

Trả lời

20

Do dòng này count +=1 python nghĩ rằng count là biến cục bộ và sẽ không tìm kiếm phạm vi toàn cầu khi bạn sử dụng if count == 3:. Đó là lý do tại sao bạn có lỗi đó.

Sử dụng global tuyên bố để xử lý rằng:

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

Từ docs:

Tất cả các bài tập biến trong một cửa hàng chức năng giá trị trong địa phương bảng biểu tượng; trong khi các tham chiếu biến đầu tiên, hãy nhìn vào bảng biểu tượng cục bộ, sau đó trong bảng ký hiệu toàn cầu, và sau đó trong bảng các tên được cài sẵn. Do đó, các biến toàn cục không thể được gán trực tiếp một giá trị trong một hàm (trừ khi được đặt tên trong một câu lệnh chung), mặc dù chúng có thể được tham chiếu.

+0

cảm ơn, mặc dù tôi xác định var bên ngoài hàm sẽ giải quyết vấn đề này. vì vậy mỗi khi tôi sẽ sử dụng var toàn cầu trong chức năng tôi sẽ phải xác định nó như là toàn cầu? –