LoginSignup
0
0

More than 3 years have passed since last update.

[光-Hikari-のPython]08章-03 モジュール(標準ライブラリのインポートと利用)

Last updated at Posted at 2020-06-28

[Python]08章-03 標準ライブラリのインポートと利用

今までは、自分で作成したモジュールやモジュール群(パッケージ)をインポートしました。
これらはまた、他人が作成したモジュールもインポートできると説明しました。

実は、モジュールはほかにもPythonをインストールした際に一緒についてくるモジュール群があり、これを標準ライブラリと言います。
また、Pythonをインストールした際に一緒にインストールされなかったライブラリもあります。これらは別の第三者の組織や研究団体、個人的に作成したモジュール群もあり、これを外部ライブラリと言います。
外部ライブラリについては次節で説明します。

ライブラリはモジュールで構成されているものもありますし、パッケージで構成されているものもあります。

まずは、標準ライブラリについて、この節で説明していきたいと思います。

いろいろな標準ライブラリ

前述の通り、標準ライブラリはPythonが用意したものです。主に以下のものが存在し、インポートして利用します。(ほかにもまだ標準ライブラリは存在します)

モジュール 使用用途
math 数学で用いる計算の関する処理(log, sin, cosなどの関数が利用可能)
random 乱数を発生させたいときに利用
csv CSVファイル入出力の際に利用
xml XMLファイル入出力の際に利用
json JSONファイル入出力の際に利用
os ファイルのディレクトリなどを操作したい際に利用
datetime 日時に関する処理をしたい際に利用
urllib Webから情報を取得したい際に利用
turtle グラフィックを描く

他にも標準ライブラリは存在します。以下のURLから標準ライブラリに関する情報を確認できます。
https://docs.python.org/ja/3/library/index.html

この中で、turtleグラフィックについては03章で触れました。

実際に以下のようにインポートしました。

03-01-01.py
#turtleプログラムを動かすために外部からプログラムを読み込んでいる
import turtle

#taroという名前でturtle(亀)を作る。
taro = turtle.Turtle()

今回はturtleグラフィックスについては深く触れませんが、以下でそのほかの一部の外部ライブラリを使用してプログラムを書いてみましょう。

標準ライブラリ(mathモジュール)

まずは、mathモジュールを用いて、円の円周と面積を求めるプログラムを作成してみましょう。
mathモジュールは以下のリンク先に詳細がありますので、それを参照しながら作成を進め、説明していきたいと思います。
https://docs.python.org/ja/3/library/math.html

chap08の中に、samp08-03-01.pyというファイル名でファイルを作成し、以下のコードを書いてください。

samp08-03-01.py
##mathモジュールのインポート
import math

##円周を求める関数
def circumference_func(r):
    C = r * 2 * math.pi
    return C

##面積を求める関数
def area_func(r):
    S = math.pow(r, 2) * math.pi
    return S

r = int(input('円の半径の長さrを入力してください:'))

##円周を求める関数の呼び出し
print(f'円周の長さ:{circumference_func(r)}')

##面積を求める関数の呼び出し
print(f'面積:{area_func(r)}')

【実行結果】
円の半径の長さrを入力してください:5
円周の長さ:31.41592653589793
面積:78.53981633974483

円周と円の面積の求め方は問題ないと思いますが、今回は、mathモジュールの中から、math.pimath.pow()関数を利用しています。

上記のリンク先にもmathモジュールにたくさん関数がありますが、それぞれ見てみましょう。

【数学関数piマニュアルより引用】

math.pi
利用可能なだけの精度の数学定数 π = 3.141592... (円周率)。

math.piとすることで、その個所が3.1415...という円周率(定数)となります。

【数学関数powマニュアルより引用】

math.pow(x, y)
x の y 乗を返します。例外的な場合については、 C99 標準の付録 'F' に可能な限り従います。特に、 pow(1.0, x) と pow(x, 0.0) は、たとえ x が零や NaN でも、常に 1.0 を返します。もし x と y の両方が有限の値で、 x が負、 y が整数でない場合、 pow(x, y) は未定義で、 ValueError を送出します。
組み込みの ** 演算子と違って、 math.pow() は両方の引数を float 型に変換します。正確な整数の冪乗を計算するには ** もしくは組み込みの pow() 関数を使ってください。

円の面積を求める際に、r2しているので、プログラム中ではmath.pow(r, 2)としています。

なお、インポートの際にあらかじめ何の関数を使用するかをわかっている場合、以下のようにインポートする個所に関数名を記載すれば、math.pimath.pow(r, 2)においては、pipow(r, 2)と省略して書くことも可能です。

samp08-03-02.py
##mathモジュールのインポート
from math import pi, pow

##円周を求める関数
def circumference_func(r):
    C = r * 2 * pi
    return C

##面積を求める関数
def area_func(r):
    S = pow(r, 2) * pi
    return S

r = int(input('円の半径の長さrを入力してください:'))

##円周を求める関数の呼び出し
print(f'円周の長さ:{circumference_func(r)}')

##面積を求める関数の呼び出し
print(f'面積:{area_func(r)}')

標準ライブラリ(randomモジュール)

次は乱数を発生させるrandomモジュールをインポートしてプログラムを作成してみます。
内容は大吉・中吉・小吉・凶・大凶のいずれかを出力させる御神籤プログラムです。

randomモジュールは以下のリンク先に詳細がありますので、それを参照しながら作成を進め、説明していきたいと思います。chap08の中に、samp08-03-02.pyというファイル名でファイルを作成し、以下のコードを書いてください。
https://docs.python.org/ja/3/library/random.html

samp08-03-03.py
##randomモジュールのインポート
import random

omikuji = random.randint(0, 4)

if omikuji == 0:
    print('大吉')
elif omikuji == 1:
    print('中吉')
elif omikuji == 2:
    print('小吉')
elif omikuji == 3:
    print('凶')
else:
    print('大凶')

【実行結果】
中吉

※実行結果は実行ごとに変化しますので注意してください。

プログラムに関しては問題ないと思いますが、今回は新たにrandom.randint()関数を使用しています。

【randint関数マニュアルより引用】

random.randint(a, b)
a <= N <= b であるようなランダムな整数 N を返します。randrange(a, b+1) のエイリアスです。

このrandint関数ではa以上b未満の整数の乱数を返します。上記の実行結果ではたまたま乱数値が1であったため、「中吉」と出力されています。

最後に

標準ライブラリの中で、今回はmathモジュールとrandomモジュールを紹介しました。mathモジュールについては今後AIの分野で使用することも増えますし、randomモジュールは簡単なゲームなどを作成する際にも乱数の要素を取り入れて使用します。

今回紹介できなかったそのほかの標準ライブラリ(csvやdatetimeモジュールなど)については後程触れて生きたいと思います。

【目次リンク】へ戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0