Python 条件分岐 if文

python

【Python】制御構文・条件分岐の基本について【動画・画像付きで解説】

2019年12月25日

こんにちは。

 

今回は制御構文・条件分岐の基本に関する内容を学習します。

 

これまでの学習の流れです。

四則演算数値列文字列についてまとめた記事については、以下の記事を参照ください。

STEP 1
python コード サンプル 覚え書き
【Python】数値と文字列について【初心者向け】

続きを見る

変数・論理値・演算子については以下の記事をご参照ください。

STEP 2
python コード サンプル 覚え書き
【Python】変数・論理値・演算子について【初心者向け】

続きを見る

関数の基本については以下の記事をご参照ください。

STEP 3
python コード サンプル
【Python】関数の基本について【初心者向け】

続きを見る

オブジェクトとメソッドの使い方については以下の記事をご参照ください。

STEP 4
python コード サンプル
【Python】オブジェクトとメソッドについて【初心者向け】

続きを見る



今回は制御構文や条件分岐の基本について学習していきます。


まず初めに、プログラミング言語(Pythonを含めて)では、原則として記述した順に命令が実行されます。


この様な流れの処理のことをを 逐次処理 と言います。

しかし「特定の条件によって処理を分けたい」「同じ処理を繰り返したい」ときには、特殊な記述をすることが必要です。


そこでこの記事では、このような既述をするための「制御構文」に関するプログラムの書き方を学びます。


 本記事の学習内容

  • 条件分岐の理解
  • if 文の理解
  • if, else文の理解
  • if, else, elif文の理解

 

それでは早速見ていきましょう。

if文

Python 条件分岐 if文


まずは YouTube で無料教材の動画を見て、概要を把握しましょう。

if文(elif, else)を理解する為に有益な動画教材

制御構文(if文)|中学生でもわかるPython入門シリーズ

Python Tutorials for Biginners |If Elif Else Statement in Python

Telskoさんのチャンネルです。if 文だけではなく、elifelse についてもまとめて解説して下さっています。

