2013-12-13 2 views
1

쉽게 편집 할 수 있도록 별도의 파일에 규칙이있는 Turing 컴퓨터를 시뮬레이트하는 프로그램을 디자인하고 있습니다. 불행하게도 RuleTable에서 먼저 계산을 시도하면 NameError가 발생합니다.'global'이 사용 되었더라도 NameError를 제공하는 가져온 파일의 변수 사용

기분을 상하게하는 조각 :

import TheRules 

def turIt(): 
    global ruleTable #Global has been used here. 
    tapeSegment = tape[tapePos] 
    for x in range(0,len(ruleTable)): #Error here. 
     if ruleTable[x][2] == machineState and ruleTable[x][3] == tape[tapePos]: 
      machineState = ruleTable[x][4] 
      tape[tapePos] = ruleTable[x][5] 
      move(ruleTable[x][6]) 

TheRules :

ruleTable = [1] 
ruleTable[0] = ("startRule","anyVal","anyVal","1","1",1) 
#New rules go down here: 

가 정확하려면 :

것은 무엇을 가장 쉬운 방법이 될 것 "나가서 설명하자면 NameError 글로벌 이름 'ruleTable은'정의되지 않았습니다" 이걸 처리할까요? 나는 그것에 대해 철저히 혼란 스럽다.

답변

1

import TheRulesTheRules 모듈 만 로컬 namesapce에로드하고 내용 (varaibles, functions ...)은로드하지 않습니다.

로컬 이름 공간에 ruleTable을로드하려면 from TheRules import ruleTable을 사용하십시오.

또는 TheRules.ruleTable

+0

을 사용하여 변수에 액세스 해 주셔서 감사합니다. – EnronEvolved

+0

당신이해야 할 일은 아니지만, 완료를 위해서'Therules import *'를 통해 모든 이름을 한 번에 가져올 수 있습니다. 그것은 빨리 혼란스럽게된다. – TankorSmash