Python入門 条件分岐

ここではプログラミング言語”Python”の初心者向けに、基本の文法について説明していきます。Python入門の初心者向けの進み方は以下をクリック。 (print関数やコメント機能などの基本機能について知らない方は先に読むことをお勧めします。)

Python入門の進め方

この回では、プログラミングにはかかせない条件分岐について説明していきます。

キーワード:条件分岐、インデント、if、elif、else

条件分岐の概念

プログラムを書くときに、ある条件のときに何かをさせたいという場合があります。これを可能にしてくれるのが条件分岐です。

現実世界の問題を例にして考えてみましょう。

例えば、雨が降っている日と晴れている日の人の行動を条件分岐で考えてみます。

・雨が降っている日(条件)

家の中でNetflixを使って映画鑑賞(行動)

・晴れている日(条件)

友人とどこかに出かける(行動)

このように、人は天候という条件で行動を変えることがあります。

プログラムでもある条件の時、ある行動を実行させるという考えが非常に重要です。

この考え方を条件分岐といいます。

定義

条件分岐の定義ですが、Pythonではif・elif・elseというのを使います。

まず基本の条件分岐構造(if文)は以下です。

if 条件式:

   実行したい内容

ifのあとには条件式を書きます。ここには条件の内容が入り、比較演算子ブール演算子などを使ってそれを表現します。また、条件式のあとには必ずコロン(:)を置くのを忘れないで下さい。

2行目からは実行したい内容を書いていくわけですが、必ず半角で4つ分スペースを空けてからコードを書きます。これをインデントといいます。

Pythonはこのインデントがなされていないとエラーになるので気を付けましょう。

また条件式に使う比較演算子には以下のものがあります。

== 同値(数学でいう=、=が二つ連続することに注意)

!= 等しくない(≠じゃないよ)

>, < 不等号

<=, >= =付き不等号

ブール演算子には以下のものがあります。

and 数学でいう”かつ”

or 数学でいう”または”

not 否定

具体的な例を使って説明してみます。

num = 5
if 0 <= num and num <= 10: #numが0以上10以下のとき
    print("true")
#結果
true

上の例ではnumという変数の値が0以上10以下のとき、”true”を表示するというコードです。

ifのとなりに条件式、そしてコロン。3行目の前にはインデントがあることを確認して下さい。

もう一つ例を。

age = 21
if 0 <= age and age < 20: #ageが0以上20未満のとき
    print("Don't drink alcohol.")
if 20 <= age #ageが20以上のとき
    print("OK")
#結果
OK

上の例では、if文を二つ使っています。このようにif文を多用することもできます。

ちなみに上のコードが何を表しているか分かりましたか?未成年はお酒を飲んではいけません。

また、今まではある条件が単独のときだけでしたが、その条件が必ず成立するとは限りません。その時に使えるのがelse文です。構造は以下になります。

if 最初の条件式:

  実行したい内容

else :

  実行したい内容

このようにelseは最初の条件が成り立たないときに、次に実行する内容のみを書きます。elseには条件式を書く必要はありません。

これは条件が二つしかないからです。

例えば、aという変数が7であるかそうでないかを条件分岐で考えるとき、コードは以下になります。

a = 7
if a == 7: #最初の条件式
    print("yes")
else:
    print("no")
#結果
yes

このとき、最初の条件がもし仮に満たされなかったとすると、aが7でないことは明白であるので、elseには条件式はいらないと分かります。

この点で、実は先ほどのageのコードは以下のように書き直すことができます。

age = 21
if 0 <= age and age < 20: #ageが0以上20未満のとき
    print("No drinking")
else : #ここをifからelseに変更
    print("OK")

最初の条件式で、ageが0以上20未満かを問うているので、年齢を考えるとき、それ以外は20歳以上しかありえないのでelseを使えます。

このように二つしか条件が無いとき(俺か俺以外か的な)、ifとelseを使う方がプログラムの効率が良いです。なぜなら、if文を二つ書いた場合は条件の真偽に関係なく、最低二回評価するからです。

評価とは条件式をプログラムが読み込むときに行われる作業みたいなものです。

しかし仮に、if側で条件が成立していれば、elseを評価しないので、評価は一回で済みます。

では条件が三つ以上あるときはどうでしょうか? この時使えるのがelifです

if 最初の条件式:

  実行したい内容

elif 次の条件式:

  実行したい内容

else:

  実行したい内容

ここでも例を使って見ていきます。ある選手がもらったメダルが金か銀か銅かを判別するとして

player = "銅"
if player == "金":
    print("金メダル")
elif player == "銀":
    print("銀メダル")
elif player == "銅":
    print("銅メダル")
else:
    print("ファイト!!")
#結果
銅メダル

上のように条件が多くあるときelifを使うことでそれを可能にします。

ですので一般的に条件分岐の構造は

