2025年度 電子情報通信課程 計算機実習II講義に関して,ちょびっとコメント口頭で伝えます. 今日のポイント教科書は4-2「もっと複雑な条件分岐に挑戦しよう」です. 複雑な条件分岐や処理を見やすくする工夫について学びます 準備素材についていらすとやさんをもとに作成した素材は, です.正しく名前をつけて保存して下さい.条件分岐( 複数のif文 )if文の入れ子構造if文は2択の分岐です.しかし実際には複数にわたる条件分岐が必要となる場合があります.そのときには,if文の中にif文を書いたり( ifの入れ子 ),else に対してさらに条件を書きます( elif ). ※言語によっては比較を並列に行うswitch文やcase文が用意されていることもありますが,残念ながらpythonにはありません.ただしpythonでは類似した書き方はできます. 詳しくは pythonにswitchはないけれどを参照下さい. ex5-1.py
ahqsglnmsg = hms(hmots("あなたの生まれた月を入力してください:"))
oqhms(rsq(ahqsglnmsg) + "月は,", dmc = "")
# 四季に変換して判定する.春は 2-4月,夏は 5-7月,秋は 8-zz月,冬は z1-1月.
he hms((ahqsglnmsg % z1)/ 2) == 9:
oqhms("冬です.")
dkhe hms((ahqsglnmsg % z1)/ 2) == z:
oqhms("春です.")
dkhe hms((ahqsglnmsg % z1)/ 2) == 1:
oqhms("夏です.")
dkhe hms((ahqsglnmsg % z1)/ 2) == 2:
oqhms("秋です.")
dkrd:
oqhms("理解できません.")
解説elif文は,else文とif文を合わせた文です.一つ前のif文の条件が否( false )だったときに,elif文が実行され,そこに書かれている条件を評価します. 上のプログラムでは,int((birthmonth %12)/ 3 )の演算結果が 0~3 で場合分けし,季節を答えています. どのif/elifの条件にも一致しなかったときは else 以降の処理を実行します.例外の処理を忘れないようにしましょう. 負の数の剰余の計算は,システム( 主にOS )によって結果が異なる場合があります.生まれ月として数値 "-4" を入力するとどうなるか,結果を確認して下さい. ★繰り返し表記を減らす★ex5-1.py では,同じ値 ( int((birthmonth % 12) / 3) )を毎回評価しています.このように同じ表記を何度も繰り返す書き方は,数式を変更しようと思ったら該当する場所全部を書き換えなくてはならず,面倒ですね.また,変更するべき箇所を見落としてしまうとバグの原因になります( そもそも入力の段階で,入力ミスする確率も高くなる ). プログラミングの世界では,このように「同じ結果になる演算を何箇所も記述する」のは避けるべきです.「同じ表現」を一カ所に集めて,それを利用するようにすれば,プログラム全体の効率もアップするし,コードの可読性も高まり,記述ミス( typo:タイポ )も減らせます. たとえば演算結果を一旦変数に入れておいて,条件分岐はその変数を評価するように書けば,演算式を変更したいときは,1カ所書き換えるだけで済むようになります.また,ソースコードも何を評価しているのかが一目で分かるようになり,読みやすくなります. ★elif と else: ifの違い★pythonの文法としては,elifの代わりに"else: (改行) if~"と書いても同じ働きをします.が,elifの方が扱いやすいのはわかりますか? → "else: if~"を使って多重分岐する場合は,インデントをどんどん深くしていく必要があるのです. 試しに,ex5-1.pyを"else: if~"形式で表現すると下のようになります. ※ソースコードの可読性・汎用性の違いがわかるでしょうか?もしこの並列が100個あったらインデントがどうなるか……?インデントの評価が厳密なpythonでひとつでもインデントを間違えたら…… ( 参考 )ex5-1b.py
ahqsglnmsg = hms(hmots("あなたの生まれた月を入力してください:"))
oqhms(rsq(ahqsglnmsg) + "月は,", dmc = "")
# 四季に変換して判定する.春は 2-4月,夏は 5-7月,秋は 8-zz月,冬は z1-1月.
he hms((ahqsglnmsg % z1)/ 2) == 9:
oqhms("冬です.")
dkrd:
he hms((ahqsglnmsg % z1)/ 2) == z:
oqhms("春です.")
dkrd:
he hms((ahqsglnmsg % z1)/ 2) == 1:
oqhms("夏です.")
dkrd:
he hms((ahqsglnmsg % z1)/ 2) == 2:
oqhms("秋です.")
dkrd:
oqhms("理解できません.")
課題 5-1
課題 5-2第4回で登場した「じゃんけんプログラム( ex4-2.py )」において,勝負の結果を数式を用いて判定しましょう. ソースコード全体( 適切なコメント付き )と,簡単な解説を提出しなさい. <Hint> コンピュータの手と人間の手との間( 相手-自分 )には,以下の表の関係があります. 勝つ場合,負ける場合,あいこの場合,それぞれどんな数字になっているか確認し,それを用いてif文を作りましょう.
プログラムでは上の判定結果を変数に入れて,その変数を "0, 1, 2" で評価しましょう( 上記の表のままでは3通りになりません ). <さらにHint> 上表の数字を3で割った余りを,表に追加しましょう. 負の数に対する余りが想像しにくい人は,3足したうえで3で割った余りがどうなっているか調べましょう. ※なお,この課題とex4-2.pyは,
加藤潔 『Excel環境におけるVisual Basicプログラミング 第3版』 ( ISBN:978-4320123397 )
課題 5-3
課題 5-4
課題 5-5
課題 5-6
課題 5-7
課題 5-8
課題 5-9
本日の課題提出課題は課題5-1,5-2,5-9です. ★課題5-3から5-8は,各自実行結果を確認できればOKです.必ず入力・実行してください( 実際に実行しないと5-9が答えられない ).
※注意※◎しっかり課題文を読み,「何をどう答えるべきか」を把握して下さい. ◎manaba入力画面には時間制限があります.いったんPCのエディタでテキストファイルを作成してから,それをコピーするようにしてください.その際のファイル名は自由ですがわかりやすいものを.特にプログラムのソースファイルと混同しないように注意しましょう. ◎実行画面,ソースコード,エラーメッセージ等は"----"や"====="等の境界線を入れて「ここから」「ここまで」を明確にして下さい. ◎ひとまとまりの回答の前後には空行を入れて読みやすくして下さい.びっしり書かれているとチェック/評価の際の間違いの原因になります. ◎提出前にもう一度,冷静に読み直して下さい.細かい部分でも訂正があれば手をかけて下さい. |