3

在浏览 codegolf 时,我发现了这个

g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]

我不明白 print() 之后的 [] 是什么意思……有什么说明吗?

4

3 回答 3

6
>>> 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)。

回想一下,thatboolint, 和 thatTrue == 1的子类False == 0(这就是我们可以添加bools 的原因,就像上面所做的那样)。

最后,不用说,这种混淆可以很容易地通过一组额外的括号来避免:

print(("Approved","Summer School","Failed")[(g<7)+(g<3)])
于 2013-07-11T12:59:12.717 回答
2

这只是元组索引。与此没有什么不同:

x = (1, 2, 3)[1]

分配2x.

在您更复杂的变体中,选择元组的一个元素,然后将其传递给print.

令人困惑的是,代码使您看起来像是在调用一个名为print. 这种混乱在 Python 3 中通过print变成一个函数而被消除了。您问题中的代码在 Python 3 中的作用完全不同。

于 2013-07-11T12:59:18.483 回答
0

print(x,y,...)[i]应该被解析为print (x,y)[i]. 它只是打印后跟tuple.

于 2013-07-11T13:04:03.430 回答