艰难地学习 Python,练习 41 头痛

Posted

技术标签:

【中文标题】艰难地学习 Python,练习 41 头痛【英文标题】:Learning Python the Hard Way, Exercise 41 headache 【发布时间】:2012-03-01 14:07:10 【问题描述】:

我正在尝试在 Learning Python the Hard Way 的帮助下学习 Python。 我已经完成了练习 41(来自 Planet Percal #25 的 Gothons),您可以查看完整代码 >here<

在最后一个函数 runner() 之前我什么都懂

def runner(map, start)
    next = start

    while True:
        room = map[next]
        print "\n--------"
        next = room()

runner(ROOMS, 'central_corridor')

据我所知,next 被赋予 start 的值,是第一个要运行的函数的键。启动 while 循环,将该键处的功能分配给 room。 然后该函数打印出一行破折号,然后将函数调用的返回值分配给变量next

我不明白为什么用户“看到”了被调用的函数。在我看来,函数调用似乎只是分配给了一个变量next。我希望像 next()room() 这样的东西是下一行。其次,我不明白为什么while循环会停止,它不应该一直持续到错误或退出吗?

对于大多数人来说,这些问题可能看起来很愚蠢,但我是编程游戏的新手,我不明白本网站其他地方对此问题的答案。

希望有人能低调到我的水平,给我解释一下……

【问题讨论】:

似乎与使用this search 找到的一些问题重复。这些问题的答案应该会对您有所帮助。 Learn Python the Hard Way, Exercise 41的可能重复 【参考方案1】:

用户看到被调用的函数,因为该函数打印了一些东西。

函数实际上正在被调用(使用“room()”)并且调用的结果设置为下一个。 例如。如果房间是“the_bridge”,则打印一些东西,然后返回“death”、“escape_pod”或“the_bridge”。

虽然“while True:”确实是一个无限循环,但 Python 有办法完全退出程序。

调用 "exit(0)" 会立即退出整个程序,然后不再询问任何问题。

【讨论】:

谢谢,我想我现在明白了,我只需要考虑这样一个事实,即即使将返回值分配给变量,函数调用仍会写入屏幕。这回答了我的两个问题。【参考方案2】:

我不确定你有多少问题,但我会澄清两点:

(1) next = room() 有效,因为 map 是 dict,其值是函数,因此 room = map[next]map 检索函数,并将该函数存储在变量 room 中。表达式room() 调用该函数。

(2) 查看代码,似乎只有在程序退出或抛出异常(如果有)时才会退出循环。

【讨论】:

【参考方案3】:

Gothon 甚至不是 Ex 41。 (也许是以前,写这篇文章的时候?现在是 Ex 43。) 无论如何,这令人困惑。 我以为我终于找到了与前 41 相关的东西,然后我来这里看看这个......

【讨论】:

以上是关于艰难地学习 Python,练习 41 头痛的主要内容,如果未能解决你的问题,请参考以下文章

理解 Python 中的逻辑(Learn Python the Hard Way 练习 27)

学习Python艰难的方式Ex40

何时使用三重单引号而不是三重双引号

day41 mysql 学习 练习题重要

如何系统地学习Python 中 matplotlib,numpy,scipy,pandas

分享《Python学习手册(第4版)》高清中文PDF+高清英文PDF+源代码+《算法图解》PDF代码