简体   繁体   English

如何定义全局名称?

[英]How do I define global names?

I'm trying to learn Python, but I'm having some trouble making a sort of text adventure game because of global names, here's my code. 我正在尝试学习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()

If I answer "Deeper", this error occurs. 如果我回答“更深”,则会发生此错误。

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

Use the global keyword to indicate you mean to use a global variable. 使用global关键字表示您要使用全局变量。

foo = 123

def bar():
    global foo
    print(foo)

You need to define all functions before calling them 您需要先定义所有函数,然后才能调用它们

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()

Ok, you should use global . 好的,您应该使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM