
Pythonチュートリアルの「モジュール」に関連した問題を掲載します。各問いにスクリプトの記述と実行で解答してください。
問題
Q1.モジュールの作成
任意のディレクトリ(以降、プロジェクトと呼びます)にprime_factorization.py
を作成してください。ファイル内には下記のコードを記入してください。
def pm(num: int):
digit = len(str(num))
div_num = 2
while num > 1:
if num % div_num == 0:
print(f"{int(num)}".rjust(digit), div_num)
num /= div_num
continue
div_num += 1
print(f"{int(num)}".rjust(digit), None)
def pm2(num: int):
res = []
div_num = 2
while num > 1:
if num % div_num == 0:
res.append((int(num), div_num))
num /= div_num
continue
div_num += 1
res.append((int(num), None))
return res
Q2.モジュールの読み込み(1)
プロジェクト直下にq2.py
を作成して、q2.py
からprime_factorization.py
を読み込んでください。
Q3.関数を呼び出す(1)
q2.py
から関数pm
を実行してください。引数には1000
を設定します。
Q4.関数を呼び出す(2)
q2.py
から関数pm2
を実行してください。引数には123456789
を設定します。
Q5.モジュールの読み込み(2)
q5.py
を作成して、q5.py
でprime_factorization.py
から関数pm
とpm2
を読み込んでください。ただし、*
で読み込みはしないでください。その後、Q3とQ4と出力を得られるように、各関数を実行してください。
Q6.モジュールの読み込み(3)
q6.py
を作成して、q6.py
でprime_factorization.py
をprime_fact
という名前で扱えるようにして、読み込んでください。その後、Q4と同じ出力方法でpm2
を実行してください。
Q7.モジュールをスクリプトとして実行する
以下の2点を満たす状態で、prime_factorization.py
でpm2
を実行できるように追記してください。その後、コマンドラインから123456789
を送り、pm2
の返り値を出力してください。
- importされたときに追記したコードが実行されないようにすること
- コマンドラインから引数を受け取り、
pm2
を実行できるようにすること
Q8.モジュールの検索
以下の構成例を参考に、作成したプロジェクトの親Directoryにもう1つ任意のディレクトリをつくってください。
作ったディレクトリにprime_factorization.py
をコピーして、prime_fact.py
に名前を変更してください。その後、プロジェクトにq8.py
を作成して、prime_fact.py
を読み込んで、関数pm(1000)
を実行できることを確認してください。
モジュールの読み込みについては、sys.path.append
で読み込み先を追加してください。
# 構成例
C:\
├─hoge
│ └─prime_fact.py
└─src
├─prime_factorization.py
├─q2.py
├─q5.py
├─q6.py
└─q8.py
Q9.モジュールの構成
q9.py
を作成して、prime_factorization.py
で定義されている名前のリストを出力してください。
Q10.パッケージの作成
プロジェクトにmy_package
ディレクトリを作成して、math.py
と__init__.py
を作成してください。math.py
に以下の関数を定義してください。
pi = 3.141592653589793
def add(a, b):
return a + b
その後、プロジェクト直下にq10.py
を作成して、q10.py
でpi
とadd
を読み込んでください。その後、関数add(pi, 3)
を実行して、結果を出力してください。
解答
A1.モジュールの作成
C:\src
└─prime_factorization.py
prime_factorization.py
を任意の場所に作成して、prime_factorization.py
に指定のコードを記述してください。
A2.モジュールの読み込み(1)
C:\src
├─prime_factorization.py
└─q2.py
プロジェクト内にq2.py
を作成して、同じ場所にあるprime_factorization.py
を読み込みます。
import prime_factorization
コマンドでの実行例は以下の通りです。
PS C:\src> python q2.py
PycharmやVSCodeなどのIDEを使っている場合には、▶
をクリックして実行できます。以降も、実行環境にあわせて都合の良い方法でスクリプトを実行してください。
この問題では、モジュールを読み込むだけのため、prime_factorization.py
を読み込むimport文を記述した状態で何も起こらない場合には、prime_factorization
の読み込みに成功していると判断できます。
A3.関数を呼び出す(1)
q2.py
import prime_factorization
prime_factorization.pm(1000)
出力
1000 2
500 2
250 2
125 5
25 5
5 5
1 None
A4.関数を呼び出す(2)
q2.py
import prime_factorization
# prime_factorization.pm(1000)
ret = prime_factorization.pm2(123456789)
print(ret)
出力
[(123456789, 3), (41152263, 3), (13717421, 3607), (3803, 3803), (1, None)]
A5.モジュールの読み込み(2)
q5.py
from prime_factorization import pm, pm2
pm(1000)
ret = pm2(123456789)
print(ret)
A6.モジュールの読み込み(3)
q6.py
import prime_factorization as prime_fact
ret = prime_fact.pm2(123456789)
print(ret)
A7.モジュールをスクリプトとして実行する
prime_factorization.py
# pmとpm2関数は省略します
# pmとpm2関数は残して以下を追記してください
if __name__ == "__main__":
import sys
arg = sys.argv[1]
ret = pm2(arg)
print(ret)
Command
PS C:\src> python prime_factorization.py 123456789
[(123456789, 3), (41152263, 3), (13717421, 3607), (3803, 3803), (1, None)]
A8.モジュールの検索
importの自動整形がかからない場合
import sys
# q8.pyがある場所から親Directoryを参照
sys.path.append("./../")
from hoge import prime_fact
prime_fact.pm(1000)
スタイルガイドに従い自動整形される場合
import sys
sys.path.append("./../")
def main():
from hoge import prime_fact
prime_fact.pm(1000)
if __name__ == "__main__":
main()
A9.モジュールの構成
q9.py
import prime_factorization
ans = dir(prime_factorization)
print(ans)
出力
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pm', 'pm2']
A10.パッケージの作成
構造
C:\src
├─my_package
│ ├─__init__.py
│ └─math.py
├─prime_factorization.py
├─q10.py
├─q2.py
├─q5.py
├─q6.py
├─q8.py
└─q9.py
q10.py
from my_package.math import add, pi
ret = add(pi, 8)
print(ret) # 6.141592653589793