晴れたら洗濯しよう、寒かったら上着を着よう。こんなふうに日常には何かの条件をもとに判断することがたくさんありますね。これはプログラミングの世界でも同じことです。むしろ、プログラミングではこの条件によって処理を分けるということがたくさんあり、それらがとても重要になってきます。ということで、今回は条件分岐をみていきましょう。
条件?分岐?
これまでみてきたプログラムは、書いたものを上から順番に実行していくものでした。これを逐次処理とか順次処理などと言ったりします。
これに対して、条件分岐とは、その言葉のとおり「条件」によって処理を「分岐」させようというものです。
図 逐次処理(左)と条件分岐(右)
条件とは
さてここで条件とは何でしょうか。
少しややこしい言い方をすると、成り立つ(真、しん、True)、または成り立たない(偽、ぎ、False)のいずれかの値をとる式です。
いくつか例を挙げてみましょう。
a == 1
b != 1
c * d > 6
e + 1 <= f
g == "hello"
例 いろいろな条件式
1つめの条件は、「変数aが数値の1と等しい」という条件です。
両辺が等しいかどうかを比較する時、数学では等号「=」を使いますが、プログラミングでは等号を2つ並べた記号「==」を使います。以前にも少し触れましたが、等号1つの「=」は代入を意味するのでしたね。ここでは、変数aに1が入っていれば真(True)になります。
そして2つめは、「変数bが数値の1と等しくない」という条件です。
数学で言うところの「≠」ですね。プログラミングの世界では、昔から「!」を否定の意味で使うことがあったため、等号「=」を「!」で否定することで、等しくないの意味になったのかもしれません。
ここでは、変数bに1が入っていると偽(False)になります。
ここでは、変数bに1が入っていると偽(False)になります。
3つめは、「変数cとdの積が数値の6よりも大きい」という条件です。
これは数学と同じ記号ですね。両辺が等しい場合には偽(False)となることにも注意が必要です。
例えば、c=2、d=4であれば真となりますが、c=3、d=2の場合には偽となります。
例えば、c=2、d=4であれば真となりますが、c=3、d=2の場合には偽となります。
4つめは、「変数eに1を足した値が変数fと等しい、または、小さい」という条件です。
数学における「≦」ですね。プログラミングでは「≦」という記号を書くことが出来ないので、「<=」や「>=」というように、不等号と等号を並べて書くのです。
5つめは、等しいという条件の例ですが、比較の対象が数値ではなく文字列です。
この場合、変数gが文字列 “hello” の場合に限って真(True)になります。
文字列の場合は完全に同じ文字列であるかを判断するため、文字列の長さはもちろん、大文字と小文字の違いまで厳密に比較されます。変数gが “Hello”, “HELLO”, “hello!” であったりすると、偽(False)になってしまいます。
文字列の場合は完全に同じ文字列であるかを判断するため、文字列の長さはもちろん、大文字と小文字の違いまで厳密に比較されます。変数gが “Hello”, “HELLO”, “hello!” であったりすると、偽(False)になってしまいます。
さて、ここでいくつか例題をやってみましょう。
条件式を評価して、真と偽のいずれになるかを表示するプログラムです。実行する前に、どんな結果になるかを想像してみましょう。
条件式を評価して、真と偽のいずれになるかを表示するプログラムです。実行する前に、どんな結果になるかを想像してみましょう。
a=1
print("Q.1", a==1)
a=1
print("Q.2", a!=2)
a=3
b=4
print("Q.3", a*b<12)
a=1
b=2
print("Q.4", a+b>=3)
a="thank you"
print("Q.5", a=="Thank you")
a="Hi!"
print("Q.6", a!="Hi")
a="2"
print("Q.7", a*2==4)
リスト 条件式の例題
さて、どうだったでしょうか。
最後のQ7は引っかけだったかな?
文字列と数値の違いは見落としがちなので、気をつけるとよいでしょう。
条件式はこれらの他にももっといろいろな書き方や、キーワードもあります。
それらは追々みていくことにしましょう。
分岐
さて、条件式について一通りみてきたところで、いよいよ分岐です。pythonでは条件分岐には if を使います。英語では「もしも」ですね。
図 条件分岐(if文)の書式
まず先頭に条件分岐のキーワードとなる「if」を書きます。その後にスペースを空けて条件式を書き、「:」で改行します。
次に条件が真になった場合に限って実行される処理を書きますが、このとき、行の先頭には一定数の空白をつけることになっています。この空白はインデントと呼ばれ、一般的には空白4文字単位とされることが多いです。このインデントされた部分が、分岐の対象になるかどうかの判断基準となるため、とっても重要です。
ちなみに、他のプログラム言語ではインデントによる区別ではなく、カッコで括ったり、専用のキーワードで区別したりなどしており、それぞれのプログラミング言語の特徴の1つとなっています。
それではプログラムです。
一辺の長さが整数 x である正方形があったときに、その面積が50よりも大きかったらメッセージを表示するプログラムを作りましょう。
一辺の長さが整数 x である正方形があったときに、その面積が50よりも大きかったらメッセージを表示するプログラムを作りましょう。
x = 1
if x * x > 50:
print("一辺が", x, "の正方形の面積は50よりも大きいです。")
リスト 正方形の面積を判定するプログラム
これを x=1 のまま実行すると、当然ながら面積は50より小さいので何も表示されません。xの値を変えてみて、期待通りの動きをするか確認してみましょう。x=8以上でメッセージが表示されたでしょうか。
条件が成立しないときには別の処理をさせたい
さて、このプログラムでは x が8より小さい時には何もメッセージが表示されません。これだとちょっと不親切ですよね。そこで、条件が成立しない場合にも、何らかの処理をさせるようにしましょう。そのためには、else というキーワードを使います。
図 条件分岐(if else)の書式
このelseを使って先ほどのプログラムを改造してみましょう。
x = 1
if x * x > 50:
print("一辺が", x, "の正方形の面積は50よりも大きいです。")
else:
print("一辺が", x, "の正方形の面積は50よりも大きくないです。")
リスト 正方形の面積を判定するプログラム(改造版)
さて、意図したとおりになったでしょうか。xの値をいろいろ変えて試してみましょう。
図 paiza.ioで実行してみた様子
最後に、xの値を入力できるようにしてみましょう。いちいちプログラムの値を書き換えて実行するのも面倒ですからね(笑)
x = int(input("正方形の一辺の長さを整数で入力してください"))
if x * x > 50:
print("一辺が", x, "の正方形の面積は50よりも大きいです。")
else:
print("一辺が", x, "の正方形の面積は50よりも大きくないです。")
リスト 正方形の面積を判定するプログラム(さらに改造版)
まとめ
- 条件とは、真または偽の値をとる式
- 等号や不等号などで表現されるが、それ以外にもいろいろな条件式がある
- ifを用いることにより、条件が成立した場合に限って処理を実行させることが出来る
- if elseを用いることにより、条件が成立しない場合には別の処理を実行することも出来る
コメント