python - 虽然循环缩进弄乱了我的变量
问题描述
我对编程很陌生,我有一段代码可以以一种方式工作,但只能以其他两种方式半正确地工作。我只是想了解为什么。这是来自我正在关注的文字游戏:
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 上的第一个问题,如果我做错了,我深表歉意。
解决方案
看起来 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()
。
推荐阅读
- objective-c - Sprite Kit 中跨设备的缩放点
- python - 在python中相交二元三元组
- powershell - 使用基于数据类型的获取内容
- c - 为什么我的链表插入函数在使用 scanf 输入字符串时会出现分段错误?
- python - 如何使用python和pandas将多列组合成一个长列
- c# - C# 中的 gRPC 客户端不适用于支持 mTLS 的 Go 中的 gRPC 服务器
- angular - 为什么一个角容器需要一个暴露的端口来连接?
- android - 如何检查切换按钮是否打开并在它们打开但不是同时执行操作?
- python - 如果有副作用返回,有没有办法让 unittest.mock 引发异常?
- python - 从 RS232 串行端口编码/解码数据