【Python】チンパンジーでもわかるif・for文の処理の意味と使い方

スポンサーリンク

今日他人にPythonを教えていて、改めてif文とfor文について思ったことがあったので、記事にしていきたいと思います。

if・for文はプログラミングの大きな関門

プログラミングと言えば、if・for文ですよね。世の中には多くのプログラミング言語がありますが、これがない言語はまずありません。

どのプログラミングの参考書を読んでいてもこいつらは出てきます。こいつの意味が分かれば、人手不足のIT業界なら立派なプログラマーという人もいます。

ですが、こいつらがプログラミングを始めた人が一番詰まるところでもあります。参考書を開くと、四則演算とかがまず出てきて足し算引き算割り算の練習をします。ここまでは誰でもわかります。ですが、if・for文で90%が脱落します。そして生き残った10%がプログラマー(PG/SE)となります。

ですが、if・forはプログラミングの基本、というかプログラミングそのものです。というのもプログラミングはほぼ全て「条件分岐」と「繰り返し」からなります。繰り返しをfor文(while文)で行い、そこにif文で条件分岐を行っていきます。

こいつらを何のためにあるのか?

こいつらは何のためにあるのかというとデータを処理するためです。当たり前だろ・・・と思うですが、初心者の人が躓くのはこれを意識していないからではないからでは?と最近思い始めました。問題を解くという形でif・for文と向き合っているからその本質を理解できないんじゃないかなと。

for文とはなにか?

for文は繰り返し処理を行う関数です。Pythonだと「for 変数 ㏌ リスト型などのデータ」みたいな宣言方法になります。そして:以下の処理を指定された回数実行するという文です。

つまり、for文ののやっている作業は、「データの集まり」から、「データを一つずつ取り出す」という作業です。この「データの集まり」部分には、リストが一般的ですが、リスト以外の様々なオブジェクトを置くことが可能です。

例文でよくあるのは

for i ㏌ range(1,10):

  print(暇人)

みたいなコードです。これはなにを意味するのかというと、iという変数を定義し、そこに1から9が入ったリスト(1,2,3,4,5,6,7,8,9)から1つずつ値を代入しているという処理です。この場合iに1が入ったら:以下の処理を実行し9になったら終了ということなので、最終的には9回、print(‘暇人’) という処理をするということを表しています。なので結果は↓のようになります。

暇人
暇人
暇人
暇人
暇人
暇人
暇人
暇人
暇人

ここでのiはリストから代入した数値の入れ物として適当に定義する変数なので、別にiでなくても処理は成立します。(文法マナー的にはiがベストです。)

今回は単純に1から9の数字を入れたリストですが、実務ではラベルと数値が入ったリスト型をに対してこの処理を行うのが一般的です。またrange(10)であれば、0~9の数値が入ったリストになります。

for文はリスト型ならなんでも行けるので数値だけではなく、文字列でも実行できます。

スポンサーリンク

for文とif文の組み合わせ

上のfor文だけでは同じ処理を指定した回数だけ繰り返し行う処理しかできませんが、ここにif文を入れると処理を少し複雑にすることができます。

よくあるif・for文の例題は1から100までを出力して、偶数で割り切れるかそうでないかを場合分けしろ的なやつですよね。Pythonだと、

for  i  in  range(1,10):

            if i%2==1:
                     print(‘奇数’)

           elif i%2==0:
                     print(‘偶数’)

みたいな処理になりますよね。んで返ってくる結果は↓みたいな感じです。これはまずfor文で1から9まで、つまり9回繰り返し処理を実行する中で、そこにif文を使ってその処理を条件に合わせて分岐させているに過ぎません。

奇数
偶数
奇数
偶数
奇数
偶数
奇数
偶数
奇数

個人的にここで初心者が詰まる理由は真偽値(TRUE、FALSE)を理解していないからだと思うんですよね。参考書とかでも真偽値は絶対に紹介されています。ですが、この真偽値をどう使っているかをちゃんと説明していない本が多いように思います。だから真偽値の次にif・for文の説明に入って脱落してしまう人が多いんじゃないかな?と思います。

