100日後にエンジニアになるキミ - 33日目 - Python - Python言語の基礎8

本日もPythonの基礎の続きですが今日で基礎は終わります。

前回はこちら
[100日後にエンジニアになるキミ - 32日目 - Python - Python言語の基礎7]
(https://qiita.com/otupy/items/9e70a3b36f32fccacadf)


## オブジェクト指向の話

[![表示されなかったらすみません](https://img.youtube.com/vi/TGEcNk_sX00/0.jpg)](https://youtu.be/TGEcNk_sX00)

python言語は`オブジェクト指向`のプログラム言語となります。
それでは`オブジェクト指向`とはなんなのでしょうか？

python言語では、取り扱うものは全部`オブジェクト`という概念となり
変数に格納するデータなども全て`オブジェクト`という扱いになります。


**文字列オブジェクト**

例えば変数`a`に文字列`abc`を代入すると、
この変数`a`は`文字列型のオブジェクト`になります。

```python
# 文字列型のオブジェクト
a = 'abc'
print(a)
```
abc

**関数とメソッド**

次に`リスト型`の変数`l`と要素を宣言してみます。

そうするとこの変数`l`は`リスト型のオブジェクト`になり、
同時に`リストオブジェクト`が持つ関数`メソッド`が使えるようになります。


```python
# リスト型を定義
lis1 = [1,2,3]
# リスト型のメソッド
lis1.append(4)
print(lis1)
```
[1, 2, 3, 4]

厳密には`関数`と`メソッド`は違うものですが
分かりやすくいうと、リスト型でデータを追加する`append`
などは`リストオブジェクト`そのものに対する操作になるので
`メソッド`という取り扱いになります。

`オブジェクト指向`ではオブジェクトで定義された
関数と同じような書き方をしたものを`メソッド`と呼び
それ以外を関数と呼んでいます。

`文字列型のオブジェクト`を作れば、
そのオブジェクトが持つ関数は`メソッド`と言えることになります。

**オブジェクト思考の概念**

`オブジェクト指向`とは、何かしらの物`オブジェクト`で構成されたプログラム言語のことを言い、
`オブジェクト`とは`変数`、`データ型`、`関数`、そして`クラス`といったものが挙げられます。

プログラム上で何かしらのモノを作ってそれを取り扱ってゆくという考えが
`オブジェクト指向`の基本的な考え方になっていきます。

ここら辺は概念的なものなので
今すぐわからなくても良いし、わからなくても簡単なプログラムであれば
なんとかなるものです。ゆくゆくは覚えていってください。

この次の回では`クラス`について詳しくやっていきたいと思います。

## クラスについて

[![表示されなかったらすみません](https://img.youtube.com/vi/J_fYAc_zMC8/0.jpg)](https://youtu.be/J_fYAc_zMC8)

前回は`オブジェクト指向`についての概念を説明しました。

`オブジェクト指向`の概念を学んだら、次は実際にpythonで
その`オブジェクト`となる`クラス`を作って見ましょう。

**クラスの作り方**

```python
class クラス名():
    def __init__(self,):
        処理
```

**クラスの呼び出し方**

`変数名 = クラス名()`


簡単なクラスを作ってみましょう。

```
class class_a():
    def __init__(self,):
        print('初期化')
        self.ac = 'aaa'
```

これでクラスを作成する事ができました。

**インスタンスとインスタンス化**

`インスタンス`とは、`クラス`を`実体化`したものです。

`クラス`の`データ`や`メソッド`を使うためには
`インスタンス`と呼ばれるものを生成する必要があります。

クラスを呼び出して変数に格納します。
この事を`インスタンス化`
作った変数のことを`インスタンス`とも言います。

```python
# インスタンス化
a = class_a()
```
初期化

ここで`init`という`メソッド`の部分は
`コンストラクタ`と呼ばれる`インスタンス`を生成する際に
一番初めに呼ばれる処理になります。

`クラス`を呼び出して変数に格納した際に
`init`が呼ばれてその中の処理が実行されます。

この`init`の処理の中では引数に`self`という変数名がありますが
`self`という変数は自分自身を指すもので、`クラス`ではこの引数は必須で
書かないとエラーになってしまいます。

`init`の処理の中では`self.ac`という変数に値として　
`aaa`を代入しています。

これでこの`クラス`の中に`ac`という変数を確保して値を代入したことになります。
クラスを生成した後に呼び出す部分でこの変数が使えるようになります。

**クラス変数やメソッドの呼び出し方**

`クラス変数名.メソッド名`

```python
aa = class_a()
print(aa.ac)
```
初期化
aaa

クラスの変数を追加して見ましょう。

```python
aa.b = 2
print(aa.b)
```
2

`クラス`の中に変数`b`が確保され、`2`という値が代入されました。
後にこの変数を使いまわすことができるようになります。

この`クラス`に定義した変数のことを`アトリビュート`と呼んでいます。

`クラス`では`コンストラクタ`とは別に関数も定義でき、
この`クラス`内に定義した関数のことを`メソッド`と呼んでいます。

`メソッド`を追加して見ましょう。

```python
# クラスの定義
class class_a():
    def __init__(self,):
        print('初期化')
        self.ac = 'aaa'
    # メソッドの定義
    def anaa(self, ):
        print(1)
```

```python
# クラスを呼び出して変数に格納
aa = class_a()
# クラスのメソッドを呼び出す。
aa.anaa()
```
初期化
1

このように`クラス`とは複数の`メソッド`や変数を持つ
`オブジェクト`ということになります。

`メソッド`や`アトリビュート`は
その`クラス`の中からしか呼び出すことができませんので
`クラス`で定義した`ac`という変数はそのままでは使用できません。

```python
print(ac)
```
NameError Traceback (most recent call last)
<ipython-input-7-2faad1a56ed6> in <module>()
----> 1 print(ac)
NameError: name 'ac' is not defined

必ず`クラス変数`とともに使う事が必要になります。

```
print(aa.ac)
```
aaa

`クラス`はどのような時に使うのでしょうか？
それはプログラムの中で大きな処理をひとまとめにしたり
別のプログラムで使いまわしたいときなどに役立ちます。

一旦一つのプログラムとして`クラス化`しておいて
別のプログラムでそれを使いまわすという使い方が一般的です。

**クラスの継承**

`クラス`には継承という概念もあります。

まずは継承するものとされるものとして
親子の`クラス`を作り、その中に`メソッド`を作っておきます。

```python
class oya():
    def oyano_method(self):
        print('oyano')

# 継承するクラスを引数に指定する
class ko(oya):
    def kono_method(self):
        print('kono')
```

`子クラス`の方は`引数として親クラス`を指定しておきます。

そうすることで`子クラス`を生成すると、
`親クラス`の`メソッド`が使えるようになります。

```python
# 子クラスを呼び出す。
k = ko()

# 子クラスで継承した親クラスが呼べる
k.kono_method()
k.oyano_method()
```
kono
oyano

このように`子クラス`には無かった
`親クラス`の`メソッド`が呼び出せるようになります。

これは今までにある`クラス`を派生させて、
新しい`クラス`を作りたい場合などに
用いることができる便利な機能です。

`クラス`の概念や、仕組みは覚えるまでは大変ですが、
覚えればプログラミングの幅が大きく広がるものとなりますので
ゆっくりと確実に覚えるようにしていってください



## 例外処理

[![表示されなかったらすみません](https://img.youtube.com/vi/tFS8OcIa9lU/0.jpg)](https://youtu.be/tFS8OcIa9lU)


今までの講義では何度か`エラー`の表示が出ていたかと思います。

例えば

```python
# リスト型を定義
aqq = [1,2,3]
# インデックスで値を抽出
print(aqq[31])
```
IndexError Traceback (most recent call last)
<ipython-input-1-4d1059cfba83> in <module>()
2 aqq = [1,2,3]
3 # インデックスで値を抽出
----> 4 print(aqq[31])
IndexError: list index out of range

`リスト型`の`インデックス`の範囲外の値を指定すると
`list index out of range`
という`エラー`が発生します、リストの範囲外というエラー出力です。

こういった`エラー`が発生すると、そこでプログラムは終了してしまいます。
なのでエラーを発生させないようにするか、
エラーが発生した場合の対処をする必要があります。

`エラー`の発生を抑えるのは困難なので、
`エラー`を回避する記述をすることでプログラムを終了させないようにします。

それが`例外処理`になります。

**pythonの例外処理の書き方**

```python
try:
    処理
except:
    例外時の処理
```

pythonでの例外処理は、`エラー`が発生しそうな箇所を
`try - except`という文言で囲みます。

`exception`というのは例外という意味の英語です。
ぜひ覚えておいてください。


```python
try:
    aqq = [1,2,3]
    # ここでエラーが発生する
    print(aqq[31])
except:
    # エラー発生時にはこちらが呼ばれる
    print('error')
```
error

`エラー`が発生した場合の処理を`except`のブロックに書きます。

`エラー`が発生しても何も処理をしない場合は
何も書かないと構文エラーになってしまうので
`pass`と書いておきます。

```python
try:
    aqq = [1,2,3]
    print(aqq[31])
except:
    # 何も処理を書か無いとエラーになる
```
File "<ipython-input-3-c85aeb4f8051>", line 5
# 何も処理を書か無いとエラーになる
^
SyntaxError: unexpected EOF while parsing

```
try:
    aqq = [1,2,3]
    print(aqq[31])
except:
    # 処理が定まらない時はpassと書いておく
    pass
```

上記では`エラー`が発生したことは確認できますが
何が起こっているのかは分からないです。

なのであらかじめ`エラー`が想定できる場合は
`エラー`が発生した場合の処理を複数書くことができます。

```python

try:
    処理
except エラー名:
    例外時の処理
except エラー名:
    例外時の処理
```

```python
try:
    aqq = [1,2,3]
    # ここでIndexエラーが発生する
    print(aqq[31])
except IndexError:
    #　ここでIndexエラーをキャッチする
    print('index error')
except Exception:
    print('exception')
```
index error

`except`の後に`エラー名`を書くことで、
該当するエラーが発生した場合の処理を書き分けることができます。

上記の例では`Indexエラー`が発生すると
`IndexError`の部分の処理が実行されることになります。
`Exception`はすべてのエラーを拾います。

**pythonのエラーの種類**

***ZeroDivisionError***

数値を0で割ると発生

```python
1/0
```
ZeroDivisionError Traceback (most recent call last)
<ipython-input-6-05c9758a9c21> in <module>()
----> 1 1/0
ZeroDivisionError: division by zero


***NameError***

存在しない変数やメソッドを参照しようとすると発生

```python
print(asokokoks)
```
NameError Traceback (most recent call last)
<ipython-input-7-ed0c4fbe8f44> in <module>()
----> 1 print(asokokoks)
NameError: name 'asokokoks' is not defined

そもそもこれは文法間違いであるので、
`try-except`ではあまり用いられない使い方です。

***KeyError***

辞書型のキーがない場合などに発生

```
d ={1:2,3:4}
print(d[5])
```
KeyError Traceback (most recent call last)
<ipython-input-8-bfd75dce33c0> in <module>()
1 d ={1:2,3:4}
----> 2 print(d[5])
KeyError: 5

他にもたくさんのエラーが存在します。
以下のコードはpythonの組み込みエラーを表示します。

`[i for i in dir(__builtins__) if 'Error' in i]`

```python
['ArithmeticError',
'AssertionError',
'AttributeError',
'BlockingIOError',
'BrokenPipeError',
'BufferError',
'ChildProcessError',
'ConnectionAbortedError',
'ConnectionError',
'ConnectionRefusedError',
'ConnectionResetError',
'EOFError',
'EnvironmentError',
'FileExistsError',
'FileNotFoundError',
'FloatingPointError',
'IOError',
'ImportError',
'IndentationError',
'IndexError',
'InterruptedError',
'IsADirectoryError',
'KeyError',
'LookupError',
'MemoryError',
'NameError',
'NotADirectoryError',
'NotImplementedError',
'OSError',
'OverflowError',
'PermissionError',
'ProcessLookupError',
'RecursionError',
'ReferenceError',
'RuntimeError',
'SyntaxError',
'SystemError',
'TabError',
'TimeoutError',
'TypeError',
'UnboundLocalError',
'UnicodeDecodeError',
'UnicodeEncodeError',
'UnicodeError',
'UnicodeTranslateError',
'ValueError',
'ZeroDivisionError']
```

特に発生するエラーがわからない場合はとりあえず`try - except`で囲んでおいて
のちにエラー内容に合わせて処理を追加してゆくというのが良いでしょう。

`例外処理`はプログラムでは必須になるテクニックなので必ず覚えておいてください。


## ライブラリの利用

[![表示されなかったらすみません](https://img.youtube.com/vi/EqyCKRZui8g/0.jpg)](https://youtu.be/EqyCKRZui8g)

プログラム言語には、他の人が作ったプログラムを利用したり、
自分が作ったプログラムを利用できるようにする便利な機能が備わっています。

それが`ライブラリ`です。

pythonでは仕事や研究などですぐに使える`ライブラリ`が
数多く備わっており、機械学習や統計分析なども
`ライブラリ`を用いて簡単に行うことができるようになっています。

`ライブラリ`の使い方はすごくシンプルです。

**ライブラリの読み込み方**

`import ライブラリ名`
`from パッケージ名 import ライブラリ名`

それでは`ライブラリ`を使っていきましょう。
ランダム値を作り出す`random`ライブラリを読み込みします。

```python
import random
```

ランダムの整数を生成する関数randint()の呼び出し方
`random.randint(最小値 , 最大値)`

```python
random.randint(1,10)
```
10

```python
# ランダムのメソッドを10回呼び出す
for i in range(10):
    print(random.randint(1,10))
```
9
5
3
8
2
9
2
1
4
7

`ライブラリ`は特定の処理を関数化しているものが多いです。
なお`ライブラリ`のことを別の呼び方で`モジュール`とも言います。

`モジュール`を読み込む、とかの表現が有ったら、
`他のプログラム`を読み込んでいると思って大丈夫です。

**pythonの主なライブラリ**

***os ライブラリ***
PCのファイルやディレクトリなどの操作ができる


```python
import os

# 自分のPCのディレクトリのファイルやフォルダをリスト化する
print(os.listdir('/'))
```
['.DocumentRevisions-V100', '.file', '.fseventsd', '.PKInstallSandboxManager', '.Spotlight-V100', '.Trashes', '.vol', 'anaconda', 'Applications', 'bin', 'cores', 'dev', 'etc', 'home', 'installer.failurerequests', 'Library', 'Live2D_Cache', 'net', 'Network', 'opt', 'private', 'sbin', 'System', 'tmp', 'Users', 'usr', 'var', 'Volumes']

`os.listdir(ファイルやディレクトリなど)`

`listdir`の引数にディレクトリを指定するとそのディレクトリ内の
ファイルやフォルダがリスト値で返されます。

自分のPCのファイルやディレクトリを探したり、
ファイルの一覧を使って、特定のファイルを読み込みしたり、
操作するようなプログラムを書くのに役立ちます。


***time ライブラリ***
プログラム内での時間に関わる操作を行うライブラリ

```python
import time
# 2秒間プログラムを止める
time.sleep(2)
print(2)
time.sleep(1)
print(1)
```
2
1

**自作のライブラリの使い方**

`pythonファイル`を作成すれば、`自作のライブラリ`の読み込みができます。
`import`できるライブラリの拡張子は`.py`になります。
まずは簡単な`pythonの実行ファイル`を作りましょう。

このノートブックが置いてある
フォルダの中に`pythonファイル`を作っていきます。
テキストエディターなどで作成し拡張子を`.py`で保存します。

```sample.py
def hello(aa):
    print(aa)
```

pythonファイルを作成したら
`ライブラリ`として読み込みでき、`メソッド`などが使えるようになります。

```python
# 自作ライブラリの読み込み
import sample

# メソッドの呼び出し
sample.hello('hello')
```
hello


ライブラリは無数にあり、anacondaでインストールした際には400種類くらいの
ライブラリが使えるようになっています。
そのライブラリの名称とかぶるとややこしいためインストール済みのライブラリをみてみます。


macの場合はノートブック上で

`! pip list`
これでコマンドが実行できて、表示できます。

windowsの場合はコマンドプロンプトなどで
`!`をとって実行してみてください。

```shell

! pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
adal (0.4.5)
alabaster (0.7.10)
alembic (0.9.6)
anaconda-client (1.6.3)
anaconda-navigator (1.6.2)
anaconda-project (0.6.0)
appnope (0.1.0)
appscript (1.0.1)
argcomplete (1.0.0)
asn1crypto (0.22.0)
astroid (1.4.9)
astropy (1.3.2)
azure (2.0.0rc6)
azure-batch (1.0.0)
azure-common (1.1.6)
azure-datalake-store (0.0.12)
azure-graphrbac (0.30.0)
azure-keyvault (0.3.5)
azure-mgmt (0.30.0rc6)
azure-mgmt-authorization (0.30.0)
azure-mgmt-batch (1.0.0)
azure-mgmt-cdn (0.30.3)
azure-mgmt-cognitiveservices (1.0.0)
azure-mgmt-compute (0.30.0rc6)
azure-mgmt-containerregistry (0.2.1)
azure-mgmt-datalake-analytics (0.1.6)
azure-mgmt-datalake-nspkg (2.0.0)
azure-mgmt-datalake-store (0.1.6)
azure-mgmt-devtestlabs (2.0.0)
azure-mgmt-dns (1.0.1)
azure-mgmt-documentdb (0.1.3)
azure-mgmt-iothub (0.2.2)
azure-mgmt-keyvault (0.30.0rc6)
azure-mgmt-logic (1.0.0)
azure-mgmt-monitor (0.2.1)
azure-mgmt-network (0.30.0rc6)
azure-mgmt-nspkg (2.0.0)
azure-mgmt-rdbms (0.1.0)
azure-mgmt-redis (1.0.0)
azure-mgmt-resource (0.30.0rc6)
azure-mgmt-scheduler (1.0.0)
azure-mgmt-sql (0.5.3)
azure-mgmt-storage (0.30.0rc6)
azure-mgmt-trafficmanager (0.30.0)
azure-mgmt-web (0.32.0)
azure-nspkg (2.0.0)
azure-servicebus (0.20.3)
azure-servicefabric (5.6.130)
azure-servicemanagement-legacy (0.20.4)
azure-storage (0.20.3)
Babel (2.4.0)
backports.shutil-get-terminal-size (1.0.0)
bcolz (0.12.1)
beautifulsoup4 (4.6.0)
bitarray (0.8.1)
blaze (0.10.1)
bleach (1.5.0)
bokeh (0.12.5)
boto (2.46.1)
Bottleneck (1.2.1)
bs4 (0.0.1)
certifi (2017.4.17)
cffi (1.10.0)
chardet (3.0.4)
charts (0.4.6)
chest (0.2.3)
click (6.7)
cloudpickle (0.2.2)
clyent (1.2.2)
colorama (0.3.9)
conda (4.5.11)
conda-build (3.0.19)
conda-verify (2.0.0)
configobj (5.0.6)
contextlib2 (0.5.5)
coverage (4.4.2)
cryptography (1.9)
cssselect (1.0.1)
cycler (0.10.0)
cyordereddict (1.0.0)
Cython (0.27.2)
cytoolz (0.8.2)
dask (0.14.3)
datashape (0.5.4)
decorator (4.0.11)
dill (0.2.6)
distributed (1.16.3)
Django (1.10.6)
django-bootstrap3 (8.2.2)
django-crispy-forms (1.6.1)
django-debug-toolbar (1.8)
django-pure-pagination (0.3.0)
django-registration-redux (1.5)
django-storages (1.6.3)
django-torina-blog (0.5)
docutils (0.13.1)
dynd (0.7.3.dev1)
empyrical (0.3.2)
entrypoints (0.2.2)
et-xmlfile (1.0.1)
fastcache (1.0.2)
fbprophet (0.2.1)
filelock (2.0.7)
Flask (0.12.2)
Flask-Cors (3.0.2)
future (0.16.0)
gevent (1.2.1)
glob2 (0.5)
greenlet (0.4.12)
h5py (2.7.0)
HeapDict (1.0.0)
html5lib (0.999999999)
idna (2.5)
imagesize (0.7.1)
intervaltree (2.1.0)
ipykernel (4.6.1)
ipython (5.3.0)
ipython-genutils (0.2.0)
ipywidgets (6.0.0)
isodate (0.5.4)
isort (4.2.5)
itsdangerous (0.24)
Janome (0.3.5)
jdcal (1.3)
jedi (0.10.2)
Jinja2 (2.9.6)
jsonschema (2.6.0)
jupyter (1.0.0)
jupyter-client (5.0.1)
jupyter-console (5.1.0)
jupyter-core (4.3.0)
keyring (10.4.0)
lazy-object-proxy (1.2.2)
line-bot-sdk (1.0.2)
llvmlite (0.18.0)
locket (0.2.0)
Logbook (1.1.0)
lru-dict (1.1.6)
lxml (3.7.3)
Mako (1.0.7)
MarkupSafe (0.23)
matplotlib (2.0.2)
mistune (0.7.4)
mpmath (0.19)
msgpack-python (0.4.8)
msrest (0.4.11)
msrestazure (0.4.11)
multipledispatch (0.4.9)
navigator-updater (0.1.0)
nb-anacondacloud (1.4.0)
nb-conda (2.2.0)
nb-conda-kernels (2.1.0)
nbconvert (5.1.1)
nbformat (4.4.0)
nbpresent (3.0.2)
networkx (1.11)
nltk (3.2.4)
nose (1.3.7)
notebook (5.0.0)
numba (0.33.0)
numexpr (2.6.4)
numpy (1.12.1)
numpydoc (0.6.0)
oauthlib (2.0.2)
odo (0.5.0)
olefile (0.44)
opencv-python (3.4.5.20)
openpyxl (2.4.7)
packaging (16.8)
pandas (0.20.1)
pandas-datareader (0.5.0)
pandas-highcharts (0.5.2)
pandocfilters (1.4.1)
partd (0.3.8)
pathlib2 (2.2.1)
patsy (0.4.1)
pep8 (1.7.0)
pexpect (4.2.1)
pickleshare (0.7.4)
Pillow (4.1.1)
pip (9.0.1)
pkginfo (1.4.1)
plotly (2.3.0)
ply (3.10)
prompt-toolkit (1.0.14)
psutil (5.2.2)
psycopg2 (2.7.1)
ptyprocess (0.5.1)
py (1.4.33)
py-d3 (0.2.7)
PyAlgoTrade (0.18)
pyasn1 (0.2.3)
pycosat (0.6.3)
pycparser (2.18)
pycrypto (2.6.1)
pycurl (7.43.0)
pyflakes (1.5.0)
Pygments (2.2.0)
PyJWT (1.5.2)
pylint (1.6.4)
pyodbc (4.0.16)
pyOpenSSL (17.0.0)
pyparsing (2.1.4)
pystan (2.17.0.0)
pytest (3.0.7)
python-dateutil (2.6.0)
python-editor (1.0.3)
python-highcharts (0.4.1)
pytz (2017.2)
PyWavelets (0.5.2)
PyYAML (3.12)
pyzmq (16.0.2)
QtAwesome (0.4.4)
qtconsole (4.3.0)
QtPy (1.2.1)
redis (2.10.5)
requests (2.18.1)
requests-file (1.4.2)
requests-ftp (0.3.1)
requests-oauthlib (0.8.0)
rope-py3k (0.9.4.post1)
scikit-image (0.13.0)
scikit-learn (0.18.1)
scipy (0.19.0)
seaborn (0.7.1)
selenium (3.0.2)
setuptools (27.2.0)
simplegeneric (0.8.1)
singledispatch (3.4.0.3)
six (1.10.0)
snowballstemmer (1.2.1)
sockjs-tornado (1.0.3)
sortedcollections (0.5.3)
sortedcontainers (1.5.7)
Sphinx (1.5.6)
sphinx-rtd-theme (0.2.4)
spyder (3.1.4)
SQLAlchemy (1.1.9)
sqlparse (0.2.3)
statsmodels (0.8.0)
sympy (1.0)
tables (3.4.2)
tblib (1.3.2)
terminado (0.6)
testpath (0.3)
toolz (0.8.2)
tornado (4.5.1)
traitlets (4.3.2)
unicodecsv (0.14.1)
urllib3 (1.21.1)
wcwidth (0.1.7)
webencodings (0.5)
Werkzeug (0.12.2)
wheel (0.29.0)
widgetsnbextension (2.0.0)
wrapt (1.10.10)
xlrd (1.0.0)
XlsxWriter (0.9.6)
xlwings (0.10.4)
xlwt (1.2.0)
zict (0.1.2)
zipline (1.1.1)
```

ライブラリの名称は、この名称と一緒でなければ大丈夫なので、
検索で引っかかったら、その名前は変えましょう。

自分の名前や、会社の名前とか、ニックネームとかを用いれば
ここら辺はカバーされるかと思います。

ライブラリの利用はプログラムでは当たり前のこととなっており、
自分でプログラムを書かずに、すでに使えるプログラムは
ライブラリから呼び出した方が賢明です。

どんなライブラリが使えるのか、
全てを紹介することはできませんので、基本編はここまでです。


## まとめ

Python言語はオブジェクト志向の言語であるので、全てのデータはオブジェクトになります。
クラスの概念などと合わせて、データの取り扱い方を把握しておきましょう。

プログラムを書く上では例外処理と、ライブラリの読み込みは欠かせません。
どちらもスムーズに使えるように、書き方を練習しておくと良いでしょう。

よく使われるライブラリに関しては、ここでは紹介しきれませんので
自分で調べながらコードを書いて試してみましょう。

よく使われるコードに関してはまとめをチートシートとして作成しておきました。

こちらにリンクを貼っておきますので、是非参考にしてみてください。
https://note.com/otupy/n/n1bedb9f36e54


君がエンジニアになるまであと67日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython