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

#[Python]05章-02 条件の組み合わせ
前節では、1つの条件を用いて、if文による分岐について触れました。例えば以下のものです。

```.py
>>> 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**に以下のコードを入力してください。

```.py
>>> a = 1
>>> b = -1
>>> a > 0
True
>>> b > 0
False
>>> a > 0 and b > 0
False
```

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

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

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

| 条件A | 条件B | 条件A <font color=red>and</font> 条件B |
|:-:|:-:|:-:|
|  True | True  | True  |
|  True | False  | False  |
|  False | True  |  False |
|  False | False  | False  |


##OR演算
条件Aと条件Bがあったときに、**どちらかを満たす**場合（つまりどちらかが**True**）に、**True**となります。

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

```.py
>>> 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 > 0**は**True**となります。

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

| 条件A | 条件B | 条件A <font color=#0cc>and</font> 条件B |
|:-:|:-:|:-:|
|  True | True  | True  |
|  True | False  | True  |
|  False | True  |  True |
|  False | False  | False  |

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

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

```.py
>>> a = 1
>>> a > 0
True
>>> not a > 0
False
```

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

| 条件A | <font color=#0c0>not</font> 条件A |
|:-:|:-:|
| True  | False  |
| False  | True  |


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

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

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

```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実行結果＞
><font color="#090" bgcolor="black">【実行結果】</font>
何月かを入力してください（1～12）：<font color="00cccc">7</font>
夏です

解説していきましょう。

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

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

```.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実行結果＞
><font color="#090" bgcolor="black">【実行結果】</font>
何月かを入力してください（1～12）：<font color="00cccc">1</font>
冬です


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

##演習問題
演習問題を用意しました。ぜひ解いてみてください。なお、ファイル名は[ ]内に指定したものを使用して、<font color="00cccc">chap05</font>内に作成ください。使用する変数名は好きな変数名を指定してかまいません。
<font color="3333ff">
[05-02-p1.py]
【1】身長(cm)と体重(kg)を入力し、BMIを求めるプログラムを作成してください。
また、BMIの結果から、以下の条件に基づいて画面に表示するようにしてください。
</font>

| BMI値 | 出力内容 |
|:--|:--|
| 18.5未満  | 「やせすぎです」と出力  |
|  18.5以上25.0未満 | 「普通体重です」と出力  |
|  25.0以上 |「肥満です」と出力   |
※本来は肥満にもさらに区分けされるのですが、簡素化のため上記としています。
<font color="3333ff">
BMIの求め方は以下の式で求められます。
**BMI =体重(kg)÷（身長(m)）<sup>2</sup>**
（ヒント：まず身長(cm)を身長(m)に変更しましょう）</font>
<font color="3333ff">
また、今まで文字列を数値に変える際に**int関数**で変換していましたが、体重や身長は整数でなく小数の可能性もありますので、そういう場合の変換は以下のように**float関数**で変換します。
**weight = float(input('体重(kg)を入力してください：'))**
</font>

＜05-02-p1.py実行結果＞
><font color="#090" bgcolor="black">【実行結果】</font>
身長(cm)を入力してください：<font color="#0cc" bgcolor="black">184</font>
体重(kg)を入力してください：<font color="#0cc" bgcolor="black">77.9</font>
標準体重です

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

このAND、OR、NOT演算は[「4章-09」](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)のセットのところに出てきた集合の演算の話に近い内容となっています。ぜひ確認してみてください。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)