当コラムでは、PythonZen & PEP 8 検定試験(こちらでオンライン受験できます)で出題されている問題の解説を行なっています。当コラムシリーズを読んで自信がついたら、ぜひ試験に挑戦してみてくださいね。
今回のコラムで解説する試験問題はこちらです。
問題
格言「There should be one– and preferably only one –obvious way to do it.」が示すように、Pythonは1つの目的に対して複数の手段を持たないように設計されている。混乱を避けるためにPythonに実装されていない演算子を選択肢の中から選びなさい。
>>
//
**
++
解答のヒント
「There should be one– and preferably only one –obvious way to do it.」という格言は、プログラミングにおけるデクリメント演算子(--
) と、英文法のエムダッシュ(直前の文章を補強する —
記号のこと。日本語の丸括弧に近い。代わりに --
を使うこともある)を掛けた文章になっています。つまり、「There should be one — and preferably only one — obvious way to do it.」を和訳すると、「1つの目的に対して、1つの(できれば唯一の)明確な手段があるべきだ。」となりますが、上記の格言の中には実は one--
と --obvious
というプログラミングコードが隠れています。
Pythonにはこの文法はありませんが、one--
というコードは、一般的には、変数 one
を使った後に one -= 1
をします。 一方で --obvious
というコードは、変数 obvious -= 1
をした後に obvious
を使います。
以下はJavaScriptでのサンプルコードです。--
が変数の後ろに付くか前に付くかによって結果が変わってしまう点を理解していないと、バグになることがあります。
let one = 5;
console.log(one--); // 出力: 5
console.log(one); // 出力: 4
let obvious = 5;
console.log(--obvious); // 出力: 4
console.log(obvious); // 出力: 4
よって、Pythonでは混乱を避けるために、 -1
をする「デクリメント」の --
と、+1
をする「インクリメント」の ++
の演算子は実装されていません。
その他の演算子の意味は以下のとおりです。
1. >>
「右ビットシフト演算子」は、数字を小さくする方法の一つです。右ビットシフトとは、2進数で表された数字を右に動かすことを言います。これは、10進数の数字を10で割ると桁数が減るのと同じように、2進数の数字を2で割って桁数を減らすことになります。
例えば、21 >> 3
は以下のようになります。
21
の2進数は10101
10101
を3桁右に動かして10
- 2進数の
10
を10進数に戻すと2
- よって、
21 >> 3
は2
上記は「21を2で割って小数点以下を切り捨てる。これを3回繰り返す。」に等しいため、以下のようになります。
21 ÷ 2
で10
10 ÷ 2
で5
5 ÷ 2
で2
2. //
「整数除算演算子」は、割り算の結果の小数点以下を切り捨てる演算子です。例えば 5 // 2
は 2.5 の小数点以下を切り捨てて 2
になります。
3. **
「べき乗演算子」は、左のオペランドを右のオペランドでべき乗します。例えば、2 ** 3
は2の3乗なので 8
になります。
Zen of Pythonは、Python言語の設計哲学を端的に表現しており、Pythonのコミュニティでは広く受け入れられています。これらの格言は、Pythonのコードを書く際の指針となっています。
正解について
ここまで正解のヒントをご紹介しましたが、いかがでしょうか? この問題はPythonZen & PEP 8 検定試験で出題されています。
自信がついたら、PythonZen & PEP 8 検定試験 で実際に試験を受けてみましょう。