Python:定义前缀的locals()中的随机函数

Python:定义前缀的locals()中的随机函数,python,python-3.x,locals,Python,Python 3.x,Locals,我正在做一个基于文本的冒险,现在想运行一个随机函数。 所有冒险功能都是“adv”,后跟一个3位数字。 如果我运行go(),我将返回: IndexError: Cannot choose from an empty sequence 这是因为allAdv仍然是空的。如果我在shell中逐行运行go(),它会工作,但不会在函数中运行。我错过了什么 import fight import char import zoo import random #runs a random adventure

我正在做一个基于文本的冒险,现在想运行一个随机函数。 所有冒险功能都是“adv”,后跟一个3位数字。
如果我运行go(),我将返回:

IndexError: Cannot choose from an empty sequence
这是因为allAdv仍然是空的。如果我在shell中逐行运行go(),它会工作,但不会在函数中运行。我错过了什么

import fight
import char
import zoo
import random

#runs a random adventure
def go():
    allAdv=[]
    for e in list(locals().keys()):
        if e[:3]=="adv":
            allAdv.append(e)
    print(allAdv)
    locals()[random.choice(allAdv)]()


#rat attacks out of the sewer
def adv001():
    print("All of a sudden an angry rat jumps out of the sewer right beneath your feet. The small, stinky animal aggressivly flashes his teeth.")
    fight.report(zoo.rat)

这主要是由于范围问题,当您在
go()
中调用
locals()
时,它只打印出此函数中定义的局部变量
allDev

locals().keys()  # ['allDev']
但是,如果您在shell中逐行键入以下内容,
locals()
确实包括
adv001
,因为在本例中它们处于相同的级别

def adv001():
    print("All of a sudden an angry rat jumps out of the sewer right beneath your feet. The small, stinky animal aggressivly flashes his teeth.")
    fight.report(zoo.rat)

allAdv=[]
print locals().keys()  #  ['adv001', '__builtins__', 'random', '__package__', '__name__', '__doc__']
for e in list(locals().keys()):
    if e[:3]=="adv":
        allAdv.append(e)
print(allAdv)
locals()[random.choice(allAdv)]()

如果您真的想在<代码>()(代码)>中获得这些函数变量,您可以考虑更改<代码> Loals>>(.KEY)(<代码)> <代码> GULALS()。按同样的顺序试了一下