見出し画像

ハジメの一歩会② 条件分岐編

ハジメの一歩会、はじまるよぉ~~~!!!
という、毎度おなじみ(にしたい)挨拶と共に、今回も無事に開催です。
※前回の変数編のまとめも、ここに付けておきますね。

毎回恒例の会の趣旨など。いい加減説明を省こうかとも思うけど、初めて参加の方も(きっと)いらっしゃるので念のため。
プログラミングをしてみたいけど、どこから手を付けていいかわからない方へ送る「超」初心者向け勉強会です。
開発言語や開発ツールに寄せず、基本的な内容を説明したいと思っています(が、説明はPythonよりの説明になってるので若干反省気味)。

では早速条件分岐を見ていきましょう。
コインの表裏で、右に行くか左に行くかを判断したい。確かに、人生の縮図ですね(笑)
実は、下の絵には罠があります。
コインの表と裏で判断をしているのですが、可能性としては横で立つ可能性もゼロじゃないのですが、下のif文では「表」が出たときだけ右へ行き、それ以外(横も含む)(=elseの箇所)は左へ行くことになっています。仕様(?)は左に行くのは「裏」の時だけなので、ロジック的には微妙にバグを含んでいますが、ここに気づけた人、いらっしゃいますかね?w

続いて、前回の変数編の復習をしつつ問題①
国語・数学・理科・社会・英語の合計得点を計算し、400点以上は「合格」と表示。400点未満は「追試」「不合格」と表示する。
各教科の得点を変数に入れて、合計を計算。IF文で400点以上かどうかを判断して、結果を表示。という流れです。
ここで、百合宮さんから「変数がキャメル式じゃない!!」というツッコミが…(笑)
確かに…ごめんなさい🙇
めんどくさくて、適当な変数にしてしまいました^^;
この「めんどくさい」という考え方が、良くないですね!!

ここまでは、条件分岐が1つだけのIF文でしたが、ここでは複数条件を書く場合にどうすべきか、という話です。
Aquaさんから、「…お酒『が』飲む人」じゃなくて、『を』ですよね、というツッコミを頂きました。確かに、おっしゃる通り(笑) 資料は修正したのですが、ツィートは修正できないので、とりあえず、このままw
字が小さいですが、IF文の次にELIF(Else if)で繋いでいます。
ここで、少しIFの基本の流れです。

IF ○○
 △△
ELSE
 □□

上記は、○○の条件を満たす時、△△を実行。違う場合、□□を実行。
となります。

IF ○1
 △1
ELSE IF ○2
 △2
ELSE IF ○3
 △3
ELSE
 □

上記は、条件○1を満たす時、△1を実行。
○1を満たさない場合、○2を判定。満たす場合は、△2を実行。
○2を満たさない場合、○3を判定。満たす場合は、△3を実行。
○3を満たさない場合、□を実行
という流れになり、こんなに条件分岐を設定しているのに、IF文としては1つだけになります。

そして、本日の名言!
「条件分岐は、まさに品質の分岐点」
IF文の並べ方や条件の書き方で、思った通りの動きにならないことも多々あります。きちっと理解できるよう、いろいろとトライしてみましょう!

条件分岐といえば、IF文ですが、他の書き方もあったりします。
IF文で複数の条件を書くと、どの時にどのルートを辿るのか可読性が下がり、結果としてバグの温床になります。やっぱりプログラムは見やすく作りたいですよね。
ということで、複数の条件がある場合、IF文で書くよりもすっきり書ける方法もあります。

Switch Case / Select Case文ですね。言語系によって、どちらかになります。
Switch文で行くと、本来、各Caseの最後に「break文」を入れて、そのCaseを抜ける処理を入れる必要があります(テクニックとしてあえて書かない方法もありますが、一般的には書いた方が可読性が上がります)。
→ ここでは「敢えて」書いてありません(笑)

さて、PythonにはこのSwich Case文にあたる複数分岐がありません。調べてみると、何回か実装にチャレンジしてみたんだけど、「無くてもいいじゃん」という結論になったみたいです(笑)
が、3.10系からついに実装されたようです(りなたむ先生、ありがとう!)

また、Pythonでは、こんな書き方もあるようです。
連想配列と呼ばれるものですね。勉強にします🐟
配列については、第4回でやりますが、連想配列は言語系によるところがあるので、ちょっと保留です。出戻りガツオさんが先生してくれるなら…(笑

そして、条件分岐の総仕上げですかね。
複数条件、複数分岐をどう処理するのか?
組み方はいろいろありますが、ここでは下記のように組んでいます。
①まず、OSの違いで大枠の条件分岐を作成
②大枠の分岐の中でさらに値段毎のIF文を作成

ここで注意点。
今回、ここではELIF(ELSE IF)で繋いでいます。ELIFではなく、各条件をIF文で書いた場合とでは、どのような処理の違いになるでしょうか?

下のパターンは、複数の条件分岐をElse IFを使わず、それぞれIF文で書いたパターンです。「{」はIF文の処理範囲になり、ここではIF文がそれぞれで合計3回評価(条件判断)されることになります。
a=3500の時、「Y」とだけ表示させたいのに、「XY」となってしまうことに注意が必要です。

一方で下のパターンは、ElseIFで繋いだパターンです。こちらはIF文としては1つだけになりますので評価は1回です。
a=3500の時、「Y」と表示させたいのですが、先にa>2000が評価されてしまい、結果「X」しか表示されていません。
ここでは、評価の順を変更してあげると、正しく「Y」と表示されるようになります。

以上を踏まえて、先ほどの問題②を解くと、下記のようになります。

IF文の評価のされ方①②は、Space回では口頭のみの説明だけだったため、わかりにくかったかもしれません。
IF文なんて、ちょろいちょろい!と甘く見てると、ドはまりすることもあるので、自分でいろんなパターンを納得いくまで試してみましょう♪

さて、次回予告です。
次回は、10月3日(月)と6日(木)になります。
※金曜定期開始はいずこへ…?!😅

ちなみに、こちらは別回で検討したいと思います。

元ツイはこちら…

資料はこちら

次回は、繰り返し処理編です。

この記事が気に入ったらサポートをしてみませんか?