2017-02-02 3 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 변수 prefixsuffix_map 있습니다. 첫 번째 질문은 글로벌 용이고 메소드 외부에 정의 된 경우 for 루프에서 global으로 다시 정의해야하는 이유입니다. 두 번째 질문은 : prefixsuffix_map에 아무 것도 추가하지 않는 이유는 무엇입니까? 당신의 도움을 주셔서 감사합니다!

+1

side comment : 전역 변수는 잘못된 프로그래밍입니다. 나는 그들을 사용하지 않을 것이다. 함수에 인수로'prefix'를 추가하지 않으시겠습니까? –

답변

0

global suffix_mapglobal prefix을 사용해야합니다.

관련 문제