2013-09-17 4 views
0

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

def startcave(): 
    print "You awake in an dark cave. You can't remember your past, but you need to find a way out. You feel hungry, although tired." 
    print "Would you like to delve deeper via a cave passage, or look for a way out in this room?" 
    answer = raw_input("Do you go -Deeper-, -Search-, or -Rest-?").lower() 
    if answer == "Deeper" or answer == "deeper": 
     lowcave1() 
    elif answer == "Search" or answer == "search": 
     searchcave() 
    elif answer == "Rest" or answer == "rest": 
     caverest() 
    else: 
     print "You must either say -Deeper- or -Search-" 
     startcave() 

startcave() 

def lowcave1(): 
    print "You go deeper into the cave, walking down a steadily reclining corridor for some time, you have lost track of time." 
    print "There is a large ledge before you. You can jump down, but there is no way back up." 
    print "The cave may be dangerous, and you could end up being trapped. Do you turn back?" 
    answer = raw_input("Do you -Jump- or -Turn back-?").lower() 
    if answer == "Jump" or answer == "jump": 
     lowcave2() 
    elif answer == "Turn back": 
     caverest2() 

lowcave1() 

Если я отвечу «Глубоко», эта ошибка возникает.

Traceback (most recent call last): 
    File "C:\Users\Student\Desktop\Cavestuff.py", line 15, in <module> 
    startcave() 
    File "C:\Users\Student\Desktop\Cavestuff.py", line 6, in startcave 
    lowcave1() 
NameError: global name 'lowcave1' is not defined 
+2

Что "проблемы"? – StoryTeller

+0

В чем проблема? Есть ли сообщение об ошибке, которое генерируется, или это код, который работает неожиданно? Не могли бы вы изменить свой вопрос, чтобы включить более подробную информацию? – Michael0x2a

+1

«Привет, господин Механик, у меня с моей машиной есть какая-то проблема». Вот и вся машина, пожалуйста, исправьте ее ». – kindall

ответ

1

Вам необходимо определить все функции перед вызовом их

def startcave(): 
    print "You awake in an dark cave. You can't remember your past, but you need to find a way out. You feel hungry, although tired." 
    print "Would you like to delve deeper via a cave passage, or look for a way out in this room?" 
    answer = raw_input("Do you go -Deeper-, -Search-, or -Rest-?").lower() 
    if answer == "Deeper" or answer == "deeper": 
     lowcave1() 
    elif answer == "Search" or answer == "search": 
     searchcave() 
    elif answer == "Rest" or answer == "rest": 
     caverest() 
    else: 
     print "You must either say -Deeper- or -Search-" 
     startcave() 

def lowcave1(): 
    print "You go deeper into the cave, walking down a steadily reclining corridor for some time, you have lost track of time." 
    print "There is a large ledge before you. You can jump down, but there is no way back up." 
    print "The cave may be dangerous, and you could end up being trapped. Do you turn back?" 
    answer = raw_input("Do you -Jump- or -Turn back-?").lower() 
    if answer == "Jump" or answer == "jump": 
     lowcave2() 
    elif answer == "Turn back": 
     caverest2() 

startcave() 

lowcave1() 
2

Используйте глобальное ключевое слово, чтобы указать, что вы хотите использовать глобальную переменную.

foo = 123 

def bar(): 
    global foo 
    print(foo) 
+0

Какая глобальная переменная? Я не вижу его в коде. –

+0

@Maxime глобальная переменная в этом примере будет «foo». Насколько я понял, ключевое слово «global» указывает, что переменная является глобальной, поэтому строка «global foo». –

+0

@ dirtdiver24 Я, очевидно, имел в виду, в коде OP. Я понимаю этот код, спасибо;). –

0

Хорошо, вы должны использовать global.

a = 1 
print '1: ', a # Prints 1: 1 

def f1(): 
    a = 2 
    print '2: ', a 

f1() # Prints 2: 2 

print '3: ', a # Prints 3: 1 

def f2(): 
    global a 
    a = 3 
    print '4: ', a 

f2() # Prints 4: 3 

print '5: ', a # Prints 5: 3 
Смежные вопросы