【问题标题】:Python: Understanding how 'return' works within a class (Learn Python Hard Way, exercise 43)Python:了解“return”如何在类中工作(Learn Python Hard Way,练习 43)
【发布时间】:2014-08-19 17:26:28
【问题描述】:

我一直在研究 Zed Shaw 的 Learn Python The Hard Way(仅供参考——Python 和一般编程的新手)。我一直很喜欢它,但被exercise 43 困惑了一个多星期。

前提是构建一个简单的文本输入风格游戏(如 Zork),您可以在其中向跑步者发出指令。以下是本练习代码的简化版本:http://pastebin.com/9YJ2PYDh

我了解如何使用此代码启动游戏:

a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()

我似乎无法理解后续场景是如何返回的。

每个类的enter方法返回的值,即在CentralCorridor中返回'laser_weapon_armory',是如何返回给Map类的?还是仅将其发送回 Engine 类的 play 方法?我没有看到 Scene 类的“return”中传递的值如何重新启动 Engine 类的 play 方法中的 while 循环。

我已经查看了this question 中提供的答案,但对我来说仍然没有意义。

感谢并为破坏任何术语而道歉。

【问题讨论】:

  • 魔法发生在Engine.play的While循环中,下一个场景由current_scene.enter()的结果决定,然后在返回之前将next_scene的值赋给current_scene再次回到循环的顶部。

标签: python


【解决方案1】:

Map 类中的 scenes dict 是理解这一点的关键部分。当我们查看有问题的 while 循环时,我们会看到

next_scene_name = current_scene.enter()

进入当前场景并获得它的名字。 next_scene_name 设置为您正在谈论的返回值。在获得下一个场景的名称后,它会进行查找

current_scene = self.scene_map.next_scene(next_scene_name)

进入Map.next_scene 方法。在里面我们有

val = Map.scenes.get(scene_name)
print "next_scene returns", val
return val

它在scenes 字典中进行查找,并为您返回下一个场景的对象。然后重复该过程。

【讨论】:

  • 啊,这打开了灯泡:“next_scene_name 设置为您正在谈论的返回值。”当 while 循环命中 next_scene_name = current_scene.enter() 时,循环基本上会停止,直到从 enter 方法返回某些内容,对吗?
  • @msarlo 你在问函数调用是如何工作的吗?我无法仅从上述问题来衡量您的编程技能程度。
  • 是的,但特别是它们在 while 循环中的工作方式。无论如何,我想通了。谢谢!
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多