How to Use If Else Statements in Python (Python Tutorial #2)

CS Dojoさんの動画です。こちらの動画でもIf 文だけではなく、elif, else についてもまとめて解説して下さっています。色々な動画を見る事で理解が深まるかと思います。

if文の概要について

それでは実際に if 文の解説をしていきます。


商品の金額が3000円以下であれば「購入」と表示するプログラムを考えます。その場合、以下の様な逐次処理の流れを考えます。

Python 条件分岐 if文

こういったプログラムでは、購入する商品の金額が「3000円以上か、それ未満か」で処理の内容が変わります。


上の流れ図では 青色の ◇ のところで処理が分かれています。購入する商品の金額(money)が 3000円 未満なら「購入します」と表示し、money が3000円以上なら「購入します」と表示する部分を飛ばして次の処理に向かう、という流れです。


条件によって分岐する処理を記述する場合、if文 というものを使います。それでは早速、以下のように code を書いていきましょう。

[In]

[Out]

1500円の金額を入力して、出力した画像イメージではこの様な感じになります。( 環境: Jupyter notebook )
Python 条件分岐 if文
その他にも3000円以上の金額など色々試してみてください。
Python 条件分岐 if文
3000円未満の数値を入力したときに限り「購入します」と表示することが確認できます。if money < 3000: という部分が if文 と呼ばれ、条件分岐の処理が行われます。

 

英語でif には「もしも」という意味があるように、if (条件式): と記述することで「もし(条件式)を満たしていれば」という理解をしてくれます。条件式の後ろのコロン(:)は必須です。

 

今回はif money < 3000 としたので、この条件式を満たす場合のみ「購入します」が表示されることになります。

if文の詳しい使用方法について

次に以下の様に入力してみましょう。

出力するとこの様な画像になります。
Python 条件分岐 if文
次に実際に実行してみましょう。例えば2200円を代入してみます。


Python 条件分岐 if文

 

3000円未満のときは「購入します」に続けて「お買い上げありがとうございます!」と表示されます。

 

3000円以上の場合は、2つの文のどちらも表示されません。しかし「処理を終了します」の表示は、金額によらず毎回必ず表示されます。

 

print("購入します") と print("お買い上げありがとうございます!") だけが3000円未満のときに表示されるのは、これらの2文の行頭にスペースを追加したからです(行頭のスペースのことを インデント といいます)。

 

Pythonでは半角スペース4個分がインデントとして設定されています。なお、自分でスペースキーを4回押すだけでなく、Tabキーを1回押す形でも構いません。

 

インデントはプログラムのコードを見やすくするために追記するものでもありますが、コードを見やすくすること以外にも if 文の影響がおよぶ通用範囲を示すためにも使われています。


例えば、以下の様にif money < 3000: と記述した後の行でインデントをしている命令のみが条件分岐の対象となります。


Python 条件分岐 if文
インデントがされていない一番上と一番下の部分が必ず実行される部分です。

 

インデントされている黄緑色の部分が money < 3000 の条件式を満たす場合のみ実行される部分です。

 

インデントの使用方法についても徐々に慣れていきましょう。

複数の条件式を指定する方法

if 文を使用する際に、複数の条件式を指定する方法としてand や or といった論理演算子も条件式に利用できます。では実際に、以下のコードを記述してみましょう。


では実際に実行してみましょう。


Python 条件分岐 if文
年齢(age)が20歳以上 かつ 70歳以下であれば「どうぞご入場ください」が表示されます。

if文の中にif文を入れる| ネスト

複数の条件を指定する方法として、if文の中にif文を入れる = ネスト構造 という方法があります。


では実際に以下の内容を記述してみましょう。

では実際に年齢を '34歳' として確認してみましょう。こちらが実際の画像になります。
Python 条件分岐 if文

最初に age >= 20 の条件式を調べ、次に age <= 70 の条件式を調べるという流れは and を使った場合と同じです。


この様に「段階を踏んでいる」という意図や意味合いは、ネストの書き方の方がコードを読む側にも伝わりやすいのではないかと思います。

Python 条件分岐 if文

 

メモ

外側の if 文と内側の if 文の通用範囲もインデントの数で決まります。
内側のifの処理を記述する場合は、外側の2倍(スペース8個分)、インデントを追加してください。

if, else文

Python 条件分岐 if文

 

「条件を満たさない場合も別の処理をしたい」とき、たとえば、60点以上が「合格です」と表示するのに対して60点未満は「不合格です」と表示したいとします。


Python 条件分岐 if文

その場合は else という句を追加して if-else 文にします。実際にコードを書いてみましょう。

 

こういった場合は else という句を追加して if-else 文にします。では実際にcodeを書いていきましょう。

In[]

実際の実行画面です。

・価格が3000円以上の場合


Python 条件分岐 if文

・価格が3000円未満の場合


Python 条件分岐 if文
価格( price )が3000円以上であれば「購入します」「ご購入ありがとうございます!」と表示されます。

 

3000円未満なら「購入はやめておきます」「またのご来店をお待ちしております」という表示になります。

 

条件式を満たすときはifの中の処理が行われるのは変わりありませんが、if-else で記述したとき、条件式を満たさない場合には else の中の処理が実行されるのです。


Python 条件分岐 if文

メモ

else にはインデントを入れませんif と同じ位置に記載します。

というのも、else にインデントを入れてしまうと if 内の処理のひとつとして判断されてしまうので気をつけて下さい。

 if, elif, else文

Python 条件分岐 if文

特定の条件式を「満たすとき」「満たさないとき」の二択だけではなく、「ある条件を満たすとき」「ある条件は満たさないけど、この条件なら満たすとき」「どれも満たさないとき」のように3つ以上に分岐する場合も表示することができます。


たとえば、6000円以上で「購入しません」、3000円未満なら「購入します」という分岐に加えて、「3000円以上、かつ6000円未満」なら「他の店回ってからまた来ます」と表示する仕様を追加したいとします。

Python 条件分岐 if-elif-else文
これを実現する一例は、else の中に if を作る方法です。実際に実行確認してみましょう。


実際の実行画面を見てみましょう。

・6000円以上の場合


Python 条件分岐 if-elif-else文
・3000円以上6000円未満の場合


Python 条件分岐 if-elif-else文

上記意外にも3000円未満の場合も試してみてください。

 

まず if price < 3000 で「値段が3000円未満かどうか」を調べます。

 

3000円未満ではなかった場合、else の中に記述した if の条件である「値段が6000円以上かどうか」を判定します。

 

この条件を満たすかどうかで「購入しません」か「他の店回ってからまた来ます」が表示されます。 

Python 条件分岐 if-elif-else文

もうひとつの方法は、if と else の間に elif という句を追記する方法です。

流れは else の中に if や else を記入する場合と、基本的には同じです。

 

最初の条件である(price < 3000)が満たされていれば、その下にある elif や else は無視されます。

 

price < 3000 ではなかった場合に、 elif に記述した price >= 6000 を満たしているかを確認します。

 

それにも満たしていない場合には else として処理が行われます。

Python 条件分岐 if-elif-else文

メモ

条件が4つ以上でも elif は利用できます。

制御構文の課題|2題

Python 条件分岐 if-elif-else文

課題①|Amazonの配送料込みの価格を計算する

それでは以上の制御構文を学習したところで実際に課題をこなしていきましょう。

 

Googleで「Amazon 送料」と検索した時の画面が以下になります。このAmazonの配送料について計算していきましょう。

Python 条件分岐 if文
課題:Amazonの配送料込みの価格を表示する。

仕様:


  • 「税抜価格を入力してください:」と表示し、税抜価格を入力します。
  • 税抜価格が入力されたら、次に税込価格を計算します。この際に、小数点以下は切り捨ての仕様にして下さい。
  • 注文金額( 入力された税込価格 )が2000円以上の場合は「配送料は無料です」と表示してください。逆に、2000円未満の場合は「配送料として350円かかります」と表示して配送料350円分を価格に加えてください。
  • 最後に「配送料込みの価格は○円です。」と画面に配送料込みの価格表示してください。以上で終了となります。

※ 解答はあえて載せずに明日(2019/12/26)にUPします。上の記事を参考にしながら間違っても構いませんので自分でcodingしてみてください。

課題①解答例 |Amazonの配送料込みの価格を計算する

(※ 2019/12/26 更新)

課題の解答例です。

In[]

実行例です。
実際、昨日購入した「統計学の図鑑(まなびのずかん)」の値段で計算してみます。
統計学の図鑑(まなびのずかん)
値段が 2728円なので、この値を代入してみます。

Python 条件分岐 if文
実行結果は上記の様になりました。
皆さんはどの様な結果になりましたでしょうか。

課題②|テストの教科および点数を入力して、合格・不合格を出力する

先日この様なツイートをしました。追加課題としては以下の様になっています。



課題:テストの教科および点数を入力して、合格・不合格を出力するプログラムを作成する。 尚、教科は数学(以下mathと表記)および英語(以下engと表記)のみを考える。 

仕様:

  • mathは75点以上、engは60点以上で合格とする。
  • 例: 入力 eng 80 出力 合格
  • 例: 入力 math 35 出力 不合格

課題②解答例|テストの教科および点数を入力して、合格・不合格を出力する

こちらが解答例となります。

実際の出力画面は以下の様になります。

Python 条件分岐 if文皆さんはどの様な結果になりましたでしょうか。



条件分岐は非常に重要な項目ですので、しっかりと定着させる様にしましょう。


-python
-, , , ,

Copyright© Tommy blog  , 2020 All Rights Reserved.