Pythonで線形探索のプログラムを作ろう

学習の目的

  • ・Pythonで線形探索プログラムを作ろう

今回のプログラムから、関数を使ったり、キーボードからの入力を利用したプログラムを作成します。

Pythonで線形探索プログラムを作ろう

Pythonで線形探索をおこなうプログラムを作成します。

プログラムはGoogl Colabで作成します。次のリンクから開いて新しいノートブック「ip0208」を作成しましょう。

今回のプログラムは以下の関数・メソッドの作成、利用を行います。

関数(メソッド)名 種類 説明
generate_array(size, low, high) ユーザー定義 重複無しで、要素数size個のランダムなデータを作成する。データの値はlow~highまでの範囲で作成する。
random.sample ライブラリ 重複の無い乱数を作成する。プログラムの先頭に「import random」を記述することで利用することが可能。
int 組み込み 値を整数に変換する。
input 組み込み キーボードからデータを入力する。入力された値はすべて文字として入力される。
len ライブラリ 配列の要素数を返す。例えば配列dataの要素数が10の場合、len(data)は10を表す。

上記の関数は、線形探索の処理とは直接関係ありません。キーボードからデータを入力したり、配列に任意のデータを作成するために利用します。

参 考

メソッド:メソッドとは、Pythonで用意された部品(クラス)の機能のこと。呼び出すことで機能を利用することができます。

種類:関数にはプログラマが独自で作成したユーザ関数とあらかじめPythonのシステムが用意した組み込み関数の2種類があります。

今回作成するPythonプログラムのフローチャートを確認します。線形探索を行う部分は前のスライドと一緒ですが、配列の作成、探索値のキーボード入力などの違いがあります。

① data = generate_array

配列(リスト)を作成し、変数dataに代入します。

配列の作成は、Pythonプログラム内で作成したユーザー関数「generate_array関数」を使い作成します。

配列指定個数分、重複無しでランダムな値が格納されます。

関数の使い方

generate_array(作成する要素数,値の最小値,値の最大値)

例:data = generate_array(20 , 1, 100)

説明:20個の要素を持つ配列(リスト)を作成する。値は1~100までの中でランダムに格納される。


② 作成したdataの表示

作成したデータを表示します。

作成した値がランダムに決まるため、どのような値があるかを確認するために表示します。


③ キーボードからtargetへ入力

キーボードから探索する値を入力し、変数targetに代入します。

実行のたびに自由に値を入れられるようになります。

上記フローチャートをPythonプログラムで作成すると次のようになります。

import random

# 配列をランダムに生成する関数
def generate_array(size=10, low=1, high=100):
    """
    ランダムな整数の配列を生成する
    size : 要素数
    low  : 最小値
    high : 最大値
    """
    return random.sample(range(low, high+1), size)  # 重複なし

# ===== メイン処理 =====

# ランダムに配列を作成
data = generate_array(20, 1, 100)
print("探索対象データ:", data)

# 探す値を入力
target = int(input("探す値を入力してください: "))

# フラグと位置変数
found_flag = False
i = 0

# フラグを条件に使った線形探索
while (a):
    if data[i] == target:
        found_flag = True
    else:
        i = i + 1

# 結果表示
if (b):
    print("見つかりました。")
else:
    print("見つかりませんでした。")

前回「関数」を学習しました。今回も「def」で記述されている「generate_array」は関数です。

関数は、プログラムから呼ばれることで実行されます。今回のプログラムは、コメント「メイン処理」の下にある16行目からプログラムが始まります。

本当だ。16行目は配列を作っているところだけれど、フローチャートの最初と一緒ですね。

16行目からはPythonとフローチャートは一緒みたいですね。

はい、そうです。ただし、これまでと違って繰り返し処理はfor文ではなくwhile文を使っています。

while文では、添字変数 i は勝手に増えたりしないので、24行目の初期値を代入したり、31行目の1加算する処理をすることで、添字の値を繰り返すたびに更新しています。

Pythonプログラムの空欄(a)、(b)を埋めてGoogle Colabで実行してみましょう。

プログラムの空欄(a)に入る条件式を下記の命令から選んで答えてください。

found_flag == False or i >= len(data):
found_flag != True and i < len(data):
(a)のヒント

2つの条件を記述します。

1つ目条件、データが見つからない間の条件式: found_flag == False

2つ目の条件、配列の最後までの間の条件式: i < len(data)

プログラムの空欄(b)に入る条件式を下記の命令から選んで答えてください。

found_flag == False:
found_flag == True:

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

Well done!

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

次のステップに進む

← 前のステップにもどる