Pythonで交換法のプログラムを作ろう

交換法で整列をするプログラムの穴埋め問題を解きましょう。

空欄を埋める事ができたら、実際に実行して結果を確認することを忘れずに!

問題1:for文を使って昇順に整列

次のプログラムの空欄(a)と(b)を埋めて、交換法の整列を行うプログラムを完成させてください。

新しいセルに次のプログラムを貼り付けて結果を確認しましょう。


プログラム

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] ( a ) data[j + 1]:   # (a)不等号を入れる
            w = data[j]
            data[j] = ( b )  # (b)入れ替えの式を完成させる
            ( b ) = w

print("整列後:", data)

これは、先ほどのプログラムをfor文で表したものになります。

なるほど。for文でもできるんですね。

使ってる変数の名前が変わってるから気をつけないとだね。

(a)

(b)

問題2:for文を使って降順に整列

次のプログラムの空欄(c)と(d)を埋めて、交換法で降順に整列を行うプログラムを完成させてください。

プログラム

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] ( c ) data[j + 1]:   # (c)不等号を入れる
            w = data[j]
            data[j] = ( d )  # (d)入れ替えの式を完成させる
            ( d ) = w

print("整列後:", data)

続いては降順です。条件式に注意してください。

(c)

(d)

問題3:整列した後に、最小値と最大値を表示

次のプログラムの空欄(e) (f)を埋めて、交換法で昇順に整列したのち、最小値と最大値を表示するプログラムを完成させてください。

プログラム

data = [11, 3, 7, 2, 9]

for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w


print("整列後:", data)
print("最小値:", (e))   # (e)どの場所を参照する?
print("最大値:", (f))   # (f)どの場所を参照する?

昇順に並べるなら、最小値は配列の先頭にきますね。

最大値は配列の末尾にきますね。

その通りです。

今回は要素数は5ですが、要素数が変化しても対応できるようにしてください。

len関数を使えば、配列の要素数が求められるよね!

ただ、先頭は「0」なので注意しないとだ。

(e)

(f)

問題4:文字列の整列

次のプログラムの空欄(g) (h)を埋めて、交換法で昇順に整列したのち、アルファベット順で最も先頭に来るものと、最後に来るものを表示するプログラムを完成させてください。

プログラム

data = ["dog", "apple", "cat", "banana"]

for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] (g) data[j + 1]:   # (g)不等号
            w = data[j]
            data[j] = data[ j + 1]
            data[j + 1] = w


print("整列後:", data)
print("先頭", ( h )) # (h)先頭を表示
print("最後",data[-1])

えぇ、文字列も整列できるんですか?

でも、そのやり方は習っていないぞ?

実は、文字もアルファベット順や50音順で大小比較ができるんです。

ものは試しです。今まで通りにやってみましょう。

そうなんですね!!

それができるんなら、ゲームのアイテムを名前順に並べることもできるぞ!

(g)

(h)

問題5:整列の途中経過を表示

次のプログラムは交換法で整列を行うプログラムですが、途中経過を表示するようにしたいです。

実行結果を参考に、以下の命令をどこに追加すれば良いか、選択肢の中から選んでください。

追加する命令

print(data)

プログラム

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w

print("整列後:", data)

実行結果



①

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        print(data) # 追加処理
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w

print("整列後:", data)


②

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w
            print(data) # 追加処理

print("整列後:", data)


③

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w
        print(data) # 追加処理

print("整列後:", data)


④

data = [9, 2, 6, 4, 3]
print("整列前:", data)
for i in range(len(data) - 1):
    for j in range(len(data) - 1 - i):
        if data[j] > data[j + 1]:
            w = data[j]
            data[j] = data[j + 1]
            data[j + 1] = w
    print(data) # 追加処理

print("整列後:", data)

選んだ解答

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる