第5回 制御構文 (2)

本題に入る前に必ず連絡の動画を見てください。
Google Colabへのリンク

1. match~case構文

概要

動画の解説を参照

matchcase を使うと、match の後に記述した変数の値に応じて特定の命令を実行させることができます。

case の後に記述するものを「|」で結ぶと、「その中のどれかなら」という判定になります。
また、case の後に記述するものを「_」とするとそれより前のどれでもない場合の処理ができます。

match~case構文でリストを判定に使うこともできます。
「_」と「*_」はどちらもワイルドカードですが、「_」は1個、「*_」は任意個数の要素に対応します。

変数の型を判定することもできます。
キーボードからの入力
「input」を使うとキーボードから文字を入力させることができます。

ただし、入力したものがどのようなものだったとしても、左辺の変数は文字列型になります。

課題1

キーボードから入力したものが、自分の氏名のどれかと一致するかを判定し、それに応じたメッセージを表示するコードを書いてください。
(入力するものを変えてみて、判定が正しく行われているかどうか確認してください。条件を満たすケース・そうでないケースの両方のパターンをコードに残す必要はありません)

2. 繰り返し

動画の解説を参照

for文を使うと、その下のブロックの命令を繰り返して実行させられます。
「for」の後ろにはさまざまな形のものを入れられます。
range関数を使う場合は、実行のたびにカウンタ変数 (以下の例では i) が変わっていきます。
引数が1つの場合はカウンタ変数は0から始まって1ずつ増え、引数の値に達する直前で終了します。

引数が2つの場合はカウンタ変数は range関数の第1引数の値で開始します。
このときも1ずつ増え、第2引数の値に達する直前で終了します。

第3引数がある場合は、実行のたびにその値だけ変化します。

第3引数が負の値だと、カウンタ変数はだんだん減っていきます。

リストの要素に対する繰り返しは以下のように書きます。

文字列の中のそれぞれの文字もリストの要素と似た「列挙可能な型」として扱われる (イテラブルといいます) ので、同様にfor文での繰り返しができます。

while文でも繰り返しを行えます。
「while」の後に書く条件が成り立っている限りその後のブロックの命令を繰り返して実行します。
for文とは異なり、「カウンタ変数の初期値を決める」「実行時のカウンタ変数の変化」の処理をwhile文とは別の場所に書く必要があります。

特に、カウンタ変数を変化させる処理を忘れると無限ループになってしまうことがあるので注意が必要です。
前項で見たように、inputで入力したものは文字列型になりますが、「int」でキャストすると整数型に変換できます。

ただし、キーボードから「abc」のように整数化できないものを入れてしまうとエラーになります。

エラーによってコードが停止することを防ぐには、try~except構文を使います。
try の下には実行したい処理を書き、exceptの下にはエラーが起きた場合の処理を書きます。

こうすれば整数でないものを入力してもエラーで停止することはなくなります。
while文の継続条件 (whileの直後に書く条件) をTrueにすると無限ループになりますが、例えばキーボードからの入力が想定した条件に合うまで繰り返させたいときはこれが役に立ちます。
「break」はループを強制的に抜ける命令です。以下のコードでは整数以外のものを入力した場合は再度入力、整数を入力するとそれを表示して終了します。

課題2

※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。


キーボードから値を入力させ、それが整数でない場合は「入力できるのは整数だけです」、で割り切れない場合は「で割り切れる数を入力してください」と表示してやり直させ、 割り切れる場合は割り算の式を表示して終了するコードを書いてください。
※ 実行して「整数でないもの」「割り切れないもの」「割り切れるもの」の順に実行して動作を確認し、提出時もその状態にしてください。
(実行例)

3. 入れ子の繰り返し

動画の解説を参照

前回みた条件分岐の入れ子と同様に、繰り返しでも入れ子の構造を作れます。
例えばこのようにすると九九の表を表示させられます。
「: >3」は「3桁分に揃えて右に寄せる」という書式です。

同様に、干支 (えと) の60パターンもこのようにして表示させられます。
(「十干(じっかん)」と「十二支(じゅうにし)」の組合せは数学的には120通りですが、実際にはそれぞれの偶数番目どうし、奇数番目どうしの組合せしかないのでその半分の60通りになります)
上記のものは60パターンを列挙しているだけで実際の年ごとの順番にはなっていません。
このようにすれば順番に表示させられます。

課題3

入れ子の繰り返しを使い、以下のようなものを表示するコードを書いてください。

提出

今回作成したノートブックを「plang2024a@gmail.com」と共有してください。
※ 課題の再提出の際は、ノートブックの再度の共有はせずにチャットで連絡してください。