首页 > 解决方案 > 虽然循环缩进弄乱了我的变量

问题描述

我对编程很陌生,我有一段代码可以以一种方式工作,但只能以其他两种方式半正确地工作。我只是想了解为什么。这是来自我正在关注的文字游戏:

while current_scene != last_scene:
        next_scene_name = current_scene.enter()
        current_scene = self.scene_map.next_scene(next_scene_name)

current_scene.enter()

这段代码可以正常工作,但是,我认为缩进 current_scene.enter() 会适当地使其成为 while 循环的一部分,如下所示

while current_scene != last_scene:
    next_scene_name = current_scene.enter()
    current_scene = self.scene_map.next_scene(next_scene_name)

    current_scene.enter()

在我的代码的其他部分,场景包含输入。当这条线被缩进成为 while 循环的一部分时,当你给出正确的输入时会发生什么,它会再次通过相同的场景。第二次给它正确的输入最终使它可以继续游戏的其余部分。为什么会这样?

最后,如果我将 current_scene.enter() 移到 while 循环上方,它会在正确输入后重复第一个场景两次,这是为什么呢?下面是它的样子

current_scene.enter()
while current_scene != last_scene:
    next_scene_name = current_scene.enter()
    current_scene = self.scene_map.next_scene(next_scene_name)

我感谢任何和所有的帮助。这是我在 StackOverflow 上的第一个问题,如果我做错了,我深表歉意。

标签: pythonwhile-loopindentation

解决方案


看起来 current_scene.enter() 返回下一个场景名称,您需要在最后一个场景上调用 current_scene.enter() 来滚动学分。

while current_scene != last_scene:
        current_scene = self.scene_map.next_scene(current_scene.enter())

current_scene.enter()

如果没有额外的变量,也许逻辑是有意义的。尽管“额外变量”可能是必要的,因为scene_map.next_scene(...)可能不会像返回的那样返回下一个场景名称current_scene.enter()


推荐阅读