文法のきほん

INPUT · スライド

字下げのきまり

01 / 06

行の先頭の空白は飾りではない

多くの言語では、行の先頭に空白をいくつ入れても動きは変わらない。見やすさのための飾りにすぎないんだ。

Pythonはちがう。行の先頭の空白は文法そのもので、勝手に入れるとエラーになるし、必要なところで入れないとやはりエラーになる。

この空白のことをインデント(字下げ)と呼ぶよ。

02 / 06

入れてはいけないところに入れる

まずはエラーを見てみよう。2行目の頭に空白が1つ入っているだけで、Pythonは止まってしまう。

IndentationError: unexpected indent は「予期しない字下げがある」という意味。「ここは下げる場所じゃないよ」と言われているんだ。

print("あさ") print("ひる")

実行結果

IndentationError: unexpected indent

03 / 06

なぜ空白に意味を持たせたのか

多くの言語は、まとまり(ブロック)を波かっこ { } で囲んで表す。Pythonはそれをやめて、字下げの深さでまとまりを表すことにした。

理由はシンプルで、読みやすいコードは、どうせ字下げして書かれているから。だったら字下げ自体をルールにしてしまえば、記号を書く手間が減るし、書きかたのばらつきも消える。

つまりPythonの字下げは、「見やすく書きなさい」を文法で強制しているんだよ。

04 / 06

まとまりは「コロン+字下げ」

まとまりを作るときの形は決まっているよ。行の終わりを : (コロン)で閉じて、次の行から字下げする

下の形は次のレッスンで習う if だけど、いまは形だけ見ておこう。: の次の行が右にずれているのが分かるかな。字下げされている行が「まとまりの中身」だよ。

ten = 80if ten > 60:    print("ごうかく")

実行結果

ごうかく

05 / 06

字下げはスペース4つ

字下げの幅は「1つ以上の空白」であれば動くけれど、スペース4つにそろえるのがPythonの慣習だよ。

同じまとまりの中では幅をそろえるのが絶対条件。1行目が4つで2行目が2つだと IndentationError: unindent does not match any outer indentation level になる。「その下げ幅に合うまとまりが無い」という意味だよ。

ten = 80if ten > 60:    print("ごうかく")  print("おめでとう")

実行結果

IndentationError: unindent does not match any outer indentation level

06 / 06

タブとスペースを混ぜない

タブ文字でも字下げはできるけれど、スペースと混ぜると TabError になる。見た目が同じ幅でも中身が別の文字だから、Pythonには区別がつくんだ。

この教材のエディタはタブを押すとスペースが入るようになっているので、気にしなくて大丈夫。自分の環境で書くときは「スペースだけ」に決めておこう

スマホで書くときのコツをひとつ。うまくいかないときは、まず行の先頭を疑う。目に見えない空白が入っていることが本当に多いよ。