当コラムでは、PythonZen & PEP 8 検定試験(こちらでオンライン受験できます)で出題されている問題の解説を行なっています。当コラムシリーズを読んで自信がついたら、ぜひ試験に挑戦してみてくださいね。
今回のコラムで解説する試験問題はこちらです。
問題
格言「In the face of ambiguity, refuse the temptation to guess.」に準拠していないコードを、次の選択肢の中から選びなさい。
a = True
b = True
if not a and b:
print('Hello World')
else:
print('Bye World')
a = True
b = True
if a and not b:
print('Hello World')
else:
print('Bye World')
a = True
b = True
if (not a) and b:
print('Hello World')
else:
print('Bye World')
a = True
b = True
if not (a and b):
print('Hello World')
else:
print('Bye World')
解答のヒント
この格言を和訳すると、「曖昧なコードに直面したら、推測したくなる気持ちを抑えること」となります。つまり、曖昧なコードを見て適当に推測してはいけないし、読み手に推測させてしまうような曖昧なコードを書いてもいけないということです。
a = True
b = True
if not a and b:
print('Hello World')
else:
print('Bye World')
1つ目の選択肢では、not a and b
という表現をしていますが、この部分が曖昧です。Pythonの文法に従えば (not a) and b
と解釈されますが、このコードを書いた人の意図がほんとうに (not a) and b
だったのか、あるいは not (a and b)
のつもりだったのかの判断がつきにくいコードになっているからです。
a = True
b = True
if a and not b:
print('Hello World')
else:
print('Bye World')
2つ目の選択肢は、演算子の使い方が明確で、曖昧さはありません。a and not b
はPythonも人間も (a) and (not b)
と一意に解釈できます。
a = True
b = True
if (not a) and b:
print('Hello World')
else:
print('Bye World')
3つ目の選択肢は、演算子の使い方が明確で、曖昧さはありません。(not a) and b
はPythonも人間も (not a) and (b)
と一意に解釈できます。
a = True
b = True
if not (a and b):
print('Hello World')
else:
print('Bye World')
4つ目の選択肢は、演算子の使い方が明確で、曖昧さはありません。not (a and b)
はPythonも人間も not (a and b)
と解釈一意にできます。
Zen of Pythonは、Python言語の設計哲学を端的に表現しており、Pythonのコミュニティでは広く受け入れられています。これらの格言は、Pythonのコードを書く際の指針となっています。
正解について
ここまで正解のヒントをご紹介しましたが、いかがでしょうか? この問題はPythonZen & PEP 8 検定試験で出題されています。
自信がついたら、PythonZen & PEP 8 検定試験 で実際に試験を受けてみましょう。