条件分岐(前半)

教科書 Lesson 4

これ以降は、教科書の Lesson 4 の作業を進めてください。ただし 4.1 だけ、です。それが済めばすぐ次にある「確認課題」の 1. 2. に進んでください。

確認課題1. 二数のうち大きい方を出す

いくつか課題を通して理解度を確認しましょう。

入力した二数のうち、より大きな方を出力するプログラムについて考えます。以下に流れ図と、それを仮の(不完全な)コードで書き下したものを示します。

image-20231024141751204

この仮のプログラムを Python のプログラムとして完成させてください。Moodle に提出してもらいますので、ファイル名は larger.py など、Sample1.py ではない別のものに残すのが良いと思います。

動作確認

プログラムは作ったら動作確認をしましょう。このプログラムの場合、大小判定がひとつあり、入力の値の大小関係によって動作(プログラムの制御)が変わります。このプログラムが「大小関係を正しく処理できる」ことを確かめるには「すべての大小関係を代表する入力を与えて結果を確認する」のが良いです。

つまり以下のように、三通りに入力を与えるのです。

yasuda@Slack 06 % python3 larger.py
num1: 10
num2: 20
20
yasuda@Slack 06 % python3 larger.py
num1: 20
num2: 10
20
yasuda@Slack 06 % python3 larger.py
num1: 20
num2: 20
20
yasuda@Slack 06 % 

特に最後のもの「num1 と num2 が等しい」パターンを忘れないようにし。「より大きい」ことに気を取られて「同値の場合がある」ことを忘れないように。

このようにして「網羅的なテスト(ありうる条件をすべて試す)」を行うのです。

確認課題2. 三数のうち最も大きなものを出す

入力した三数のなかで最も大きな数を出力するプログラムを作成します。考え方は何通りかあると思いますが、例として上の「二数のうち大きい方を出す」ものに近い、トーナメント的な方法を示します。

image-20231024142853751

このプログラムを完成させてください。やはり Moodle で提出してもらいますから、ファイル名は max.py など、何か別のものにしておくと良いと思います。

動作確認

この課題の場合、三つの変数 num1, num2, num3 の値が 1, 2, 3 のいずれかだったとして、ありうる場合をすべて書き出してみました。つまり三つの数の大小関係については以下の 13 通りがあり得ます。

image-20231024143021263

プログラムはやはり網羅的なテストをすべきですが、しかしこれを逐一テストするのはなかなか大変です。以下のように延々とターミナル相手に数字やコマンドを入力することになります。

yasuda@Slack 06 % python3 max.py
num1: 3
num2: 1
num3: 2
3
yasuda@Slack 06 % python3 max.py
num1: 3
num2: 2
num3: 1
3
....(途中略、、、あと10回も!)...
yasuda@Slack 06 % python3 max.py
num1: 3
num2: 3
num3: 3
3
yasuda@Slack 06 % 

これ、プログラムが正しければ13回頑張ればすみますが、何かプログラムの不具合い(バグ)があった場合、プログラムを修正してまた頭から 13 回実行テストしなければなりません。さすがに嫌でしょう。

そこで、テストすべきコマンド列を03単元でやった パイプラインとリダイレクション で試した「パイプ」の機能を使って自動化することを考えます。

この課題のプログラムがおよそできた人は、次の資料 シェルスクリプト に進んで動作確認をやってください。