Python 练习41:学习讲面向对象

Python 练习41:学习讲面向对象,python,Python,我正在练习41,说实话,我非常困惑。我不知道是不是因为我盯着那该死的东西看了好几个小时,是不是我的大脑被炸了,还是什么 在前面的章节中,我已经看过了下面的内容,但由于某些原因,这不是我的英语翻译 PHRASE_FIRST = False if len(sys.argv) == 2 and sys.argv[1] == "english": PHRASE_FIRST = True 我认为它的意思是,如果“短语优先”为假,请阅读列表,如果“短语优先”为真,请阅读英语列表?我不知道?我想是

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

在前面的章节中,我已经看过了下面的内容,但由于某些原因,这不是我的英语翻译

PHRASE_FIRST = False 
if len(sys.argv) == 2 and sys.argv[1] == "english":
    PHRASE_FIRST = True
我认为它的意思是,如果“短语优先”为假,请阅读列表,如果“短语优先”为真,请阅读英语列表?我不知道?我想是中间路线把我搞砸了


我需要一个英语故障,让我回到正轨

否,代码将
短语_FIRST
设置为
False

然后对该模型进行测试;如果该列表中有2个值,且第二个值等于字符串
“english”
,则
短语_FIRST
会反弹到
True

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

python script.py foo bar
变成

['script.py', 'foo', 'bar']
sys.argv
中。在这种情况下,如果使用以下命令运行脚本:

python script.py english

然后将
PHRASE\u FIRST
设置为
True
,否则将保持
False

它所做的是将变量
PHRASE\u FIRST
设置为
False
,或者在特定情况下设置为
True
。第一部分很简单:

PHRASE_FIRST = False 
如果出现以下情况,则第二部分首先将短语重置为真:

sys.argv
是命令行参数,以程序名称开头,即
exercise\u 41.py english
变成
['exercise\u 41.py',english']
并且所述第二个参数(
sys.argv[1])
必须是“english”

如果不进行
len
检查,则第二部分的错误将超出范围。这是使用
len
的唯一原因。如果这两个都是真的

    PHRASE_FIRST = True
从技术上讲,这三行可以更直接地改写为:

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

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

谢谢!大声喊道,我已经看代码太久了。该死,你打字太快了:)出于好奇,你为什么说“反弹”而不仅仅是“设置”?@GreenAsJade:因为Python中的名称就是这样的。它们被绑定到一个值(始终是一个对象)
False
是一个对象,
True
是另一个对象。这也意味着名称不再绑定到以前的值(这对引用计数有影响)。这个网站非常棒。谢谢!感谢您抽出时间回答此问题。:)我认为说“您必须向程序传递两个参数”可能会使术语混淆。事实上,你必须通过一个考试。程序名是sys.argv的第一个元素,但我不认为它是程序的参数。“diff接受多少个参数?”@user3183818。。。感谢他人努力回答问题的公认方式是向上投票。。。。对最有帮助的答案(回答了你的问题)表示感谢的公认方式是接受它(绿色勾号)。我注意到你还没有接受你之前问的问题的答案…@GreenAsJade,谢谢你的好意。编辑得更具教育性和明确性我建议编辑你的标题,包括你正在做的练习41?比如从哪本书/哪节课?它可能会帮助未来的访问者找到此页面
PHRASE_FIRST = len(sys.argv) == 2 and sys.argv[1] == "english"