I use global variables but for a reason a function cant use one of them and give me that UnboundLocalError, and i would like to know that reason.
when i try the next code it dose not work and give me this error,"UnboundLocalError: local variable 'pos' referenced before assignment"
lst_tubles=[]
pos=0
def find_best_shifts_rec(wordlist, text,start=0):
   """
    wordlist: list of words
    text: scambled text to try to find the words for
    start: where to start looking at shifts
    returns: list of tuples.  each tuple is (position in text, amount of shift)
    """
    def count_words(splited_text):
        count=0
        for i in range(len(splited_text)):
            if is_word(wordlist,splited_text[i]):
                count+=1
            else:
                break
        return count
    def find_shift(text):
        shift=0
        max_words=0
        while shift<27:
            splited_text=apply_shift(text,shift).split()
            valid_words=count_words(splited_text)
            if valid_words>max_words:
                max_words=valid_words
                best_shift=shift
            shift+=1
        return best_shift
    def go_to(text):
        move=0
        split=text.split()
        for word in split:
            if is_word(wordlist,word):
                move+=len(word)+1
            else:
                break
        return move
    text=text[start:]
    if text=='' or text==' ':
        return lst_tubles
    else:
        shift=find_shift(text)
        lst_tubles.append((pos,shift))
        text=apply_shift(text,shift)
        start=go_to(text)
        pos+=go_to(text)
        return find_best_shifts_rec(wordlist,text,start)
text='eqorqukvqtbmultiform wyy ion'
shift=find_best_shifts_rec(wordlist,text,)
print shift
print apply_shifts(text,shift)
well i dont get it since pos is global var so how does it come that the func cant access it!!?and its really important for me to know why?
i tried fixing that problem using the following code,but i got the same error. i just dont get it, why it isnt able to access the pos variable!! even though its easily accessing the lst_tubles varaible
def find_best_shifts(wordlist, text):
    """ Given a scrambled string, returns a shift key that will decode
    the text to words in wordlist, or None if there is no such key.
    """
    lst_tubles=[]
    pos=0
    return find_best_shifts_rec(wordlist,text,)
def find_best_shifts_rec(wordlist, text,start=0):
   """
    wordlist: list of words
    text: scambled text to try to find the words for
    start: where to start looking at shifts
    returns: list of tuples.  each tuple is (position in text, amount of shift)
    """
   def count_words(splited_text):
        count=0
        for i in range(len(splited_text)):
            if is_word(wordlist,splited_text[i]):
                count+=1
            else:
                break
        return count
   def find_shift(text):
        shift=0
        max_words=0
        while shift<27:
            splited_text=apply_shift(text,shift).split()
            valid_words=count_words(splited_text)
            if valid_words>max_words:
                max_words=valid_words
                best_shift=shift
            shift+=1
        return best_shift
   def go_to(text):
        move=0
        split=text.split()
        for word in split:
            if is_word(wordlist,word):
                move+=len(word)+1
            else:
                break
        return move
   text=text[start:]
   if text=='' or text==' ':
        return lst_tubles
   else:
        shift=find_shift(text)
        lst_tubles.append((pos,shift))
        text=apply_shift(text,shift)
        start=go_to(text)
        pos+=go_to(text)
        return find_best_shifts_rec(wordlist,text,start)
text='eqorqukvqtbmultiform wyy ion'
shift=find_best_shifts(wordlist,text)
print shift
print apply_shifts(text,shift)
i didnt include all of the code since its quite long,however if anyone believe its needed i will put it.
 
     
    