【Python】if文の書き方

PythonのTopに戻る


 

 if 文の例①(if~elif~else)

以下は一般に「FizzBuzz問題」と呼ばれるプログラミングの課題に対する解答例である。「FizzBuzz問題」とは、3の倍数のとき「Fizz」、5の倍数のとき「Buzz」、15の倍数のとき「FizzBuzz」と表示するプログラムを書け、というものである。単なる場合分けのプログラムではあるが、ここにプログラミングの基礎が詰まっている。

for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

コードについて、上から順に説明する。

まずfor文により、変数 “i” の中には 1~101 までの整数値が順に入る。

“%”は剰余の計算である。例えば i = 45 のときは最初の if 分岐に引っ掛かる。「if = もし~なら」なので、”if i % 15 == 0:” は「もし “i” を 15 で割った余りが0なら」の意味である。

それ以外の場合」はPythonでは「elif」を使う。else if (C, Javaなど) や elsif (Ruby) 、elseif (PHPなど)とは異なるので注意。因みに、elif はbashでも使われる。

条件分岐の最後の「else:」は「どの条件にも当てはまらない場合」を意味する。

なお、Pythonではインデントを揃えることでfor節やif節、while節のかたまりを表現している。

FizzBuzz問題」を拡張してみる。先ほどのプログラムを、6の倍数のとき「Dizz」と表示されるように書き直してみる。3と5が互いに素な整数であったのに対し、3と6は互いに素でないから一工夫必要である。コードの例は次のようになる。

for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 6 == 0:
        print("Dizz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

狭い(厳しい)条件や制約の多い条件は原則として前の方に持ってくるべきである。

 

 if 文の例②(条件が複数のとき/論理演算子)

次のようなリストから「身長が 170 [cm] 以上」かつ「体重が 60 [kg] 以上」のデータを抜き出したいというシチュエーションでは if 文で and 条件を使う必要がある。

  身長(cm) 体重(kg)
A 168.4 53.7
B 172.4 75.4
C 178.9 61.9
D 173.2 60.8
E 170.5 59.1
F 172.4 57.1
G 159.2 52.3
H 167.5 55.3
I 178.9 61.9
J 166.8 54.6

コードの例は次のようになる。

name = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
height = [168.4, 172.4, 178.9, 173.2, 170.5, 172.4, 159.2, 167.5, 178.9, 166.8]
weight = [53.7, 75.4, 61.9, 60.8, 59.1, 57.1, 52.3, 55.3, 61.9, 54.6]

for i in range(len(height)):
    if height[i] >= 170 and weight[i] >= 60:
        print(name[i])

出力は以下の通り。

B
C
D
I

条件が複数の場合はこのように比較演算子を用いる。「身長が 170 [cm] 以上」または「体重が 60 [kg] 以上」のデータを抜き出す場合は if 文で or 条件を使う。

 

 比較演算子(==, !=, <=, など…)

2つの値を比較演算子によって評価することができる。

比較演算子
比較演算子 意味
a < b a は b より小さい
a <= b a は b 以下
a > b a は bより大きいい
a >= b a は b 以上
a == b a は b に等しい
a != b a は b に不一致

これらは True または False を返す。例えば、

print (5 < 9)

というスクリプトは “True” を返す。

要するに、if 文は条件式の “True” or “False” を判定しているだけである。while 文も同様である。

 

 比較するときは変数の型に注意せよ

比較演算子によって値を評価する際は変数の型に注意する必要がある。例えば、

print (5 == 5)
# True

というスクリプトは “True” を返すが、

print ("5" == 5)
# False

と書いた場合は “False” を返す。(左辺の5がダブルクォーテーションで囲まれていることに注意)

これは “5” が文字列を表しているためである。一方で右辺の 5 は整数型であり、これはいかなる文字列とも等しくなることがない。そのためFalseと判断される。

等号で比較する場合は大抵のプログラマは気を付けるのであるが、これが「<」や「>」などになると何故か途端に注意散漫になりバグを生み出すようになる。

Pythonに限ったことではないが、比較演算子によって値を評価する際は変数の型に気を配るようにしよう。変数の型変換については「§ 数値⇔文字列の型変換」のセクションを参照のこと。


PythonのTopに戻る