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