2017-02-02 4 views
0

Я застрял на этом, который содержит глобальные переменные, и я знаю, что, как я их разбил, он просто не работает. Позвольте мне показать вам мой код:Как использовать глобальные переменные и как их правильно определить?

suffix_map = {} 
prefix =() 

def markov_body(file, order, header_text, header = True): 
    start = open(file) 
    if header: 
     for line in start: 
      if line.startswith(header_text): 
       break 

    for line in start:  
     for word in line.rstrip().split(): 
      global prefix 
      if len(prefix) < order: 
       prefix += (word,) 
       return 
      try: 
       suffix_map[prefix].append(word) 
      except KeyError: 
       suffix_map[prefix] = [word] 

      prefix = shifted(prefix, word) 

def shifted(t, word): 
    return t[1:] + (word,) 

def markov_text(n): 
    begin = random.choice(list(suffix_map.keys())) 
    for i in range(n): 
     suff = suffix_map.get(begin) 
     if suff == None: 
      return markov_text(n-i) 

     word = random.choice(suff) 
     print(word, end = "") 
     begin = shifted(begin, word) 

print(markov_text(100)) 

В global переменные prefix и suffix_map. Первый вопрос должен состоять в том, почему я должен определить его снова как global в моем for-loop, если он глобальный и определен вне метода? Второй вопрос: почему ничего не добавляет к prefix и suffix_map? Спасибо за вашу помощь!

+1

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

ответ

0

Вам необходимо будет использовать global suffix_map и global prefix.

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