【问题标题】:Exercise 41: Learning To Speak Object Oriented练习 41:学习说面向对象
【发布时间】:2014-01-25 07:12:39
【问题描述】:

我正在练习 41,老实说,我非常困惑。我不知道是不是因为我看了这该死的东西好几个小时了,是不是我的大脑被炸了,还是什么?

我在前面的章节中已经阅读了以下内容,但由于某种原因,这不是英文翻译给我的。

PHRASE_FIRST = False 
if len(sys.argv) == 2 and sys.argv[1] == "english":
    PHRASE_FIRST = True

我认为它的意思是如果“phrase_first”为假,请阅读列表,如果“phrase_first”为真,则阅读英文列表?我不知道?我认为这是真正让我在这里搞砸的中间路线。

我需要一个英语分解才能让我回到正轨。

【问题讨论】:

  • 我可以建议编辑你的标题以包含 what 你正在做的练习 41?比如来自什么书/课?它可能会帮助未来的访问者找到此页面

标签: python


【解决方案1】:

不,代码将PHRASE_FIRST 设置为False

然后测试sys.argv list;如果该列表中有 2 个值,并且第二个值等于字符串"english",则PHRASE_FIRST 被反弹到True

sys.argv 是命令行参数列表; sys.argv[0] 是脚本的名称,该列表中的任何额外元素都是在命令行中传入的字符串:

python script.py foo bar

变成

['script.py', 'foo', 'bar']

sys.argv。在这种情况下,如果您使用以下命令运行脚本:

python script.py english

然后将PHRASE_FIRST 设置为True,否则保持False

【讨论】:

  • 谢谢!大哭一场,我看代码太久了。
  • 该死,你打字快 :) 出于好奇,你为什么说“反弹”而不是“定”?
  • @GreenAsJade:因为这就是 Python 中名称的情况。它们绑定到一个值(始终是一个对象)。 False 是一个对象,True 是另一个对象。这也意味着名称不再绑定到以前的值(这对引用计数有影响)。
  • 这个网站真的很棒。
【解决方案2】:

它所做的是将变量PHRASE_FIRST 设置为False,或者在某种情况下设置为True。第一部分很简单:

PHRASE_FIRST = False 

第二部分将PHRASE_FIRST 重置为真如果

len(sys.argv) == 2 and sys.argv[1] == "english"

sys.argv是命令行参数,以程序名开头,即exercise_41.py english变成['exercise_41.py', 'english']表示第二个参数(sys.argv[1])必须是“英文”

如果没有len 检查,第二部分会出错,超出范围。这是len 的唯一原因。如果这两个都是真的,

    PHRASE_FIRST = True

从技术上讲,所有三行都可以更直接地重写为:

PHRASE_FIRST = len(sys.argv) == 2 and sys.argv[1] == "english"

但这对初学者来说有点难读

【讨论】:

  • 谢谢!感谢您花时间回答这个问题。 :)
  • 我认为说“你必须向程序传递两个参数”可能会使术语混淆。事实上,你必须通过一个。程序名称是 sys.argv 的第一个元素,但我不会认为它是程序的参数。 “diff 需要多少个参数?”
  • @user3183818 ...感谢您努力回答的公认方式是投票。
  • ...感谢最有帮助的答案(回答了您的问题)的公认方式是接受它(绿色勾号)。我注意到您尚未接受您提出的上一个问题的答案...
  • @GreenAsJade,谢谢你的好点。编辑为更具教育性和明确性
猜你喜欢
  • 1970-01-01
  • 2014-02-18
  • 2015-04-16
  • 2011-01-30
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 2013-04-06
相关资源
最近更新 更多