IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第11回 条件分岐はif文で with elif・break・pass・continue (菱沼佑香) 2020年8月

吉政創成 アシスタントの菱沼です。
今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

さて、ここまで「Chapter4 プログラムを構成する基本的な機能」で上げられた、Pythonのプログラムを構成する6大要素とされているものを順番に学んできました。今回は「条件分岐」の項目を取り上げます。

<6大要素のメモ>
①計算機能
②変数(へんすう)
③繰り返し
④条件分岐    ←ココ。
⑤関数
⑥モジュール(外部機能)

if構文で条件分岐、elifを使えば短縮に。

条件分岐にはifが使われるようです。ifはExcelでも使われるので、今までプログラミングをしたことがない人にとっても馴染みはあるのではないでしょうか。
Pythonでのif構文の記述方法は以下のようになるようです。

-----引用-----
>>>if 条件文:
>>>  条件が成り立っているときに実行する文
>>>else:
>>>  条件が成り立っていないときに実行する文

条件分岐もfor構文やwhile構文と同様に、インデントして記述します。(中略)
「条件が成り立っていないときに実行する文」が必要ないときは、else:以降を省略
----------------

サンプルコードが用意されていたので、試しに動かしてみました。

fig01

(もとのサンプルコードのままだと結果がわかりにくかったので、str(a)を追加して、答えの前に変数の値を表示するようにしています。)

これを見ると、(繰り返しの処理は横に置いておいて)Excelでのif文と書式は違うものの書くことは大差ない感じなので、書き方を覚えさえすれば受け入れやすそうだなという感じがします。

<else + if =elif で短縮できる>
ifで指定した条件ではないときに、elseとifが合体した「elif」という関数を使えば、やり取りを短縮することができるようです。
これに該当する部分をテキストから全部抜き取ると結構な文量になるので、例文だけ抜き取ります。

-----引用-----
(そのまま書く場合)
>>>if ( a % 12 == 0 ):
>>> print("〇")
>>>else:
>>> if(a % 4 == 0 ):
>>> print("△")

↓↓
(elifを使う場合)
>>>if ( a % 12 == 0 ):
>>> print("〇")
>>>elif (a % 4 == 0 ):
>>> print("△")
----------------
該当する部分は太字にしました。ifが複数行に渡ってあるとちょっとうっとうしいですが、elifを使うとちょっぴりシンプルに書けるようです。

<and、or、notを使って複数の条件を指定できる>
さて、先ほど使ったサンプルでは使われていませんでしたが、and、or、notを組み合わせることも可能です。
そして、andは省略できることがあるようです。

-----引用-----
複数の条件を「かつ」で組み合わせるには「and」でつなげますが、実はPythonでは、andを省略できることがあります。
たとえば、変数aが「1以上、5以下であるか」を調べるには、ふつうは、
>>> if (a >= 1 ) and (a <= 5 )
のように記述します。しかし、これをPythonでは、
>>> if 1 <= a <= 5:
のように記述できます。このように3つ記述した場合には、前半と後半に分け、「1 <= a」と「a <= 5」をandでつなげたのと同じように解釈されます。(中略)ただしこの記法はPython独自のもので、他の多数のプログラミング言語では許されないので注意してください。
----------------

算数を思い出しますが、こう書けるならシンプルで済みますね。()が要らないのと、:(コロン)を付けることを忘れないようにしなければ...。

さて、ここまでで一回実験を挟んでみます。
テキストで、1~10までの数字に対して、とある倍数には指定の文字を表示させるという例題がありました。せっかくなので、以前のコラムでご紹介した九九計算を使ってみました。

九九計算はこう書かれます。

fig02

これを↓のように変更しました。

fig03

実際の結果は9×9まであるのですが、全部出すのは長いので一部分だけにしました。
このプログラムでは、計算結果が2、3、2と3、12の倍数の時に、指定の文字を表示させるというものにしました。結果は問題なく出ましたが、赤枠の部分を見て頂くとわかる通り、ただひたすらに鬱陶しい表示になってしまいました。
というわけで、こう変えてみました。

fig04

