(1) if文の基本

条件分岐

条件に応じて実行する処理を分けることを条件分岐といいます。

if文の書き方

条件に応じて処理を分けるときには、次のif文を使います。


        if 条件式:
          # 条件が真のときの処理(インデントを下げる)
        else:
          # 条件が偽のときの処理(インデントを下げる)
      

if 条件式:の末尾にはコロン:をつけます。

次の行には、条件が真のときの処理を書きます。インデントが下がっているあいだは、条件が真のときの処理(if文の中ということ)をします。

その次の行はelse:と書き、さらにその次の行にはインデントを下げて、条件が偽のときの処理を書きます。インデントが下がっているあいだは、条件が偽のときの処理ということです。

Pythonでは、インデントレベル(深さ)の違いによって異なるグループとして扱われますので、プログラムを書くときや読むときにはインデントには十分に注意しましょう。


        x = 3 # xに3を代入
        if x > 0:        # xが0より大きいとき
          t = x**2 + 2      # xの2乗に2を加えてtに代入(条件が真のときの処理はインデントを下げる)
          y = t / 2         # tを2で割ってyに代入(インデントが下がっているここまでが条件が真のときの処理)
        else:               # x>0ではないとき(xが0以下のとき)
          t = 2 * x + 1     # xを2倍して1を加えてtに代入(条件が偽のときの処理はインデントを下げる)
          y = t ** 2        # tを2乗してyに代入(インデントが下がっているここまでが条件が偽のときの処理)
                            # if文が一通り終わったら、1行あけると見やすくなる(あけなくても実行自体に影響はない)
        print(y)            # インデントが戻っているので、if文の条件分岐が終了している。
      

Pythonではインデントとして半角スペース4個分をを指定することが推奨されています。Google Colaboratoryでは初期設定がスペース2個分となっているので、ツール>設定>エディタ>インデント幅(スペース)の値を「」に変更することをオススメします。また、行頭でTab⇥を入力すれば、自動的にこの書式のインデントが挿入されます。また、インデントを戻すときは、Shift⇧Tab⇥で戻すことができます。

詳しくは、実習の始め方 - インデント幅の変更を参照してください。

年齢によって処理を分ける

次の例は、年齢を代入したint型変数ageを用意し、15歳未満なら「15歳未満です」と出力し、それ以外なら「15歳以上です」と出力するプログラムです。


        age = 16 # ageに16を代入

        if age < 15:
          print("15歳未満です")
        else:
          print("15歳以上です") #(=15歳未満ではありません)
      

        15歳以上です
      

if文でよくあるエラー

SyntaxError

次のように、ifやelseの行末に「:(コロン)」がない場合は、SyntaxErrorとなります。


        age = 16

        if age < 15
            print("15歳未満です")
        else:
            print("15歳以上です")
      

        File "", line 3
          if age < 15
                     ^
      SyntaxError: expected ':'
      

IndentationError

次のように、インデントが正しくない場合は、IndentationErrorとなります。


        age = 16

        if age < 15:
            print("15歳未満です")
        else:
        print("15歳以上です")
      

        File "", line 6
          print("15歳以上です")
          ^
      IndentationError: expected an indented block after 'else' statement on line 5
      

(2) 比較式と比較演算子

比較式と比較演算子

if文の条件の部分には、次の比較式を記述します。比較式には><という比較演算子が用いられます。また、等しいかどうかの比較には==という演算子が使われます(=は代入の演算子なので注意してください)。

比較式 意味
a == b ab が等しい
a != b ab が等しくない
a > b ab より大きい
a >= b ab以上(等しいかそれより大きい)
a < b ab より小さい
a <= b ab 以下(等しいかそれより小さい)

比較式の値

比較式をprint関数で出力してみると、次のようになります。

print(1 < 2) # 1は2より小さいか
True
print(1 > 2) # 1は2より大きいか
False

比較式は条件が正しければTrue,正しくなければFalseを返します。 TrueFalsebool型(真偽値)とよばれる型で、 TrueまたはFalseの2種類の値をとる型です。

くじびき

次の例では、0〜9の整数の乱数を発生させて、5より大きければ「あたり」、そうでなければ「はずれ」と表示するプログラムです。

1行目import randomでは乱数を発生させるためのモジュールを読み込み、2行目random.randint(0, 9)で0以上9以下の整数の乱数を発生させています。


        import random # 乱数を発生させるためのモジュールを読み込む
        n = random.randint(0, 9) # 0以上9以下の整数の乱数を発生させて、nに代入する

        if n > 5:
          print("あたり")
        else:
          print("はずれ")
      
あたり

計算結果の比較

比較式の左辺に計算式を入れることもできます。


        num = 9 # 代入するときは「=」
        if num % 3 == 0:  # 比較するときは「==」
          print("3の倍数です。")
        else:
          print("3の倍数ではありません。")
      
3の倍数です。

(3) 複雑な条件

論理式と論理演算子

複数の条件を指定するときは、論理演算子orand)を使います。

A or B A and B not A
論理和 論理積 否定
Aが真 または Bが真であれば真 Aが真 かつ Bが真であれば真 Aが偽であれば真
A or B A and B not A

論理式の値

論理式をprint関数で出力すると、次のようにbool型TrueまたはFalseの2種類の値)となることがわかります。


        age = 15
        print(age <= 18 or age >= 65) # ageが18以下 または 65以上
      
True

        age = 15
        print(not(age <= 65)) # ageが65以下ではない
      
False

つまり、条件式に論理式を指定することで、複雑な条件を指定することができます。


        age = 15
        if age >= 13 and age < 20: # ageが13以上かつ20未満なら
          print("Teenagerです。")
        else:
          print("Teenagerではありません。")
      
Teenagerです。

(4) if文のいろいろな書き方

条件に応じて処理を分けるときには、次のif文を使います。

if ... else ...

条件が真のときの処理と偽のときの処理を書く場合は、if ... else ... を使います。


        if 条件式:
          # 条件が真のときの処理
        else:
# 条件が偽のときの処理

if ... のみ

elseは省略することもできます。次の場合には、条件が真のときの処理のみが実行されます。


        if 条件式:
          # 条件が真のときの処理
      

if ... elif ... else

複数の条件分岐がある場合には、次のようにif ... elif ... else ...を使います。


        if 条件式1:
          # 条件式1が真のときの処理
        elif 条件式2:
          # 条件式1が偽かつ条件式2が真のときの処理
        else:
          # 条件式1と条件式2ともに偽のときの処理
      

ユーザーに整数値(x)の入力を求めて、xが0(ゼロ)か正の数か負の数かを判定するプログラムの例。


        x = int(input("整数を入力してください: "))

        if x == 0: # 等しいときの比較演算子は「==」
          # 0(ゼロ)のとき
          print("入力された値は、0(ゼロ)です。")
        elif x > 0:
          # 0より大きいとき
          print("入力された値は、正の数です。")
        else:
          # 0より小さいとき
          print("入力された値は、負の数です。")
      

        整数を入力してください: -3 # -3と入力
        入力された値は、負の数です。
      

if文のネスト

複数の条件分岐がある場合、次のようにif文の中にさらにif文を書きます。このように、処理の中にさらに制御文を含めることをネスト入れ子といいます。


        if 条件式1:
          # 条件式1が真のときの処理
          if 条件式2:
            # 条件式1が真かつ条件式2が真のときの処理
          else:
            # 条件式1が真かつ条件式2が偽のときの処理
        else:
          # 条件式1が偽のときの処理
          if 条件式3:
            # 条件式1が偽かつ条件式3が真のときの処理
          else:
            # 条件式1が偽かつ条件式3が偽のときの処理
      

ある航空会社の子どもの運賃は、3歳以上12歳未満なら小児料金が適用され、0〜2歳は同伴の大人の膝の上に座る場合には無料、座席を確保する場合は小児料金が適用されます。次の例では、子ども年齢と膝の上に座るかどうか代入すると、子どもの運賃がどのような区分になるかを表示します。


        age = 1 # ageに年齢を入力(ここでは1歳を代入)
        is_on_lap = True # 膝の上に座るかどうか(ここではTrueを代入)
        
        if age >= 12:
          # 12歳以上
          print("通常運賃")
        elif age >= 3:
          # 3歳以上12歳未満
          print("子どもは小児運賃")
        else:
          # 3歳未満
          if is_on_lap == True:
            # 膝の上に座る場合
            print("子どもは無料")
          else:
            # 膝の上に座らずに座席を確保する場合
            print("子どもは小児運賃")
      
子どもは無料