【ページ更新日:2020年10月1日】
毎日Pythonでは、毎日簡単なPythonのプログラムコードを紹介していきます。
今日のプログラムは「Python問題集」のコードをもとにしております。
多くの問題がプログラムコードと共にまとめられておりますので、初学者の方にオススメです。
今日のプログラム
コードは次の通りです。
どのようなプログラムか考えてみてください。
def determination_prime(num): MAX = 1000 LIST = range(2, MAX + 1) for i in range(2, int(MAX ** 0.5)): LIST = [x for x in LIST if (x == i or x % i != 0)] return num in LIST num = input("素数判定をおこなう数字を入力してください >>> ") if determination_prime(int(num)): print("{} は、素数です".format(num)) else: print("{} は、素数ではありません".format(num))
Pythonはインテンド(行頭のスペース)がズレるだけでエラーの原因になります。
コピペする場合は次のコードからしてください。
コードのURLはコチラです。
今日のポイント
- def
- **
- range(2, MAX + 1)
- LIST = [x for x in LIST if (x == i or x % i != 0)]
- in
- format
今日の出力
今日の出力は次の通りです。
↓素数を入力した場合

↓素数ではない数字を入力した場合

↓処理範囲である1000より大きい素数を入力した場合

- なぜ、素数10007が素数と判定されなかったのか、考えてみてください。
↓数字ではないものを入力した場合


- このとき例外エラーが出ている理由を考えてみてください
- ポイントは input 関数です
今日のコードの説明
まず、今日のポイントについて説明します。
def
- def は、関数を定義するときに使用します
- def のあとに関数の引数を定義します
- 関数の処理内容は、インテンドを入れて書いていきます
- 次のコードは、2つの引数の数値を足して戻り値として返します
def add(num1, num2): return num1 + num2
- この関数は次のように使用します
sum = add(1 + 2)
- このとき、変数sumには「 3 」の値が入っています
**
- ** は冪乗の演算子です
- たとえば、次のようにすると冪乗の計算ができます
num1 = 2**3 num2 = 49**0.5
- num1 には2の3乗の「8」が入ります
- num2 には49の1/2乗の「7」が入ります
range(2, MAX + 1)
- range関数は、連番を生成します
- 注意点は「連番の最後の数」についてです
- たとえば、次のようにすると 連番が生成されます
range(3) # >>> [ 0, 1, 2 ]が生成される # 引数が1つの場合は「0から引数 -1 までの連番」を生成 range(2, 5) # >>> [ 2, 3, 4 ]が生成される # 引数が2つの場合は「(1つ目の引数)から(2つ目の引数) -1 までの連番」を生成
- 上記のコメントアウト(#の行)にあるように連番が生成されます
- 連番の最後の数をきをつけたい
- 参考ページ:「Let'sプログラミング」さん
MAX = 1000 LIST = range(2, MAX + 1)
- つまり、今日のコードでは2から1000までの連番が生成されます
LIST = [x for x in LIST if (x == i or x % i != 0)]
- この [ ] の中を、「内包表記」と言います
内包表記とは、リストや辞書などの iterable オブジェクト( for ループで回せるオブジェクト)のループ処理をかんたん・シンプルに記述できる記法です。
LIFE WITH PYTHONさん「Python の内包表記の使い方まとめ」
- iterableオブジェクトとは、for 文の in のあとに書き込めるオブジェクトです
- 今日のコードの内包表示は、 x に LIST の連番を入れていきます
- また LIST のあとに if があるため、LIST の連番にフィルターがかけられたあとの連番が x に入ります
MAX = 1000 LIST = range(2, MAX + 1) for i in range(2, int(MAX ** 0.5)): LIST = [x for x in LIST if (x == i or x % i != 0)]
in
- in 演算子は、リストの中に任意の値が含まれるか判定します
- リストのほか、タプルや range などにも使用できる
- for 文のinとは少し違うので区別します
- 任意の値がリストに含まれている場合は「True」を返す
- 任意の値がリストに含まれていない場合は「False」を返す
- 次のコードでは、print 関数によって「True」が表示されます
LIST = [10, 20, 30] print ( 10 in LIST )
- 次のコードでは、print関数によって「False」が表示されます
LIST = [10, 20, 30] print ( 40 in LIST )
format
- formatメソッドは、文字列に値を埋め込むことができます
- formatメソッドは、strクラスが持つメソッドですべての文字列で使用できます
- 今日のコードは次のようにformatメソッドが使用されています
num = input("素数判定をおこなう数字を入力してください >>> ") if determination_prime(int(num)): print("{} は、素数です".format(num))
- num には input で入力された数値が入っています
- その num をint関数を使用して、int型に型変換(キャスト)します
- その int(num) を関数 determination_prime の引数として渡し、その数値が素数ならTrue、素数でなければFalseが返ります
- たとえば、input に「37」を入力すると、関数 determination_prime からTrue が返り、if文の処理が実行されます
- 処理では、print 関数で文字列が表示されます
- 文字列中の { } に、formatメソッドに渡した値(今回はnumなので37)が入ります
- つまり「37」を入力すると、「37は、素数です」と表示されます