LoginSignup
0
1

More than 3 years have passed since last update.

[Python]05章-02 制御構文(条件の組み合わせ)

Posted at

[Python]05章-02 条件の組み合わせ

前節では、1つの条件を用いて、if文による分岐について触れました。例えば以下のものです。

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

しかし、条件についてはもっと複雑なものもあります。例えば「aとbが等しく、かつcとdも等しいとき」といったものです。
こういった条件の組み合わせについて触れていきます。

AND演算

条件Aと条件Bがあったときに、両方満たす場合(つまり両方ともTrue)に、Trueとなります。

Python Consoleに以下のコードを入力してください。

>>> a = 1
>>> b = -1
>>> a > 0
True
>>> b > 0
False
>>> a > 0 and b > 0
False

上記で、a > 0は条件を満たしていますが、b > 0は条件を満たしていません。
したがって、両方満たしていないため、a > 0 and b > 0Falseとなります。

今、2つの条件しか記載していませんが、これが3つの条件についてand演算をした場合でも、3つの条件を満たした場合にはTrueとなります。

AND演算について表でまとめると以下の通りになります。

条件A 条件B 条件A and 条件B
True True True
True False False
False True False
False False False

OR演算

条件Aと条件Bがあったときに、どちらかを満たす場合(つまりどちらかがTrue)に、Trueとなります。

Python Consoleに以下のコードを入力してください。

>>> a = 1
>>> b = -1
>>> a > 0
True
>>> b > 0
False
>>> a > 0 or b > 0
True

上記で、a > 0は条件を満たしていますが、b > 0は条件を満たしていません。
しかし、OR演算の場合、どちらかを満たしていればよいためため、a > 0 or b > 0Trueとなります。

OR演算について表でまとめると以下の通りになります。

条件A 条件B 条件A and 条件B
True True True
True False True
False True True
False False False

NOT演算

条件Aがあったときに、それを否定する場合に使用します。

Python Consoleに以下のコードを入力してください。

>>> a = 1
>>> a > 0
True
>>> not a > 0
False

まず、a > 01 > 0なので、Trueとなります。しかし、NOT演算の場合は否定するため、それが逆となり、Falseという結果になります。

条件A not 条件A
True False
False True

条件の組み合わせを用いたプログラムの作成

では実際に、条件を組み合わせたif文のプログラムを作成してみましょう。
今回の内容のプログラムは以下のものです。


1から12まで、何月かを入力して、3~5月であれば「春です」、6~8月であれば「夏です」、9~11月であれば「秋です」、12月~2月であれば「冬です」と表示するプログラムを作成します。
また、1から12まで以外の数値が入力されたら「その月は存在しません」と表示するようにしてください。

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

05-02-01.py
month = int(input('何月かを入力してください(1~12):'))

if month >= 3 and month <= 5:
    print('春です')
elif month >= 6 and month <= 8:
    print('夏です')
elif month >= 9 and month <= 11:
    print('秋です')
elif month == 12 or month <= 2:
    print('冬です')
else:
    print('その月は存在しません。')

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

【実行結果】
何月かを入力してください(1~12):7
夏です

解説していきましょう。

まず、最初に何月かを入力して、そのあと各条件いずれかにあてはまる箇所のif文内の処理が実行されます。
今回、7と入力したため、month >= 6 and month <= 8の個所にあてはまるのでそこのif文内の処理が実行され「夏です」と表示されます。

なお、month >= 6 and month <= 8の条件の個所について、6 <= month <= 8という形に変更できないのでしょうか?そのような表記も実際可能です。
05-02-01.pyのプログラムを以下のように改良して実行してみましょう。

05-02-01.py
month = int(input('何月かを入力してください(1~12):'))

if 3 <= month <= 5:
    print('春です')
elif 6 <= month <= 8:
    print('夏です')
elif 9 <= month <= 11:
    print('秋です')
elif month == 12 or 1 <= month <= 2:
    print('冬です')
else:
    print('その月は存在しません。')

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

【実行結果】
何月かを入力してください(1~12):1
冬です

どちらかと言えば、こちらの範囲で書く形式の条件のほうが見やすいかと思います。
ただし、現在範囲で記載する条件はPythonのみとなっています。ほかの言語のC言語やJava言語などは範囲で書く形式は使用できないので注意してください。

演習問題

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

[05-02-p1.py]
【1】身長(cm)と体重(kg)を入力し、BMIを求めるプログラムを作成してください。
また、BMIの結果から、以下の条件に基づいて画面に表示するようにしてください。

BMI値 出力内容
18.5未満 「やせすぎです」と出力
18.5以上25.0未満 「普通体重です」と出力
25.0以上 「肥満です」と出力

※本来は肥満にもさらに区分けされるのですが、簡素化のため上記としています。

BMIの求め方は以下の式で求められます。
BMI =体重(kg)÷(身長(m))2
(ヒント:まず身長(cm)を身長(m)に変更しましょう)


また、今まで文字列を数値に変える際にint関数で変換していましたが、体重や身長は整数でなく小数の可能性もありますので、そういう場合の変換は以下のようにfloat関数で変換します。
weight = float(input('体重(kg)を入力してください:'))

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

【実行結果】
身長(cm)を入力してください:184
体重(kg)を入力してください:77.9
標準体重です

最後に

今回は、条件を組み合わせた制御構文について見ていきました。ただし、あまり長い条件を書いてしまうと、後でプログラムをメンテナンスする際に読みづらくなるというデメリットもありますので、必要最低限にとどめておきましょう。

このAND、OR、NOT演算は「4章-09」のセットのところに出てきた集合の演算の話に近い内容となっています。ぜひ確認してみてください。

【目次リンク】へ戻る

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