コンピュータ演習II 第09回 ドリル(授業中に解いて提出)¶

この問題集は、授業中に、解説を聞きながら自分の手を動かして解く 練習です。第09回の教材で学んだ 整数以外のリスト、range の応用(ステップと逆順)、入れ替え(swap) を、各節 1〜2 問ずつ練習します。

各問は「好きな値で入力を作り、こう処理してください」という形です。入力のリストは自分で自由に作ってください。作り方は各問の「入力の作り方」に示します。

進め方は次のとおりです。

  • 配布の 解答用テンプレート 2xBxxxxx_09_drill.ipynb を Colab で開き、各問題の「入力の作り方」に従って自分でリストを作り、その下に処理を書いて実行してください。
  • 各問には 入力例と出力例 を載せています。イメージがつかめないときは、まず入力例のとおりに動かしてから、自分の値に変えてください。
  • いくつかの問題には ヒントのフローチャート を載せています。まず流れをつかんでから、それを Python に翻訳して書いてください。ヒント図の変数名は例です。自分でつけた名前に読み替えてください。
  • できたら、テンプレートを .py 形式でダウンロードして提出 してください。答え合わせはしません。自分で入力を決めて、思ったとおりに動くかを確かめることが目的です。
  • わからなくなったら、第09回の教材を見返してかまいません。ただし、各問は教材の例から 少しだけ変えて あるので、そのまま写しても解けません。どこが違うかを考えて、自分で書いてください。

なお、この演習では Colab のコード生成(生成AI の補完)は使わないでください。自分でプログラムを書いて、読めるようになることが目的です。

1. 整数以外のリスト(文字列など)¶

問題 1: 各文字列の文字数を出力¶

好きな文字列を5 個入れたリストを作り、for 文で 各要素の文字数 を1 行ずつ順に出力してください。文字数は len() で数えられます。変数名は自分で決めてかまいません。

入力の作り方:

好きな変数名 = [好きな文字列を5 個]

入力例:

words = ["dog", "cat", "bird", "fish", "frog"]

出力例(入力例のとき):

3
3
4
4
4

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


問題 2: 前から2 番目と後ろから2 番目¶

好きな整数を5 個入れたリストを作り、前から2 番目の要素 と 後ろから2 番目の要素 を1 行ずつ出力してください。後ろから2 番目には負のインデックスを使ってください。

入力の作り方:

好きな変数名 = [好きな整数を5 個]

入力例:

numbers = [10, 20, 30, 40, 50]

出力例(入力例のとき):

20
40

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


2. range の応用(ステップと逆順)¶

問題 3: 奇数番目の要素¶

好きな整数を5 個入れたリストを作り、range のステップを使って 奇数番目(インデックス 1, 3)の要素 を1 行ずつ出力してください。教材の例(偶数番目)とは開始の値が違います。range(開始, 終了, ステップ) の開始をくふうしてください。

入力の作り方:

好きな変数名 = [好きな整数を5 個]

入力例:

numbers = [11, 22, 33, 44, 55]

出力例(入力例のとき):

22
44

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


問題 4: 後ろから1 つおきに出力¶

好きな整数を5 個入れたリストを作り、range の逆順とステップを組み合わせて、末尾から1 つおき(インデックス 4, 2, 0) に要素を1 行ずつ出力してください。ステップに -2 を使います。

入力の作り方:

好きな変数名 = [好きな整数を5 個]

入力例:

numbers = [11, 22, 33, 44, 55]

出力例(入力例のとき):

55
33
11

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


3. 入れ替え(swap)¶

問題 5: 3 つの値のローテーション¶

好きな整数を3 つ、変数 first、second、third に入れてください。tmp を1 つ使って、first の値が second へ、second の値が third へ、third の値が first へ移るように入れ替え(3 つの値のローテーション)、print(first, second, third) で1 行に出力してください。教材の「2 つの値の入れ替え」と同じで、消えてしまう値を先に tmp へ逃がすのがコツです。

入力の作り方:

first = 好きな整数
second = 別の好きな整数
third = さらに別の好きな整数

入力例:

first = 4
second = 9
third = 2

出力例(入力例のとき):

2 4 9

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


問題 6: 条件つきの入れ替え¶

好きな整数を4 個入れたリストを numbers という名前で作ってください。i = 1 として、numbers[i] のほうが numbers[i+1] より 小さいときだけ tmp を使って入れ替えてください(教材とは逆向きで、大きい方が前に来るようにします)。そのあと numbers 全体を出力してください。

入力の作り方:

numbers = [好きな整数を4 個]

入力例:

numbers = [3, 2, 9, 7]

出力例(入力例のとき):

[3, 9, 2, 7]

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


4. 繰り返しを用いた要素の移動¶

問題 7: 隣同士を順に比べて入れ替え¶

好きな整数を5 個入れたリストを numbers という名前で作ってください。for i in range(0, len(numbers) - 1): で先頭から末尾まで隣り合うペアを見ていき、numbers[i] のほうが 小さいときだけ tmp を使って入れ替えてください(問題6 と同じ、教材とは逆向きの条件です)。そのあと numbers 全体を出力してください。

入力の作り方:

numbers = [好きな整数を5 個]

入力例:

numbers = [2, 5, 1, 6, 3]

出力例(入力例のとき):

[5, 2, 6, 3, 1]

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


問題 8: もう一度、別のリストで¶

別の好きな整数5 個で、もう一度リストを numbers という名前で作ってください。同じ処理(隣同士を順に比べて、前のほうが小さければ入れ替え)を行い、numbers 全体を出力してください。教材(前が大きければ入れ替え)では最大の要素が後ろへ運ばれましたが、今回は いちばん小さい要素が後ろに来る ことを確かめてください。

入力の作り方:

numbers = [別の好きな整数を5 個]

入力例:

numbers = [3, 8, 1, 6, 2]

出力例(入力例のとき):

[8, 3, 6, 2, 1]

これは例です。自分で決めた値で作ってかまいません(その場合、出力は例とは変わります)。

ヒント(フローチャート):

ヒント(フローチャート)


まとめ¶

この回のドリルでは、第09回で学んだことを、自分で作った入力で練習しました。次のパターンを、見なくても書けるようにしておきましょう。

  • 整数以外のリスト: 文字列を要素にできる。負のインデックス a[-1] で後ろから数えられる。
  • range の応用: range(開始, 終了, ステップ) でとびとび、range(len(a) - 1, -1, -1) で逆順。
  • 入れ替え(swap): tmp に片方を逃がしてから 3 ステップで入れ替える。if と組み合わせると条件つきになる。
  • 繰り返しでの移動: 隣り合うペアを先頭から末尾まで条件つきで入れ替えると、比べる条件の向きに応じて、最大(または最小)の要素が後ろへ運ばれる。

授業後の 課題 では、これらを自分の学籍番号から作るリストで解きます。ここで手を慣らしておきましょう。