LoginSignup
0
1

More than 3 years have passed since last update.

[Python]05章-01 制御構文(比較演算子と条件分岐)

Last updated at Posted at 2020-06-03

[Python]05章-01 比較演算子と条件分岐

この章からは制御構文について学んでいきます。
今まで皆さんが書いてきたプログラムは、基本的には上から順に処理がなされ、順番に実行されていました。

しかし、私たちの生活でもそうですが、私たちは何か判断しながら普段生活しています。例えば、「天気が晴れだったら外出」し、「天気が雨だったら室内で過ごす」といったものです。

コンピュータプログラムでも同じように判断して実行する処理を選ぶことができます。ただし、その条件の指定には比較演算子という新たな演算子を学ぶ必要があります。
比較演算子はそこまで難しくはないですが、表記方法が数学と異なるのでそこをポイントとして押さえてください。

比較演算子 ~条件の記述~

まずは条件分岐で重要な比較演算子について説明します。
例えば、以下の式は当たり前ですが等しいと言えます。

5 = 2 + 3

これをPythonプログラムで等しいかどうかを調べるには以下のように記載します。
Python Consoleに以下のコードを入力してください。なお、=(イコール)は2つ続けて書いてください。

>>> 5 == 2 + 3
True

2と3を足すと5になるかどうかを判定しようとしています。当然True(真)となります。
なお、「==」と記載しましたが、これが比較演算子です。左辺と右辺を比較して判定しています。「=」(イコール)としてしまうと、代入となってしまいますので気を付けてください。
(※)Pythonでは「==」が比較演算子で等しいを表しますが、プログラム言語によっては異なりますのでご注意ください。

では、あえて異なる値を入れてみましょう。Python Consoleに以下のコードを入力してください。

>>> 5 == 1 + 3
False

1と3を足した結果が5であるかを判定しようとしています。当然False(偽)となります。

他にも比較演算子は以下の種類があります。

比較演算子 意味 例の意味
== 等しい x == 5 xと5は等しいか?
!= 等しくない x != 5 xと5は等しくないか?
> より大きい x > 5 xは5より大きいか?
>= 以上 x >= 5 xは5以上か?
< 未満(より小さい) x < 5 xは5未満か?
<= 以下 x <= 5 xは5以下か?

以下、実行例です。実際に異なる値を代入して試してみましょう。

>>> 5 == 5
True
>>> 5 != 5
False
>>> 5 != 4
True
>>> 5 > 4
True
>>> 5 >= 5
True
>>> 5 > 5
False

なお、文字列やリストの比較も可能となります。

>>> 'book' == 'book'
True
>>> 'book' != 'book'
False
>>> L1 = [1, 2, 3]
>>> L2 = [1, 2, 3]
>>> L1 == L2
True

条件分岐(if文)

ここでは、条件分岐について触れていきます。
条件分岐を書くには、if文を記載します。

文法的には以下のように記載します。

if 条件:
    条件を満たしたときに実行される処理

この「条件を満たしたとき」というのが、先ほどの比較演算子(つまり条件)による結果がTrueになったときという意味であります。

なお、条件式の後に「:」(コロン)を忘れないようにして下さい。これがないとエラーとなります。

また、「条件を満たしたときに実行される処理」のところの前には、「Tabキー」でインデント(字下げ)しています。これも忘れないようにしてください。これがないと、if文の中身とわからないためです。(詳細は次に記載)

文法的に書くと難しくなるので、実際にプログラムを書きながら説明します。今回記載するプログラムは以下の通りです。
整数値をキーボードから入力して、それがもし正であったら「正の値が入力されました」と記載するプログラムを作成する。

まず、条件をフローチャート(流れ図)で表してみたいと思います。フローチャートを描くと、どなたでもプログラムの内容を把握しやすくなります。

image.png

これをもとに、プログラムを作成していきましょう。
これからプログラムを作成するのですが、今回は久しぶりに、プログラムをエディタに入力するために、フォルダと.pyファイルを作成します。
今回のファイルはchap05フォルダを作成し、その中に05-01-01.pyというファイルを作成します。なお、作成方法を忘れてしまった場合には、「01章-03」で確認してみてください。

05-01-01.py
#整数値の入力。このままだと文字列となるので、int関数で数値に変換
n = int(input('整数の値を入力してください:'))

#正の値の場合、つまりnが0より大きい場合にprint関数で出力
if n > 0:
    print('正の整数値が入力されました')

プログラムを書いたら実行してみましょう。

【実行結果】
整数の値を入力してください:5
正の整数値が入力されました

ifの、n > 0の個所で、「5 > 0かどうか」を判定しています。もちろんTrueなので、if文内が実行されます。

インデントについて

先ほど、if文の中身は、インデント(字下げ)するようにと述べました。このことについて少し掘り下げて触れてみます。以下のコードを追記してください。

05-01-01.py
#整数値の入力。このままだと文字列となるので、int関数で数値に変換
n = int(input('整数の値を入力してください:'))

#正の値の場合、つまりnが0より大きい場合にprint関数で出力
if n > 0:
    print('正の整数値が入力されました')
    print(f'今、あなたは{n}を入力しました。')

もう1つコードを記載してみます。chap05フォルダ内に05-01-02.pyというファイルを作成します。違いは、最後の出力の個所をインデントさせていないかだけです。

