はじめに
Pythonの知見が浅い自分が,X(旧Twitter)を見ていてへぇ~となったQuizを取り上げます.初学者向けです.
問題
Quiz1
>>> a = ~4
>>> b = a + 4
>>> print(b)
Output:
1. -1
2. 1
3. 2
4. -2
Quiz2
x = [1, 3, 8, 6, 8, 9]
y = set([1, 4, 7, 9, 7, 4])
print(len(x) + len(y))
Output:
1. 9
2. 12
3. 8
4. 10
Quiz3
print(0.1 + 0.2 == 0.3)
Output:
1. True
2. False
3. Machine dependent
4. Error
解説
簡単に解説していきます.
Quiz1
Answer -> -1
L1の~
演算子はビット反転を意味します.
Python3では~
演算子で反転する際に,オペランドが正数だと値の先頭が無限個の符号ビット「0」で埋めたもの(...00000100)とみなされるので,反転した結果の値の先頭はそれが全て反転された無限個の符号ビット「1」で埋めたもの(...11111011)とみなされます.
演算結果は符号ビットが「1」の負数-5として出力されます.
詳細はこちら -> Python3での2の補数と~演算子(ビット反転)
今回のケースでは,4(0100)のビット反転なので1011となり,これは10進数で-5となります.
Quiz2
Answer -> 10
len関数はオブジェクトの長さや要素数を取得します.
set関数はリストと同様に複数の要素から構成されます.リストと異なる点は"要素の重複"がなく,"要素の順番がない"ことです.
今回のケースでは,yは以下のようになります.
>>> y = set([1, 4, 7, 9, 7, 4])
>>> print(y)
{1, 4, 9, 7}
Quiz3
Answer -> False
浮動小数点数0.3の値は,必ずしも正確な0.3とは限らず,0.323や0.3426などになる可能性があり,0.3(0.1 + 0.2)とは等価ではありません.