2014-10-14 7 views
1

그래서 텍스트 기반 게임에 파일 저장 및로드를 시도하고 있습니다 ... 저장하면 다시 저장하면 저장이 덮어 쓰여집니다. 그러나 로딩하면 NameError가 표시됩니다.NameError : name 'Class'가 정의되지 않았습니다. (파이썬)

def save(): 
    my_file = open("save.txt", "w") 
    my_file.write(Class + "\n") 
    my_file.write(level + "\n") 
    my_file.write(str(hp) + "\n") 
    my_file.write(str(atk) + "\n") 
    my_file.write(str(Def) + "\n") 
    my_file.write(str(spd)+ "\n") 
    my_file.write(str(ene)+ "\n") 
    my_file.write(str(race1)+ "\n") 
    my_file.close() 

def load(): 
    infile = open("save.txt") 

    lines = infile.readlines() 

    line_number = 0 

    while line_number < len(lines): 

     Class = lines[line_number] 
     level = lines[line_number + 1] 
     hp = lines[line_number + 2] 
     atk = lines[line_number + 3] 
     Def = lines[line_number + 4] 
     spd = lines[line_number + 5] 
     ene = lines[line_number + 6] 
     race1 = lines[line_number + 7] 

     line_number += 8 
     print(Class, level, hp, atk, Def, spd, ene, race1) 


    infile.close() 
    identify() 

위는 저장 및로드 정의입니다 .. 여기에

는 클래스 입력 정의입니다 :

def class_level(): 
     global Class 
     global level 
     Class = input("Please input your class: ") 
     print() 
     level = input("Please input your level: ") 
     print() 
     race()  

그리고 여기에 indentify 정의입니다 :

def identify(): 
    global hp 
    global atk 
    global Def 
    global spd 
    global ene 
    if re.match(r"warrior", Class, re.I): <---- This is the line the error is on, Class not defined 
    print() 

누군가가 수 내가 뭘 잘못했는지 말해 줄래? 파일을로드하고 표시합니다.하지만 Class가 def 식별에 정의되어 있지 않다고 말합니다. 감사합니다. .

+0

누가 class_level 및 load를 호출합니까? 동일한 모듈에 있습니까? 전역은 현재 모듈과 관련하여 전역 적입니다. – Juergen

답변

0

파이썬에서는 전역 변수가 전역 변수로 변수를 정의하지 않는다는 점에서 전역 적으로 작동합니다. 변수가 있으면 전역 네임 스페이스의 로컬 네임 스페이스에 변수를 추가합니다. 존재하지 않으면 전역 인스턴스를 작성하고이를 로컬 네임 스페이스에 추가합니다. 전역 네임 스페이스에서 변수로 Class이있을 수 있지만 함수 로컬 네임 스페이스에 Class이 없습니다. identify의 로컬 네임 스페이스에 Class을 추가해야합니다. 당신은 라인을 추가하여 그것을 할 global Class. 이제 로컬 네임 스페이스에 변수에 대한 참조가 있습니다. Class

def identify(): 
    global hp 
    global atk 
    global Def 
    global spd 
    global ene 
    # You need to mention global Class as well 
    global Class 
    if re.match(r"warrior", Class, re.I): 
    print()