このコードだと「 i 」というという変数(データの入れ物)に1から10までの数字が入っていきます。そして、その過程で処理を条件分岐させるためにif・elif文を使っています。じゃあこのif文はなにを基準に条件を分岐させているのか?←ここをちゃんと理解していない人が多いと思うんです。だから自分でコードが書けないんだと思うんです。

当たり前ですが、ここでif分が分岐条件に満たすかどうか判断する基準は:の前の条件式です。この:の前の条件式がTRUEかFALSEかでif文は:以下に書いた処理を実行するか判断しています。if文は:の前の条件式の結果がTRUEなら実行しますし、FALSEなら実行しません。

つまり上のサンプルコードは何をしているのかというと

for a in range(1,10):

             if i%2==1:
                       print(‘奇数’)

            elif i%2==0:
                       print(‘偶数’)

※range(1,10)の場合、iには1から9が入ります。%は割り算の余りを返す式です。

まず「i」に1という値が入り、それを使ってif文の:の前の条件式の計算をします。この場合だとまずiに1という数値が入ります。なのでif文の:の前の条件式は 1%2 ということになります。この場合、余り1なので、ここでの「i%2==1」は、1==1で不等号は成立し条件式の結果はTRUEになります。

if文は:前の条件式の結果がTRUEの場合、:以下の処理を実行する関数なので、1==1で条件式はTRUEであるため、:以下の奇数と表示するprint(‘奇数’)という処理が行われます。これが結果の1行目に奇数が表示される過程です。

そして、次に i に2という数値が入ります。同じようにそれを使ってif文の:の前の条件式の計算をします。この場合だとi=2なのでif文の:の前の条件式は 2%2 ということになります。すると、余りは0なので、ここでの「i%2==1」は、0==1で不等号は成立しません。なので条件式の結果はFALSEになります。

if文は:の前の条件式の結果がFALSEなので、:以下のprint(奇数)という処理を行いません。そして、elif文に入ります。このelif文の条件式は i%2==0  です。i=2なので条件式は  2==2 となり、条件式は成立します。なので:以下のprint(‘偶数’)という処理が実行され、2行目に偶数と表示されます。

この処理をi=3、i=4・・・とi=9まで繰り返した結果↓な表示となるわけです。

奇数
偶数
奇数
偶数
奇数
偶数
奇数
偶数
奇数

今回はrangeを(1,10)にしていたので9までですが、ここを変えると100でも1000でも同じ処理ができます。そして、この文の意味はfor文で繰り返す回数(範囲)を決めて、「i」という変数にデータを1つずつ代入&上書きしていって、その都度ごとにif文で条件分岐させ、条件に合った処理を実行しているのです。

最初の「for 変数 ㏌ 実行範囲」のところはこの記事の分だとiですが、変数ですのでiじゃなくてもAでもAPPLEでも何でもいいです。また実行範囲のところは今回は1~9を表すrange(1,10)でしたが、list型などのデータ型の変数でも問題ないです。むしろ実務ではここは時系列データなどが数値とラベルが格納されている変数になることが一般的でしょう。

これを応用すると手作業でやるよりも遥かに効率的な情報処理ができるようになるので、手作業よりもプログラミングによる作業の優位性がでてきます。このifとforのやっていることが分かればあなたも立派なエンジニアです笑

自分は今まで数十冊以上のPythonの参考書を読んできましたが、その中でも初心者むけのPythonの参考書ならわかるPython[決定版] というのがかなり分かりやすく実践的な理解も深まったので独学でPythonを勉強しているなどプログラミングを初めたての人にとてもオススメなので紹介しておきます。

ただこの本はPythonの文法とプログラミングの基礎については分かりやすく書いてくれていますが、代表的な作業環境であるAnaconda・Jupyter notebookについては触れられていないので、そちらについては別の本を買った方がいいと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする