23.IF文

前回の講義まではpythonの基本的なデータ型や
演算子の使い方などをお伝えしてきました。

次は制御文のお話です。

pythonでは条件分岐や繰り返しなど、
プログラムを制御するための文法が存在します。

まずは条件分岐にあたるif文の使い方を学習していきましょう。

IF文の書き方

条件に合致した時に処理を分ける場合:

if 条件 :
    処理

条件に合致した場合とそれ以外の2分岐処理の場合

if 条件:
    処理
else:
    処理

複数条件に分岐する場合

if 条件:
    処理
elif 条件 :
    処理
    ・・・

まずはIF単独の場合

条件を書いてセミコロンを末尾に書きます。

In [1]:
# if文で条件に合致した場合printする
if 1<2:
    print('1より2の方がおっきい')
1より2の方がおっきい

その条件に合致した場合にだけ if 文の中の処理が実行できます。

なお注意として制御文を使う場合、処理を書くブロックは
インデントといって空白4つ分ずらしてあげないといけません。
また空白4つはタブボタンでも代用可能です。

In [2]:
if 1<2:
print('1より2の方がおっきい')
  File "<ipython-input-2-258e6cb91b61>", line 2
    print('1より2の方がおっきい')
        ^
IndentationError: expected an indented block

インデントを行わないとエラーになります。

In [3]:
# 条件はTrue or False
hh = 8
if hh== 8:
    print(hh)
8

if 文では条件は bool型、真偽値になるものを採用できます。

次に条件に合致しなかった場合は

if文のあとに else: と書いて

条件に合致しない場合の分岐処理も書くことができます。

In [4]:
hh = 7
if hh== 8:
    print('{}時だよ、全員集合'.format(hh))
else:
    # 条件に合致しなければこちらが実行される。
    print('{}時だよ、全員解散'.format(hh))
7時だよ、全員解散

条件が複数ある場合

elif : で条件を増やすことができます。

In [5]:
hh = 9
if hh== 8:
    print('{}時だよ、全員集合'.format(hh))
elif hh==9:
    # 条件に合致すれば実行される。
    print('{}時だよ、全員遅刻'.format(hh))
else:
    # 条件に合致しなければこちらが実行される。
    print('{}時だよ、全員解散'.format(hh))
9時だよ、全員遅刻

if文では条件が合致したところだけ実行されます。

条件を分岐させたい時にだけelse や elif を使えば良いです。

条件が複数にまたがる場合

ネストと言って、if文の階層を作ることができます。

その場合、if文の階層の分だけインデントを行います。

In [6]:
aa = 2
bb = 50
if aa == 2:
    if bb == 50:
        print('江頭{0}{1}分'.format(aa,bb))
    else:
            print('江頭{0}時'.format(aa))
else:
        print('江頭')
江頭2時50分

インデントの位置で処理が変わってしまうので注意。

ネストを使うことでどんな条件でも
書き分けることができるようになります。

ただし、あまりネストを使いすぎると
わけわからなくなってきます。みるのも大変です。

あまり深い階層になってしまった場合は
そもそもの処理や条件などを見直した方が良いと思います。

if文では何かしら処理を書かないとエラーになってしまいます。

In [7]:
if 1<2:
  File "<ipython-input-7-7e41fe00229c>", line 1
    if 1<2:
           ^
SyntaxError: unexpected EOF while parsing

特に処理を思いつかない場合はとりあえず passというのを書きます。

In [8]:
if 1<2:
    pass

pass は何もしない処理を現します。
制御文だけを書いて、処理を書かずに実行すると
エラーになるので回避のために使えます。

pythonではインデントで処理するブロックが変わってきます。

なのでif文の中の処理なのか、その前の処理になるのかで
全体の処理が大きく変わってくることがありますので
どういう処理をさせるのかを考えてインデントをしてください。