問題解説)格言「In the face of ambiguity, refuse the temptation to guess.」に準拠していないコードを、次の選択肢の中から選びなさい。

当コラムでは、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 検定試験 で実際に試験を受けてみましょう。

https://docs.google.com/spreadsheets/d/1SEnNycCEWbMffOlBQAOomhnD128gqz1E8E7iooN6-bY/edit

PAGE TOP