まず2と3の倍数に対する処理を行い、当てはまらない場合の処理をelifで指定しました。
この書き方がPythonicであるかはさておいて、しつこいくらいに主張していた結果がシンプルな結果になりました。個人的にはすっきり。

プログラムを終了する条件を設定したいときはbreak

さて、上記の実験では終了の条件を指定していなかったので、9×9まで計算されています。
出される結果の数が膨大というわけでないので、終了条件を付けなくても問題はないのですが、毎度そうはいかないので、繰り返しを止める条件の指定方法があるのかなと言えばあるようです。

-----引用-----
for構文やwhile構文では、構文の内部で「break」という特別な命令を実行すると、その時点で繰り返しを止め、繰り返しの次の行に移動します。
(中略)
while構文では、「1+2+3+...」という計算をしていき、50を超えたらその時の答えを表示するプログラムを作りました。
(中略)
>>>while totale <= 50
>>> total = total + a
>>> a = a + 1
>>>print(total)

このプログラムでは、breakを使って、次のように記述することもできます。

>>>while True:
>>> total = total + a
>>> a = a + 1
>>> if total > 50 :
>>> break
>>>print(total)

ここでは「while True」と記述して、永遠に繰り返すようにしました。そのなかで、変数aの値を1、2、...と増やしながら、変数totalに加えていきます。
>>> if total > 50 :
>>> break
この条件によって、total変数の内容が50を超えた時は、breakを実行します。この結果whileのループから抜け出し、「print(total)」が実行されて、プログラムが終了するという流れを作れます。
----------------

というわけで、先ほどのプログラムに、5の段までで終わりだよという処理を付け加えてみました。

fig05

変数aに代入された値が5より大きくなったら終了という条件を加えるにあたって、終わったよという表示も追加しました。この例ではfor文に対して、if文を使ってbreakの条件を加えましたが、while文にも同様に使えるそうです。

さて、これ以外にif文で使える関数はどういうものがあるのか?テキストにはpassが書かれていましたが、それ以外にもあるようです。

条件が成り立っているけど何も処理する必要がないとき:pass

まずはpassから。テキストでは次のように書いてあります。

-----引用-----
if文では、ときどき「条件が成り立った時に、何も実行すべきものがない」ことがあります。(中略)pythonには「何もしない文」が用意されています。それが「pass」です。以下のように記述すれば、エラーにはなりません。

>>> if 条件式:
>>> pass
>>>else :
>>> 条件が成り立たなかったとき
----------------
処理がないからそのままどうぞおすすみください~っていう感じなのかな?ということで、お試し。
まず某国民的なご一家では長女がお嫁に行き、苗字が変わられました。なので、長女をpassしてみます。(ここではforを使っていますがwhileでも使えます。)

fig06

結果はこのとおり。passされた後も処理は続いていますので、passは文字通り、通過させるようです。
ちなみにpassのあとにprintを入れていますが、これがなければ単純に「サザエは~」の行がない状態になりました。

特定の条件でそのあとの処理をスキップしたいとき:continue

指定した条件が成り立った時、そのあとに続くブロックの処理をスキップさせたいときに使うそうです。
使い方はこんな感じ。ここではforを使っていますがwhileでも使えます。

fig07

結果を見るとわかる通り、passとは違い、continueのブロックに処理[print("サザエはふぐたさんです。")]を入れてもスルーされ、次の処理(カツオちゃんの自己紹介)に移りました。
なお、エラーメッセージは「SyntaxError: 'continue' not properly in loop」になるそうです。

と、今回はif文とそれに関係するelif、break、continue、passについて学習しました。どれも良く使うもののようなのでしっかり覚えておきたいと思います。
それでは今回はこちらで終了です。お付き合いいただき、ありがとうございました。

【参考サイト】

Pythonのif文による条件分岐の書き方|note.nkmk.me

Pythonのelifの書き方を現役エンジニアが解説【初心者向け】|TECH ACHADEMY

Pythonのwhile文によるループ処理(無限ループなど)|note.nkmk.me

Pythonのbreak文とcontinue文の使い方|UX MILK

Pythonのpass文の意味と使い方|note.nkmk.me

while, forループのelse|Python Snippets

【python入門者必見!】breakの基本と応用を徹底解説|WEBCAMP

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes