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

#[Python]08章-03 標準ライブラリのインポートと利用
今までは、自分で作成したモジュールやモジュール群（パッケージ）をインポートしました。
これらはまた、他人が作成したモジュールもインポートできると説明しました。

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

<font color="red">※</font>ライブラリはモジュールで構成されているものもありますし、パッケージで構成されているものもあります。

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

##いろいろな標準ライブラリ
前述の通り、標準ライブラリは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](https://docs.python.org/ja/3/library/index.html)

この中で、turtleグラフィックについては[03章](https://qiita.com/ko0821/items/ecc5af7cfa097f3fa3a7)で触れました。

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

```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](https://docs.python.org/ja/3/library/math.html)

<font color="#00cccc">chap08</font>の中に、<font color="#00cccc">samp08-03-01.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。

```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)}')
```
><font color="#090" bgcolor="black">【実行結果】</font>
円の半径の長さrを入力してください：5
円周の長さ:31.41592653589793
面積:78.53981633974483

円周と円の面積の求め方は問題ないと思いますが、今回は、**mathモジュール**の中から、**math.pi**と**math.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() 関数を使ってください。

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

なお、インポートの際にあらかじめ何の関数を使用するかをわかっている場合、以下のようにインポートする個所に関数名を記載すれば、**math.pi**や**math.pow(r, 2)**においては、**pi**や**pow(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モジュール**は以下のリンク先に詳細がありますので、それを参照しながら作成を進め、説明していきたいと思います。<font color="#00cccc">chap08</font>の中に、<font color="#00cccc">samp08-03-02.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。
[https://docs.python.org/ja/3/library/random.html](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('大凶')
```

><font color="#090" bgcolor="black">【実行結果】</font>
中吉

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

プログラムに関しては問題ないと思いますが、今回は新たに**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モジュールなど）については後程触れて生きたいと思います。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)