在浏览codegolf时,我找到了this:
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
我不明白[]在打印后的含义是什么... ...有任何澄清吗?
答案 0 :(得分:5)
>>> print("Approved","Summer School","Failed")[0]
Approved
>>> print("Approved","Summer School","Failed")[1]
Summer School
>>> print("Approved","Summer School","Failed")[2]
Failed
看模式?它只是简单的索引。
顺便说一下,我们始终知道(g<7)+(g<3)
将是>= 0
(False + False
)和<= 2
(True + True
)。
回想一下,bool
是int
的子类,而True == 1
和False == 0
(这就是我们可以添加bool
的原因以上)。
最后,不言而喻,通过一组额外的括号可以很容易地避免这种混淆:
print(("Approved","Summer School","Failed")[(g<7)+(g<3)])
答案 1 :(得分:2)
这只是元组索引。与此无异:
x = (1, 2, 3)[1]
将2
分配给x
。
在更复杂的变体中,选择元组的元素,然后传递给print
。
令人困惑的是,代码看起来像是在调用名为print
的函数。通过将print
转换为函数,Python 3中删除了这种混淆。你的问题中的代码在Python 3中完全不同。
答案 2 :(得分:0)
print(x,y,...)[i]
应解析为print (x,y)[i]
。它只是打印后跟tuple
。