Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在通过字典调用其他函数时遇到问题:有人能给我解释一下这个代码吗?_Python_Iterator_Next - Fatal编程技术网

Python 在通过字典调用其他函数时遇到问题:有人能给我解释一下这个代码吗?

Python 在通过字典调用其他函数时遇到问题:有人能给我解释一下这个代码吗?,python,iterator,next,Python,Iterator,Next,这在基于文本的游戏中用于确定是否已进入其他房间以运行功能。这是学习练习,所以我确信代码不是最优的。整个过程是从最后一行运行代码开始的 def runner(map, start): next = start while True: room = map[next] print "\n--------" next = room() runner(ROOMS, 'central_corridor') 以下是在runner函数中用作

这在基于文本的游戏中用于确定是否已进入其他房间以运行功能。这是学习练习,所以我确信代码不是最优的。整个过程是从最后一行运行代码开始的

def runner(map, start):
    next = start

    while True:
        room = map[next]
        print "\n--------"
        next = room()

runner(ROOMS, 'central_corridor')
以下是在runner函数中用作参数的ROOMS字典:

ROOMS = {
  'death': death,
  'central_corridor': central_corridor,
  'laser_weapon_armory': laser_weapon_armory,
  'the_bridge': the_bridge,
  'escape_pod': escape_pod
}

所以,更具体地说,我的问题是,如果游戏中进入了下一个房间,如何使用while循环来运行下一个房间的功能?我感觉答案在于while循环中包含的下一个迭代器。

如果我们重命名变量,代码将更容易理解。切勿命名变量
map
next
,因为这样做会隐藏相同名称的内置项

以下是重命名
map
next
后相同代码的外观:

ROOMS = {
  'death': death,
  'central_corridor': central_corridor,
  'laser_weapon_armory': laser_weapon_armory,
  'the_bridge': the_bridge,
  'escape_pod': escape_pod
}


def runner(visit, start):
    room = start

    while True:
        action = visit[room]
        print "\n--------"
        room = action()

runner(ROOMS, 'central_corridor')
visit
变量是一个dict,它将房间映射到动作(即函数)。操作的返回值是房间。 所以

查找访问房间时发生的操作, 及


room
设置为执行
action
后下一个room的值。

next
不是迭代器,它是保存room名称的字符串。您将文件室名称传递给
运行程序
,它在
文件室
中查找相应的函数,将其分配给
文件室
,然后调用它。每个房间功能必须返回下一个房间的名称。我假设每个房间的功能,如中央勘误表,都要求用户输入,然后返回一个基于该功能的名称,例如返回激光武器库,返回桥梁等。不要使用名称作为变量,因为它们隐藏了相同名称的内置函数。@moaroN您还应该修改问题标题,因为您显示的代码与生成器或迭代器无关。@unutbu我正在使用learnpythonthehard方式,他让我使用next和map。你是说这两个函数的内置函数都被它们的使用方式覆盖了吗?我一直在查找这些信息,以此来理解这一点,并发现它不必要地令人困惑。如果是这样的话,感谢您澄清这一点。learnpythonthehardway通过命名变量
map
next
实现了它的名副其实。吼叫声
action = visit[room]
room = action()