虽然循环缩进弄乱了我的变量

时间:2018-11-08 23:28:28

标签: python while-loop indentation

我对编程非常陌生,我有一段代码可以以一种方式工作,但是只能以另外两种方式半正确地工作。我只是想了解原因。 这是我正在关注的文字游戏:

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的第一个问题,如果操作不正确,我深表歉意。

1 个答案:

答案 0 :(得分:1)

看起来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()那样返回下一个场景名称。