Python(基本的なこと002: 素数を探すコード_配列_if文_for文)

■基本的な文法を試してみる。
簡単なサンプルコードを作って、配列やif文、for文を試してみた。
サンプルコードは、単純に数字が割り切れるかどうかで素数を探していくもの。エディタPyCharmで下のコードを入力した。

#START_NUM: start number, TRY_COUNT:numbers to be checked from start number
START_NUM = 301
TRY_COUNT = 20
numArray = []

for var in range(START_NUM, START_NUM + TRY_COUNT):
    num = var
    tempArray = []
    for var2 in range(2, START_NUM + TRY_COUNT):
        if num > var2:
            result = num % var2
            if result == 0:
                tempArray.append(var2)
        elif num <= var2:
            numArray.append([num, tempArray])
            break

#Display
for index, var in enumerate(numArray):
    if len(var[1]) == 0:
        print(index + 1, ":", var[0])
    else:
        print(index + 1, ":", var)

コードの説明をメモしておく。
頭に#がつくところは、コメントの行でコードには影響しない。START_NUMは開始番号、TRY_COUNTは開始番号からチェックする数。numArrayは結果を入れる配列。数字を1つ目に、割り切ることができる数の配列を2つ目に入れる2次元配列にする。
for var in range(START_NUM, START_NUM + TRY_COUNT):で、開始番号から終了となる数(開始番号+チェックする数)の範囲を繰り返す(numが割られる数)。
次のfor文で、割る数(var2)を繰り返す。対象は2から終了となる数まで。割る数が割られる数より小さければ、四則演算の剰余%を使って割ることができるかみる。剰余は余りを求めるものなので、割られる場合は余り0となる。これをresultに入れる。if文の条件分岐を使って、余り0の場合、割り切ることができる数としてそのときの割る数を配列に入れる。
割る数が割られる数より大きくなったら、結果をnumArrayに入れて、breakで繰り返しを終了。

その後、結果を表示する。enumerateで配列のインデックス(index)と中身(var)をとってこれる。割り切ることができる数がなかった場合(2次元配列の2つ目の配列の長さが0の場合、len(var[1]) == 0)、見やすいようにインデックスと数値のみの表示として、それ以外は数字と割り切ることができる数の配列の表示とする。

上のコードの結果が下の画像(実行は右上の再生ボタンのようなところを押すとすぐできる)。

301から320までの素数は307、311、313、317の4つが該当することが分かる。

Pythonのコードを組んでいて、いくつか違和感はあった。if文、for文をかっこでくくらない、終了時にセミコロンをつけない、変数に型式の宣言が不要などは独特だと思う。あとから読み直したときに見づらくなりそう。かっこでくくらない代わりにインデントの位置が重要となるよう。Powershellのときは、Windows S modeの制約もあってメモ帳でインデントの整理とかしてたので、フォーマッター(Ctrl + Alt + L)とか、やっぱりエディタは便利だなー。

次回は何かライブラリを試してみる。