题目 1
先看全国卷 A 的 10 道题目。
这个题目来自 Raymond Hettinger 的 Tweet 。
答案是 B. 因为- 1
(中间有空格) 其实就是-1
,也就是说可以这么表示score -= (-1)
。
题目 2
送分题,答案是 A,也就是抛 SyntaxError 错误,因为海象操作符需要使用括号不能直接用,因为需要和普通的赋值区分开来。
题目 3
题目来源:https://github.com/satwikkansal/wtfpython#-deleting-a-list-item-while-iterating
这个题目主要是考验对迭代的理解。在循环时先迭代了第一个元素 1 (索引 0) 然后 remove 删除这个元素,剩下了三个元素 2,3,4,但是注意,这里 2 的索引是 0,3 的索引是 1。下一次迭代应该是索引 1,就是迭代并删掉 3,把 2 给略过了,接着会把 4 略过。略过的就会留下,所以结果是[2, 4]
。
题目 4
送分题,答案是 D,因为min
是自带的函数,如果把它替换成其他的对象就不能正常运行了,那么就会抛错 TypeError。
题目 5
题目来源:https://github.com/satwikkansal/wtfpython#-be-careful-with-chained-operations
答案是 A,这个特别反直觉对吧。但要注意比较方式是按顺序把相邻的 2 个分别比较, 官网这么说 :
if a, b, c, …, y, z are expressions and op1, op2, …, opN are comparison operators, then a op1 b op2 c ... y opN z is equivalent to a op1 b and b op2 c and ... y opN z, except that each expression is evaluated at most once.
所以False == False in [False]
的意思是(False == False) and (False in [False])
,所以结果是 True。
题目 6
送分题,答案是 A,因为 bool 值也是一种数字 (True 为 1,False 为 0):
In : isinstance(True, int)
Out: True
In : 'haha' * True
Out: 'haha'
In : 'haha' * False
Out: ''
题目 7
答案是 B。这道题我就是想让大家知道判断可以直接在 print 里面写,而不需要这样:
In : a = 100
In : result = a if a > 100 else 1
In : print(result)
1
题目 8
送分题,答案是 D,知识点是列表解包 (Unpacking)。
题目 9
题目来源:https://github.com/satwikkansal/wtfpython#-hash-brownies
答案是 C. 在 Python 的字典中,它不关心键的类型,只要它们的值一样那么就是同一个键值对,后面的赋值会替换前面的值:
In : 1 == 1.0
Out: True
题目 10
答案是 A,来源找不到了,我之前还专门写过一篇文章讲这个 一段迷惑的使用海象操作符的代码
题目 11
再看全国卷 B 的 10 道题目。
这个不了解的比较难,答案是 A。这是 Python freeze 自动创建的模块,除此之外还有__phello__
:
In : import __hello__
Hello world!
In : import __phello__
Hello world!
In :