LESSON 08

並べ替えを理解しよう

値を比べて交換し、順番を整える手順を追います。

40分
必須
必須・これまでの復習

これまでの内容から、3問を復習しよう

前回までの内容から、毎回ランダムに3問が選ばれます。復習用ファイルは一つだけ作り、問題ごとに中身を書き換えます。

今回のファイル名lesson08_review.py

レッスン番号と使う場面が分かる名前にして、あとで探しやすくします。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson08_review.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson08_review.pyと表示されたら準備完了です。

復習 1

条件分岐

a=8
if a>5:
    print("大")

結果は?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「結果は?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「8は5より大きいです。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習 2

繰返し

total=0
for i in range(1,4):
    total=total+i
print(total)

合計は?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「合計は?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「1+2+3=6です。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習 3

リスト検索

A=[4,9,2]
print(9 in A)

結果は?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「結果は?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「9はリストにあります。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習を終えたことを確認

実際に自分のパソコンで行ってから、チェックを入れてください。

◎
今日のゴール

比較と交換を繰り返す並べ替えを追える。

  • ✓並べ替えの必要性を説明できる
  • ✓隣同士を交換できる
  • ✓変化を表で追える
STEP 1

なぜ並べ替えるの?

今からやること
  1. 並べ替えの便利さを理解する
  2. 隣同士を比較して交換する
  3. 繰返しで順番を整える
  4. 途中のリストを表で追う
  5. 必須問題で確かめる

点数を小さい順に並べると、順位や中央値を調べやすくなります。コンピューターは「比較する」「必要なら交換する」を何度も繰り返して整えます。

8・3比較3・8へ交換→次の組を比較

前後のつながり:第7回の「一つずつ見る」を使って隣同士を比べます。第9回では、この処理を条件が正しい間繰り返す方法へ進みます。

STEP 2

2つの値を交換しよう

今回のファイル名lesson08_step02.py

レッスン番号と使う場面が分かる名前にして、あとで探しやすくします。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson08_step02.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson08_step02.pyと表示されたら準備完了です。

この順番で実践します
  1. lesson08_step02.pyへ見本コードを一文字ずつ入力する
  2. 実行前に結果を予想する
  3. 保存してVS Code右上の「▶」を押す
  4. 下部ターミナルの結果を教材と比べる
A = [8, 3]

if A[0] > A[1]:
    temp = A[0]
    A[0] = A[1]
    A[1] = temp

print(A)

最後のリストは?

先に自分のパソコンで実行しましょう。画面に出た結果を見てから、下のボタンを押します。

STEP 3

左から1周だけ動かそう

今回は完全な並べ替えではなく、左から右へ1周する動きだけを確かめます。大きい値が少しずつ右へ移る様子に注目します。

A = [5, 2, 4]

for i in range(len(A) - 1):
    if A[i] > A[i + 1]:
        A[i], A[i + 1] = A[i + 1], A[i]
    print(A)

print("1周後", A)

ターミナルには、比較するたびのリストと、1周後のリストが表示されます。

1周後の結果は?

先に自分のパソコンで実行しましょう。画面に出た結果を見てから、下のボタンを押します。

STEP 4

ここまで分かったか確認しよう

今回のファイル名lesson08_step04.py

この回の必須問題で使うファイルです。問題ごとに中身を書き換えて使います。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson08_step04.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson08_step04.pyと表示されたら準備完了です。

必須問題の進め方
  1. lesson08_step04.pyを作る
  2. 入力・保存・実行する
  3. ヒントと答えで確認し、同じファイルを書き換える
必須 1

2つの数を交換

[9, 4]を小さい順にします。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 左の数と右の数を比べ、左が大きい場合だけ場所を入れ替えます。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

A[0] > A[1]を条件にします。

答えを見る
A=[9,4]
if A[0]>A[1]:
    A[0],A[1]=A[1],A[0]
print(A)

ターミナルに[4, 9]と表示されたら成功です。

必須 2

1周目を紙で追う

[7, 3, 5]を左から隣同士で比較した1周目を書きます。この問題だけは紙で答えます。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 比較するたびに、交換後のリストを新しく書きます。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

7と3、次に7と5を比べます。

答えを見る

[7,3,5] → [3,7,5] → [3,5,7]です。

これは紙に書く問題です。Pythonファイルは書き換えず、この2回の変化を書けたら完了です。

必須 3

1周分を実行する

[6, 2, 5, 1]を左から1周し、比較ごとのリストを表示します。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 添字iを0、1と動かし、隣のi + 1と比べます。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

range(len(A) - 1)なら、最後の値の一つ手前まで比較できます。

答えを見る
A=[6,2,5,1]
for i in range(len(A)-1):
    if A[i] > A[i+1]:
        A[i],A[i+1]=A[i+1],A[i]
    print(A)
print("1周後", A)

最後に「1周後 [2, 5, 1, 6]」と表示されたら成功です。

実践したことを確認

実際に自分のパソコンで行ってから、チェックを入れてください。

時間が余ったら

できるだけ解いてみよう

全10問
  1. 1. [6,2]を交換する
    ヒントを見る

    左が大きいとき交換します。

    答えを見る
    A=[6,2]
    if A[0]>A[1]: A[0],A[1]=A[1],A[0]
  2. 2. [4,1,3]の1周目
    ヒントを見る

    隣同士を左から比べます。

    答えを見る
    [4,1,3] → [1,4,3] → [1,3,4]
  3. 3. 交換が必要ない組
    ヒントを見る

    [2,5]はすでに小さい順です。

    答えを見る
    A=[2,5] のとき交換しない。
  4. 4. 大きい順に交換する条件
    ヒントを見る

    比較記号を逆にします。

    答えを見る
    if A[i] < A[i+1]:
  5. 5. tempを使う交換
    ヒントを見る

    一時的に片方を保存します。

    答えを見る
    temp=a
    a=b
    b=temp
  6. 6. Pythonの同時交換
    ヒントを見る

    左右を反対に並べます。

    答えを見る
    a, b = b, a
  7. 7. sortで確認する
    ヒントを見る

    A.sort()を実行します。

    答えを見る
    A=[5,2,4]
    A.sort()
    print(A)
  8. 8. 並べ替え前後の最大値
    ヒントを見る

    最大値自体は変わりません。

    答えを見る
    順番が変わっても最大値は同じ。
  9. 9. 中央値を求める
    ヒントを見る

    並べ替えた中央を取ります。

    答えを見る
    A.sort()
    print(A[len(A)//2])
  10. 10. 4個のバブルソートを紙で追う
    ヒントを見る

    各周で右端が一つ確定します。

    答えを見る
    例:[4,3,2,1] → [3,2,1,4] → [2,1,3,4] → [1,2,3,4]