![見出し画像](https://assets.st-note.com/production/uploads/images/87770425/rectangle_large_type_2_7bd66b6bcc71dc09b1f75414d0f79cac.png?width=1200)
ハジメの一歩会② 条件分岐編
ハジメの一歩会、はじまるよぉ~~~!!!
という、毎度おなじみ(にしたい)挨拶と共に、今回も無事に開催です。
※前回の変数編のまとめも、ここに付けておきますね。
ハジメの一歩会、はじまるよぉー!!
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
#ハジメの一歩会 pic.twitter.com/SrDtIh3IOS
毎回恒例の会の趣旨など。いい加減説明を省こうかとも思うけど、初めて参加の方も(きっと)いらっしゃるので念のため。
プログラミングをしてみたいけど、どこから手を付けていいかわからない方へ送る「超」初心者向け勉強会です。
開発言語や開発ツールに寄せず、基本的な内容を説明したいと思っています(が、説明はPythonよりの説明になってるので若干反省気味)。
#ハジメの一歩会 pic.twitter.com/Af0Q8il8yl
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
では早速条件分岐を見ていきましょう。
コインの表裏で、右に行くか左に行くかを判断したい。確かに、人生の縮図ですね(笑)
実は、下の絵には罠があります。
コインの表と裏で判断をしているのですが、可能性としては横で立つ可能性もゼロじゃないのですが、下のif文では「表」が出たときだけ右へ行き、それ以外(横も含む)(=elseの箇所)は左へ行くことになっています。仕様(?)は左に行くのは「裏」の時だけなので、ロジック的には微妙にバグを含んでいますが、ここに気づけた人、いらっしゃいますかね?w
#ハジメの一歩会 pic.twitter.com/mSYQa6KzOn
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
人生そのものとみた
— Kei Inoue (@ke11noue) September 26, 2022
#ハジメの一歩会
続いて、前回の変数編の復習をしつつ問題①
国語・数学・理科・社会・英語の合計得点を計算し、400点以上は「合格」と表示。400点未満は「追試」「不合格」と表示する。
各教科の得点を変数に入れて、合計を計算。IF文で400点以上かどうかを判断して、結果を表示。という流れです。
ここで、百合宮さんから「変数がキャメル式じゃない!!」というツッコミが…(笑)
確かに…ごめんなさい🙇
めんどくさくて、適当な変数にしてしまいました^^;
この「めんどくさい」という考え方が、良くないですね!!
#ハジメの一歩会 pic.twitter.com/Tc9pOZ0fgQ
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
#ハジメの一歩会 pic.twitter.com/7aAwHi0EAo
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
ここまでは、条件分岐が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つだけになります。
#ハジメの一歩会 pic.twitter.com/g89dxBGvgo
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
#ハジメの一歩会 pic.twitter.com/dbhPMV1IZT
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
そして、本日の名言!
「条件分岐は、まさに品質の分岐点」
IF文の並べ方や条件の書き方で、思った通りの動きにならないことも多々あります。きちっと理解できるよう、いろいろとトライしてみましょう!
条件分岐箇所は開発においてよく不具合が発生する箇所になります
— UT@BackendEngineer&TechnicalDonor (@hidemusiam) September 26, 2022
まさに品質の分岐点でもあります#ハジメの一歩会
条件分岐といえば、IF文ですが、他の書き方もあったりします。
IF文で複数の条件を書くと、どの時にどのルートを辿るのか可読性が下がり、結果としてバグの温床になります。やっぱりプログラムは見やすく作りたいですよね。
ということで、複数の条件がある場合、IF文で書くよりもすっきり書ける方法もあります。
#ハジメの一歩会 pic.twitter.com/X3A5VrQtDA
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
Switch Case / Select Case文ですね。言語系によって、どちらかになります。
Switch文で行くと、本来、各Caseの最後に「break文」を入れて、そのCaseを抜ける処理を入れる必要があります(テクニックとしてあえて書かない方法もありますが、一般的には書いた方が可読性が上がります)。
→ ここでは「敢えて」書いてありません(笑)
#ハジメの一歩会 pic.twitter.com/T74AuUHFiY
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
さて、PythonにはこのSwich Case文にあたる複数分岐がありません。調べてみると、何回か実装にチャレンジしてみたんだけど、「無くてもいいじゃん」という結論になったみたいです(笑)
が、3.10系からついに実装されたようです(りなたむ先生、ありがとう!)
@_0447222690292
— かおり (@mocca1103) September 26, 2022
Pythonでは、match文を利用するようです! https://t.co/ClYwvZX2P2
また、Pythonでは、こんな書き方もあるようです。
連想配列と呼ばれるものですね。勉強にします🐟
配列については、第4回でやりますが、連想配列は言語系によるところがあるので、ちょっと保留です。出戻りガツオさんが先生してくれるなら…(笑
dict = {"月曜":"もえるゴミ",
— 出戻りガツオ🐟 (@DemodoriGatsuo) September 26, 2022
"火曜":"もえるゴミ",
"水曜":"もえるゴミ",
"木曜":"もえるゴミ"}
print(dict["月曜"])
そして、条件分岐の総仕上げですかね。
複数条件、複数分岐をどう処理するのか?
組み方はいろいろありますが、ここでは下記のように組んでいます。
①まず、OSの違いで大枠の条件分岐を作成
②大枠の分岐の中でさらに値段毎のIF文を作成
#ハジメの一歩会 pic.twitter.com/7yIcQ6cknK
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
#ハジメの一歩会 pic.twitter.com/vl0xnGq7uD
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
ここで注意点。
今回、ここではELIF(ELSE IF)で繋いでいます。ELIFではなく、各条件をIF文で書いた場合とでは、どのような処理の違いになるでしょうか?
下のパターンは、複数の条件分岐をElse IFを使わず、それぞれIF文で書いたパターンです。「{」はIF文の処理範囲になり、ここではIF文がそれぞれで合計3回評価(条件判断)されることになります。
a=3500の時、「Y」とだけ表示させたいのに、「XY」となってしまうことに注意が必要です。
![](https://assets.st-note.com/img/1664266674427-XObsKhPZVr.png?width=1200)
一方で下のパターンは、ElseIFで繋いだパターンです。こちらはIF文としては1つだけになりますので評価は1回です。
a=3500の時、「Y」と表示させたいのですが、先にa>2000が評価されてしまい、結果「X」しか表示されていません。
ここでは、評価の順を変更してあげると、正しく「Y」と表示されるようになります。
![](https://assets.st-note.com/img/1664266952209-eIIFVAz37f.png?width=1200)
以上を踏まえて、先ほどの問題②を解くと、下記のようになります。
#ハジメの一歩会 pic.twitter.com/vl0xnGq7uD
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
IF文の評価のされ方①②は、Space回では口頭のみの説明だけだったため、わかりにくかったかもしれません。
IF文なんて、ちょろいちょろい!と甘く見てると、ドはまりすることもあるので、自分でいろんなパターンを納得いくまで試してみましょう♪
さて、次回予告です。
次回は、10月3日(月)と6日(木)になります。
※金曜定期開始はいずこへ…?!😅
#ハジメの一歩会 pic.twitter.com/N9Vpv2ZBqE
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
ちなみに、こちらは別回で検討したいと思います。
ざっくりとでいいので、図を起こすのは大事ですよね。
— かーでぃ@ガノタなIoTプロフェッショナル (@_0447222690292) September 26, 2022
あぁ…図の書き方の会があってもいいかも!
元ツイはこちら…
Power Automateでステップ実行的にやるなら、都度、終了アクションいれるとかしたらいいんじゃないかな?
— たな🐼 (@dreams_panda) September 26, 2022
あとはアクション無効化。
それより、ちょっとずつ作りましょう。
#ハジメの一歩会
資料はこちら
次回は、繰り返し処理編です。
いいなと思ったら応援しよう!
![かーでぃ / KAMADA Makoto](https://assets.st-note.com/production/uploads/images/168208905/profile_5e75ab9803122eb4c37ec6e9ab86e5b1.jpeg?width=600&crop=1:1,smart)