05-01-02.py
#整数値の入力。このままだと文字列となるので、int関数で数値に変換
n = int(input('整数の値を入力してください:'))

#正の値の場合、つまりnが0より大きい場合にprint関数で出力
if n > 0:
    print('正の整数値が入力されました')
print(f'今、あなたは{n}を入力しました。')

それぞれ、実行してください。なお、その際には負の値を入力してください。

<05-01-01.py実行結果>

【実行結果】
整数の値を入力してください:-1

<05-01-02.py実行結果>

【実行結果】
整数の値を入力してください:-1
今、あなたは-1を入力しました。

違いが判りましたでしょうか?
まず、入力した数値はn = -1なので、n > 0のところでは、-1 > 0となりFalseとなるので、if文内は処理されなくなります。ここまでは両方のプログラムで共通です。

05-01-01.pyではif文内の2行はインデントをしているので、if文内の処理として扱われて、今回は処理はされていません。
05-01-02.pyでは片方インデントをしていないため、if文が終了して、if文の外の処理として実行されていることになります。

文字で書くと難しいので、フローチャートで描くと違いが以下のようになります。
image.png

条件分岐(if~else文)

今まで書いたプログラムは、正の値が入力されると「正の整数値が入力されました」と出力されました。では、負の値が入力された際はどうでしょう。
先ほど実際に-1と入力しましたが、「負の整数値が入力されました」とは出力されませんでした。

つまり、条件を満たさなかった場合の処理を何も書いていない状態です。そのような条件を書きたい場合にはelse(エルス)を用います。構文としては以下の通りです。

if 条件:
    条件を満たしたときに実行される処理
else:
    条件を満たさなかったときに実行される処理

実際には、以下のようにプログラムを書きます。chap05フォルダ内に05-01-03.pyというファイルを作成し、以下のコードを入力してください。

05-01-03.py
#整数値の入力。このままだと文字列となるので、int関数で数値に変換
n = int(input('整数の値を入力してください:'))

#正の値の場合、つまりnが0より大きい場合にprint関数で出力
if n > 0:
    print('正の整数値が入力されました')
else:  ##上記の条件に満たないときに以下のprint関数で出力
    print('負の整数値が入力されました')
print(f'今、あなたは{n}を入力しました。')

<05-01-03.py実行結果>

【実行結果】
整数の値を入力してください:-1
負の整数値が入力されました
今、あなたは-1を入力しました。

解説していくと、今回入力値としてn = -1を入力しました。
したがって、条件のところで、-1 > 0となるのでFalseとなり条件を満たしません。
したがってelse側が実行され、「負の整数値が入力されました」と出力されます。

条件分岐(if~elif~else文)

では、この状態で再度実行して、入力値として0を入力してみます。すると以下の結果になります。

<05-01-03.py実行結果>

【実行結果】
整数の値を入力してください:0
負の整数値が入力されました
今、あなたは0を入力しました。

0は正の数でも負の数でもないのに「負の整数値が入力されました」と出力されてしまいます。0が入力された際には「0が入力されました」と出力されるように改良してみます。

しかしそうすると、3つの分岐となります。どのように表現するのでしょうか?これを解決するのに、elifという文を用います。構文で表現すると以下の通りです。

if 条件1:
    条件1を満たしたときに実行される処理
elif 条件2:
    条件1を満たさなく条件2を満たしたときに実行される処理
else:
    条件2も満たさなかったときに実行される処理

実際にプログラムを書いてみましょう。chap05フォルダ内に05-01-04.pyというファイルを作成し、以下のコードを入力してください。

05-01-04.py
#整数値の入力。このままだと文字列となるので、int関数で数値に変換
n = int(input('整数の値を入力してください:'))

#正の値の場合、つまりnが0より大きい場合にprint関数で出力
if n > 0:
    print('正の整数値が入力されました')
elif n < 0:  ##nが0未満のにprint関数で出力
    print('負の整数値が入力されました')
else:  ##n>でもn<0でもないとき(つまり0のとき)
    print('0が入力されました')
print(f'今、あなたは{n}を入力しました。')

ここでフローチャートで表現してみましょう。以下の通りになっていると思います。プログラムとフローチャートを見比べて処理を追ってみましょう。
image.png

演習問題

演習問題を用意しました。ぜひ解いてみてください。なお、ファイル名は[ ]内に指定したものを使用して、chap05内に作成ください。使用する変数名は好きな変数名を指定してかまいません。

[05-01-p1.py]
【1】入力された整数が偶数か奇数かを判定するプログラムを作成してください。
(ヒント:偶数は2で割るとあまりが0に、奇数は2で割るとあまりが1になります。)
<05-01-p1.py実行結果>

【実行結果】
整数を入力してください:1
奇数です


[05-01-p2.py]
【2】正の整数値を読み込んで、それを3で割った値に応じて、「その値は3で割り切れます」「その値は3で割ると1余ります」「その値は3で割ると2余ります」のいずれかを表示するプログラムを作成してください。
<05-01-p2.py実行結果>

【実行結果】
整数を入力してください:256
その値は3で割ると1余ります

最後に

今日はプログラミングをする上で重要なif文について学びました。
今後学ぶプログラムについては当たり前のようにif文はよく出てきます。どのプログラムでも条件判定は必ずあるので、ぜひ覚えましょう。

【目次リンク】へ戻る

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1