Pythonのインデントは文法的な意味があるので要注意

Python
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村 IT技術ブログ プログラム・プログラマーへ

どうも、JUNICHIです。

Pythonはカンタン、と思ってたんですが、意外な落とし穴が。

それは、インデント。

つまり、Tabキーを使って文頭をずらしたり、揃えたりすること。

これが、意外とメンドイ。

たとえば、今日のプロゲートの演習でなかなかクリアできない問題があって。

numbers = [765, 921, 777, 256]
for number in numbers:
__print(number)
__# 変数 number が 777 のとき「 777が見つかったので処理を終了します 」と出力した後、処理を終了させてください
__if number == 777:
__print(‘777が見つかったので処理を終了します’)
__break

これ、エラーが出ちゃうんだけど、どこが間違ってるか?(アンダーラインはスペースとして)
っていうと、インデントがちゃんとできてない。

正解は、こう。↓

numbers = [765, 921, 777, 256]
for number in numbers:
__print(number)
__# 変数 number が 777 のとき「 777が見つかったので処理を終了します 」と出力した後、処理を終了させてください
__if number == 777:
____print(‘777が見つかったので処理を終了します’)
____break

分かりやすく黄色マーカーで色を付けたけど、
正解は、if文の下の行のアタマが下げて揃ってる。

これね、けっこう厄介かも。

それで、Pythonのインデントのルールを調べてみたんだけど、他のプログラミング言語に慣れてるプログラマーやエンジニアでも、やっぱりPythonのインデントはちょっと独特なので、書きずらいみたい。

他の言語だと「{}(中カッコ)」などでブロックを表現することが多いけど、Pythonではインデントをそろえた部分がブロックと見なされるから。

とはいえ、他のプログラミング言語でもインデントを揃えて整形するのは当たり前なので、要は慣れの問題なのかも。

Pythonのインデントが独特なのは、インデントが単なる見やすさのためじゃなく、文法的な意味を持っているから。

たとえば、単純な以下のコード。

x = 2
y = 3
if x > y:
__print(‘true’)
else:
__print(‘false’)

↑これは正しいけど、↓こうなるとエラーになる。

x = 2
y = 3
if x > y:
print(‘true’) #インデントされてない
else:
print(‘false’) #インデントされてない

こんな風に、インデントがけっこう重要なので、ちゃんとインデントの意味を理解しておかないと、何でエラーになるかが分からなくなる。

上のコードの場合、if x > y: と、else:ヘッダになる。

そして、print(‘turue’) と、print(‘false’) が、ネストしたステートメントブロックになる。(ネストっていうのは、入れ子のこと。)

ヘッダの行は必ず「コロン(:)」が入る。

ステートメントブロックはインデントで下げて揃える。

っていうルールが、Pythonにはあることを、今日は勉強した。

いやぁ、一歩ずつ、進んでるなぁ。

ではまた!

コメント

タイトルとURLをコピーしました