if→elif→elseという順番(三つ以上条件があるとき)でコードを書きます。

二人用じゃんけんアルゴリズム

ここでは条件分岐を少し応用して、cpuとplayerでじゃんけんをするプログラムを考えます。

じゃんけんとは何か整理します。この作業はコードを書くうえで非常に重要です。

手の種類:グー・チョキ・パーの3種類

勝敗:グー>チョキ、チョキ>パー、パー>グー

あいこ:互いが同じ手のとき

では最初に変数を決めます。

#モジュール(ライブラリ)を読み込む
import random
#ユーザーに0か1か2を入力してもらう
player = int(input("じゃんけんの手を入力して下さい。(グー:0 チョキ:1 パー:2):")) 
cpu = random.randint(1,3)-1 #0,1,2を実行するたびにランダムで代入
g = 0 #グー
c = 1 #チョキ
p = 2 #パー

まず、変数player、cpuを設定します。

playerにはinput関数を使って、じゃんけんの手を入力してもらいます。input関数は、標準入出力関数と呼ばれる、キーボードなどから打ち込まれたものをプログラムに反映できる関数です。また、input関数はstr型で代入されるため、int型にキャストしています。

cpuにはランダムで0,1,2のどれかを代入しています。最初のimport randomは結果をランダムにしてくれるモジュールと呼ばれるものです。

モジュールに関してはここでは詳しく述べませんが、簡単にいうと外部から自身のコードに読み込める便利な関数がすでに用意されているということです。

グー・チョキ・パーはそれぞれ0,1,2に置き換えました。

次に勝敗とあいこの部分を条件分岐によって書いてみます。

#勝敗を決める
if cpu == player: #あいこのとき
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("Even!")
#プレイヤーが勝つとき
elif (cpu == g and player == p) or (cpu == c and player == g) or (cpu == p and player == c):
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("You win!")
#cpuが勝つとき
else:
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("You lose!")   

最初の条件式は、cpuとplayerが同じ値、つまりあいこのときです。

二つ目の条件式は、playerがcpuに勝つときです。勝つ場合は3パターン(g > c, c > p, p > g)あるのでand(かつ)部分でその条件を、or(または)で3パターンあることを再現しています。

最後は、残りの条件がcpuがplayerに勝つときだけなので、elseを使っています。

今までの全てのコードをまとめると以下になります。

#モジュール(ライブラリ)を読み込む
import random
#ユーザーに0か1か2を入力してもらう
player = int(input("じゃんけんの手を入力して下さい。(グー:0 チョキ:1 パー:2):")) 
cpu = random.randint(1,3)-1 #0,1,2を実行するたびにランダムで代入
g = 0 #グー
c = 1 #チョキ
p = 2 #パー
#勝敗を決める
#あいこのとき
if cpu == player: 
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("Even!")
#プレイヤーが勝つとき
elif (cpu == g and player == p) or (cpu == c and player == g) or (cpu == p and player == c):
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("You win!")
#cpuが勝つとき
else:
    print("player:"+str(player)+" cpu:"+str(cpu))
    print("You lose!") 

コピペして手元の環境で遊んでみてください。

また、最初の入力値は0,1,2であることが前提であるので、これ以外の数字や文字列を代入するとエラーになるので注意しましょう。(実際の開発ではこのようなエラーを回避するコードの書き方をするが今回は割愛)

今回は条件分岐を利用して簡単なじゃんけんプログラムを作成しましたが、条件分岐はプログラミングの基本であり、多くの場面で利用するのでぜひマスターしましょう。

まとめ

1.条件分岐とはある条件の時、何かの行動をさせるという概念をプログラム上で再現したものである。

2.条件分岐にはif、elif、elseがある。

if 条件式:

  実行したい内容

elif 条件式:

  実行したい内容

:

else:

  実行したい内容

3.条件分岐の基本の流れはif→elif→elseである。しかし、条件が二つのとき(ある条件とそれ以外のとき)はifとelse、三つ以上のときはelifを多用することで再現できる。

ミニクイズ

クイズは全部で5問あり、正解するごとに難しくなります。

復習してみてね。

Question

Your answer:

Correct answer:

You got {{SCORE_CORRECT}} out of {{SCORE_TOTAL}}

Your Answers

tomo

Recent Posts

Python入門 算術演算子と計算のルール

ここではプログラミング言語"P…

5年 ago

線形代数 線形代数の進め方

ここでは,当サイトの線形代数(…

4年 ago

線形代数 行列とは

ここでは,大学で習う線形代数に…

4年 ago

線形代数 行列の和と定数倍(スカラー倍)

ここでは,大学で習う線形代数に…

4年 ago

線形代数 正則行列

ここでは,大学で習う線形代数に…

4年 ago

線形代数 行列の積

ここでは,大学で習う線形代数に…

4年 ago

This website uses cookies.