3-2、Pythonのデータ型、数値と変数

##Pythonのデータ型
　まず知っておきたいのは、Pythonではデータがオブジェクトとして扱われます。Pythonプログラム処理できるデータは、数値、テキスト、画像、音声、ビデオなど色々あります。
　データを扱うには、事前にデータの「型」を定義するのが基本です。Pythonには予め用意されたデータ型がいくつがあります。よく使うデータ型を以下に示します。

|データ型 |意味       |データ例              |
|:-------|:---------|:---------------------|
|int     |整数       |123, -456, 78e9      |
|float   |浮動小数数点|1.23, -4.56           |
|str     |文字列     |'abc', "I'm a student." |
|list    |リスト     |[1, 2, "a", 4, "b"], [1, [1, "a"]] |
|tuple   |タプル     |(1, 'abc', True, 4.5)|
|dict    |辞書       |{'name':'Tanaka', 'age': 25}|
|bool    |ブール、真偽|True, False|

##数値
####整数
　Pythonでは全ての整数（負の整数も）を処理できます。上限はありません。プログラム中の表現は数学の書き方と同じです。例：`0`, `-1`, `10`, `=100`, `+200` 等。
　コンピュータ内部では[バイナリ(2進数)](https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%80%B2%E6%B3%95)を使っていますが、プログラムでは[16進数](https://ja.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E9%80%B2%E6%B3%95)を使うのが便利です。16進数は`0x`＋　0~9,a~f で表します。例：`0xff01` `0xb13c` 等

####浮動小数点数
　浮動小数点数は小数です。コンピュータ内部での小数表現において、小数点の位置が固定ではないので、浮動小数点数と言われるそうです。例：`1.23e5` と `12.3e4`は同じです。浮動小数点数の表現は数学の書き方でも大丈夫です。例：`12.3` `1.23e5`等

####ブール型
　ブール型はTrueかFalseの値のみを持ちます（先頭文字が大文字であることに注意してください）。

```py
>>> True
True
>>> False
False
>>> 1 > 3
False
>>> 3 > 2
Ture
```
`and` `or` `not`によるプール演算もできます。
`and` は二つの値の論理積（かつ）を返します。

```py
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 1 < 3 and 3 > 2
True
```

`or`は二つの値の論理和（または）を返します。

```py
>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 1 > 3 and 3 > 2
True
```

`not`は値の否定（でない）を返す。`True` `False` が反転します。

```py
>>>not True
False
>>>not False
True
>>>not 1>3
True
```
ブール型はif文の条件式としてよく使われます。

```py
if age >= 20:
    print('Adult')
else:
    print('Minor')
```
##nullオブジェクト
nullとは「何もない」、「空」を指す言葉です。nullオブジェクトは「空っぽ」の状態を表すオブジェクトです。
Pythonでは`None`を使います。
注意：数値の`0`は意味を持っています、`None`は特別な「空」値なので、同じではありません。

##変数
　変数の概念は数学と似ていて、値を代用する役割を果たします。値を記憶しておくことができます。プログラムでは数値だけではなく、すべてのデータ型の値を記憶できます。
　変数はプログラムの中で1つしか使用できないわけではなく、複数の変数を同時に使用することが出来ます。そこで、変数を区別するために変数にはそれぞれ変数名を付けます。

変数に名前を付ける時は次のルールに従います。
　1) 1文字目は英文字かアンダーバー(_)
　2) 2文字目以降は英数字かアンダーバー
　3) 予約語は使用できない
　4) 大文字と小文字は区別される
　※予約語はPythonで定義されている変数名である。例：`and` `del` `for` `is` `if` 等。

```py
# -*- coding: utf-8 -*-
age = 23             # 整数値23を変数ageとして記憶
StudentNum = 'T007'  # 文字列'T007'を変数StudentNumとして記憶
_Answer = True       # ブール値Trueを変数_Answerとして記憶
```
 Pythonの`=`はデータを変数へ代入する意味です。同じ変数を繰り返してデータの代入ができる、しかも、違うデータ型の代入もできる。

```py
# -*- coding: utf-8 -*-
Answer = 23          # 整数23を変数Answerとして記憶
print(Answer)
Answer = False       # ブール値Falseを変数Answerとして記憶（記憶変更）
print(Answer)
```
注意： Pythonの`=`は数学の`=`（イコール）と違います。

```py
# -*- coding: utf-8 -*-
a = 10
a = a + 5  # ここは「a + 5」を計算した結果「15」を変数aとして記憶する
```
#### 変数とパソコンの内部処理
　プログラムに`a = 10`を書いたときに、パソコンの中に下記二つの動作を行う。
　1. メモリ上に`10`という整数型オブジェクトを作る
　2. 変数名`a`を辞書キー、整数型オブジェクト`10`を辞書値とした辞書データを作り、変数辞書に登録する

変数`a` を 変数`b`に代入すると、変数`a`が記憶しているオブジェクトを変数`b`にも記憶します。変数`a`と変数`b`で同じひとつのオブジェクトを記憶します。

```py
# -*- coding: utf-8 -*-
a = "Tanaka"  # 文字列"Tanaka"を作り、変数`a`として記憶する
b = a         # 変数`a`が記憶してる"Tanaka"を、変数`b`として記憶する
a = 10        # 整数`10`を作り、変数`a`に記憶しなおす。変数`b`の記憶は"Tanaka"のまま変わらない
print(a)
print(b)
```
結果は
![3-2変数.PNG](https://qiita-image-store.s3.amazonaws.com/0/263439/3164b1a0-e634-a12a-f2a8-a4ff58f2ec68.png)
となります。

####　定数
　定数は、固定の値に固定の名前（定数）を与えたものである。ただし変数と異なり、一度代入するとその内容を変更することはできません。例えば数学でよく使った`π`は定数となります`PI = 3.14159265359`。
しかし、Pythonでは定数を定義することができません。慣例的に全部大文字の変数名は定数として扱うルール（約束）が使われています。

##まとめ
・Pythonは沢山のデータをオブジェクトとして扱う。
・変数はデータの「名前」として扱う。変数は変数辞書に登録される。
・`b = a`は、変数`a`が記憶しているデータ（オブジェクト）を変数`b`にも記憶する。その後、`a`の記憶を別のデータに置き換えても、`b`の記憶は変わらない。
・Pythonの数値データに上限はありません。(C言語のint型のサイズは4バイトで、最大値は2147483647、最小値は-2147483648となります)。Pythonの浮動小数点数には上限がありますが、一定範囲を超えると`inf`（無限大）になります。

前章　[3-1、Pythonの基礎](https://qiita.com/ousrok/items/871ddad90a4e71397a1f)
次章　3-3、Pythonの文字列
目次　[非IT業種のITメモ](https://qiita.com/ousrok/items/135734b5f66afb497253)