Python

毎日Python_10日目

2020年10月1日


【ページ更新日: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 までの連番」を生成
    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は、素数です」と表示されます
  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Python