【Python】if文の処理の意味と使い方をプログラミング初心者に分かりやすく説明する

前回はfor文の処理の意味についてプログラミング初心者向けに分かりやすく説明してきました。今回はプログラミングで複雑な処理を実行するのに欠かせないif文の使い方とよくあるプログラミングの例題を実際に解いていきたいと思います。この記事で以下のような内容について解説しています。

・if文の条件式の書き方

・複数の条件式を指定する方法が知りたい

・よくあるif文とfor文の例題の解き方

if文とは何か

まずif文とはプログラムの中で処理を条件分岐させるときに使う構文です。条件分岐というのは例えば以下のような、YesかNoで表せる条件のことを指します。

※条件式の例

・あなたは18歳以上ですか?
・1~100の数字の中に素数はありますか? 
プログラミングのおけるYesかNoは、True(もしくは1)、False(もしくは0)と表されます。このTrue・Falseは日本語で真・偽という意味なので、真偽値と言われます。
そして、if文とは、設定した条件式が「True(Yes)であるか、False(No)であるか」で、その後の処理を分岐させるものです。if文は最も基本的な処理の1つでプログラミングの基本的な構文の中で使用頻度が一番高く、さまざまなプログラミング言語で使用されます。
というかif文を使わないプログラムなんて基本的にまず存在しないと思ってください。それくらいif文はプログラミングの要なので、絶対に理解しておきましょう。

条件式と真偽値・比較演算子

上述したように、if文とは、設定した条件式が「True(Yes)であるか、False(No)であるか」で、その後の処理を分岐させるものなわけですが、実際にコンピューターにTrueかFalseかの真偽を判断させる質問を投げかける条件式を作るためにはどうすればいいのでしょうか?

答えは比較演算子を使うというものです。プログラミングでは比較演算子を使って条件式を作ります。そして、プログラミングでの比較演算子というのは「==」「<」「>」みたいな、高校まで通っていれば数学の授業とかで一度は見たことがある不等号のようなものです。

という訳で、物は試しということでJupyter Notebookでも開いて実際に比較演算子を使ってコンピューターに質問(条件式を定義して実行)してみましょう。とりあえず以下のような条件式を書いてみます。

#100は10よりも大きい?
10<100

※結果
True

当たり前ですが、10<100という条件式で「100は10よりも大きい数字?」という内容を表しています。この条件式を実行すると100は10よりも大きいので、実行結果はTrue(Yes)と返ってきます。当たり前ですね。

では、次は以下のような条件式を書くことで「100は1000よりも大きい?」と内容を表現してみます。

#100は1000よりも大きい?
1000<100

※結果
False

当たり前ですが、100は1000より小さいので、「100は1000よりも大きい?」と聞くとFalse(No)と返ってきます。他にも比較演算子を使った条件式は2つの数字だけでなく、範囲での指定にも使用できます。

#10は0以上100以下?
0<10<100
※結果
True

 
#10は100以上1000以下?
100<10<1000
※結果
False

こういう風に比較演算子は使うことができます。今は人間でも簡単に判断できる条件式ですが、これが複雑になってもコンピューターは一瞬でTrueかFalseかを判断してくれるのでスゴイです。他にも比較演算子には以下のようなものがあります。

そして、if文というのは比較演算子で作った条件式の答えがTrueだった場合に処理を実行するというものです。

ifの簡単な例

という訳で次は比較演算子を使った条件式とif文を組みあわせて挙動を把握していきます。まずルールとして「if~」の後に設定する条件式は、TrueかFalseで表されるような形になっていないといけません。TrueかFalseで表せる形でないとif文はエラーになります。

まず実際に簡単なif文を書いてみます。

#100が10より大きければhogeをプリントする
if 10<100:
   print('hoge')

この文だと100が10より大きければhogeをプリントするということを意味しています。

for文とif文の組み合わせ

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

よくある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文でプログラミング例題を解いてみる

次は以下のような例題を解いていきたいと思います。

<例題>

① 0〜10000までの数値を1つずつ足した合計値を求めてください

② 0〜4000までの範囲で、「偶数」だけを表示してください

③ [12, 46, 61, 81, 37]の数値が入った配列を作り、その中で20以下のものには「未成年です」、20以上「OKです」とprintさせる処理を行ってください。

例題の解き方

まとめ

これを応用すると手作業でやるよりも遥かに効率的な情報処理ができるようになるので、手作業よりもプログラミングによる作業の優位性がでてきます。このif文とfor文のやっていることが理解でき、実際に状況にあった構文を自分で考えることができ始めれば、あなたも立派な駆け出しエンジニアです。

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

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

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

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

フォローする