Pythonの勉強するよ【フロー制御編④】
どもども。前回の記事を見てくれた方、ありがとうございます。
前回はブール演算子と比較演算子の組み合わせや、条件式について勉強しました。
【前回の復習】
・比較演算子とブール演算子は組み合わせて使用することができる。
・Pythonのコードでは、1行以上のまとまりをブロックとしてひとまとまりにすることができる。
・ブロックの区間は、字下げ(インデント)で指定する。
それでは今回は、if文について勉強していきます。
いよいよプログラミングっぽさが増してきます。
2.6 プログラミング実行
Pythonのプログラムは、基本的に先頭から順番に命令を実行していきます。プログラム実行(あるいは単に実行)とは、実行している現在の命令の意味です。
name = 'Alice'
print('Hello ' + name)
print('How are you?')
例えば、上のコードを先頭から1行ずつ指でなぞっていってみてください。
このときの指をプログラムの実行とみなすことができます。
しかし、プログラムは上のコードのように単純に進むとは限りません。
フロー制御文を持つプログラムを指でなぞっていくと、条件式に従ってソースコードをあちこち飛ぶことになります。
2.7 フロー制御文
それではいよいよフロー制御の重要な構成要素を説明していきます。
2.7.1 if文
もっともよく使うフロー制御文はif文です。
if文のブロックは、条件式がTrueの場合に実行されます。
if文の書き方は次のようになります。
if 条件式 :
コードのブロック
実際のコードは、次のようになります。
num = 10
if num == 10:
print('num is 10')
今回のコードの条件式は、num == 10です。numは10なので、num == 10の条件式はTrueになります。
そのためif文のブロックであるprint('num is 10')が実行されます。
それでは、次のようなコードではどうでしょうか?
num = 11
if num == 10:
print('num is 10')
今度はnumは11なので、num == 10の条件式はFalseになります。
そのためif文のブロックであるprint('num is 10')は実行されません。
【Point】
・if文の書き方
if 条件式 :
コードのブロック
・if文のブロックは、条件式がTrueの場合に実行される。
2.7.2 else文
次に説明するのは、else文です。else文は必ずif文とセットで使われ、else単体で使うことはできません。
else文のブロックは、if文、elif文の条件式がすべてFalseの場合に実行されます。
else文の書き方は次のようになります。
else:
コードのブロック
実際のコードは次のようになります。
name = 'Alice'
if name == 'Bob':
print('Hello, Bob')
else:
print('Hello')
上の例の場合、if文の条件式がFalseのため、else文のブロックが実行されます。そのため、print('Hello')が実行されます。もしnameに'Bob'が設定されている場合は、if文の条件式がTrueになるため、print('Hello, Bob')が実行されます。そのあとのelse文のブロックは実行されませんので注意しましょう。
また、最初に書いたように、else文は単体で使用することはできません。
elseのみしようとすると、Errorになります。
else:
SyntaxError: invalid syntax
【Point】
・else文の書き方
else:
コードのブロック
・else文のブロックは、if文、elif文の条件式がすべてFalseの場合に実行される。
・else文は単体で使用できず、使おうとするとSyntaxErrorが発生する。
2.7.3 elif文
最後はelif文です。elif文はelse文同様、if文とセットで使われます。
elif文のブロックは、if文の条件式がFalseかつelif文の条件式がTrueの場合に実行されます。
elif文の書き方は次のようになります。
elif 条件式:
コードのブロック
実際のコードは次のようになります。
num = 10
if num == 1:
print('num is 1')
elif num == 10:
print('num is 10')
else:
print('num is ???')
上の例の場合、if文の条件式がFalseで、elif文の条件式がTrueのため、elif文のブロックである、print('num is 10')が実行されます。
また、elif文は複数設定することができます。
age = 2001
name = 'Ann'
if name == 'Alice':
print('Hello, Alice')
elif age < 12:
print("You're not Alice")
elif age > 2000:
print("Are you vampire?")
elif age > 100:
print('Hello, grandmother')
上のコードの場合、elif age > 2000:のブロック文が実行されます。
さて、elif文を複数設定する場合には注意があります。それは上から順番に判定をされ、条件式がTrueになったら、そのあとの判定は行われないということです。次のコードを見てみましょう。
age = 2001
name = 'Ann'
if name == 'Alice':
print('Hello, Alice')
elif age < 12:
print("You're not Alice")
elif age > 100:
print('Hello, grandmother')
elif age > 2000:
print("Are you vampire?")
先ほどのコードを少し変えてみました。さて、このコードでageが2001の場合を見てみましょう。先ほどはelif age > 2000:のブロック文が実行されていましたが、今回のコードの場合、先にelif age > 100:の条件式がTrueになるので、print('Hello, grandmother')が実行されます。そして、そのあとの判定は実行されないので、print("Are you vampire?")は実行されません。
このように、順番が入れ替わるだけでバグが発生することがあるので注意しましょう。
elif文はelse文同様、単体で使用できないません。使おうとするとErrorが発生します。
elif name == 10:
SyntaxError: invalid syntax
判定を上から順番に行う関係上、elif文はelse文の後に設定することはできません。使おうとすると、Errorが発生します。
if name == 'Alice':
print('Hello, Alice')
elif age < 12:
print("You're not Alice")
else:
print('TEST')
elif age > 20:
print("You're not Alice")
SyntaxError: invalid syntax
【Point】
・elif文の書き方
elif 条件式:
コードのブロック
・elif文のブロックは、if文の条件式がFalseかつelif文の条件式がTrueの場合に実行される
・elif文は複数使用することができる。
・複数設定した場合は、上から順番に判定され、条件式がTrueになったらそのあとの判定は行われない
・elif文は単体で使用できず、使おうとするとSyntaxErrorが発生する。
まとめ
というわけで、今回はif文、else文、elif文について勉強しました。
これらの文はフロー制御を行うことで非常に重要なので、しっかりと使えるようになりましょう。
それでは今回のまとめです。
【まとめ】
・if文は、条件式がTrueの場合にブロック文が実行される。
・elif文は、if文の条件式がFalseかつelif文の条件式がTrueの場合に実行される。
・else文は、if文、elif文の条件式がすべてFalseの場合に実行される。
・条件式の判定は上から順番に実行されるので、順番を間違うとバグが発生することがある。
次回は、while文とbreak文、continue文について勉強していきます。
ではでは。
P.S.
ねこがかわいいだけ展に行ってきました。
撮影NGだったので写真はありませんが、猫の写真のほかに切り絵や彫刻などもあって面白かったです。
猫好きの人は行ってみてはいかがでしょうか。