Python の数値 (Number)
Python の定数
プログラム中で普通に数字を書いたら 10 進数として扱われます。
2進数、8進数、16進数は、それぞれ接頭辞、0b、0o、0xを付けることによって、記述できます。
>>> '{:d}'.format(0b11) # 10進数で表示
'3'
>>> '{:d}'.format(0o11)
'9'
>>> '{:d}'.format(0x11)
'17'
Python の数値 〜 int と float
Python では整数値は int クラスのオブジェクトになります。Python では整数型の数値の最大値や最小値はありません。
>>> m = 123
>>> type(m)
<class 'int'>
尚、Python 2 までは int に上限がありました。Python 3 で境界がなくなり自動的にサイズが拡張されるようになりました。
Python 2 では sys.maxint が最大値を表しています。
>>> import sys
>>> sys.maxint
9223372036854775807
>>> m = sys.maxint
>>> m
9223372036854775807
>>> type(m)
<type 'int'>
>>> m = m + 1
>>> m
9223372036854775808L # 末尾にL。これはlong型
>>> type(m)
<type 'long'>
小数点がある値は float 型のオブジェクトになります。
>>> x = 1.23
>>> x
1.23
>>> type(x)
<class 'float'>
尚、float の数値はコンピュータでの数値の表現の都合上、誤差を含むことを少し覚えておきましょう。
このため、次のように「0.1 + 0.1 + 0.1 という足し算の結果と 0.3 は違う」という結果がでてくることもあります。(== という記号で左辺等辺が等しいかどうかチェックする意味になります)
>>> 0.1 + 0.1 + 0.1 == 0.3
False
特にお金の計算を行うようなプログラムでは、こうした足し算が合わないのは致命的です。 この場合は decimal 型を使います。
>>> from decimal import *
>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') == Decimal('0.3')
True
Python の数値演算
数値の演算、プラス +、マイナス -、乗算 *、除算 /、剰余 %、 指数 ** です。
>>> 1 + 2
3
>>> 1 - 2
-1
>>> 2 * 3
6
>>> 2 ** 3
8
>>> 10 % 3
1
>>> 8 / 2
4.0
2 ** 3 は 「2 の 3 乗」 ということで、8 が出力されています。
10 % 3 は剰余、つまり「10 を 3 で割った余り」 ということで 1 です。
Python では 8 や 2 などの整数は int 型ですが、割り算は float として計算されます。このため 8 / 2 の答えは小数点付きの 4.0 になっています。
蛇足ですが、10 割る 3 (10/3) の計算を float のまま行うと次のようになります。
>>> 10 / 3
3.3333333333333335
もし 10/3 = 3.33 くらいの答えが欲しい場合は、decimal を使って次のようにします。
>>> from decimal import *
>>> getcontext().prec = 3
>>> Decimal('10') / Decimal('3')
Decimal('3.33')
その他、Python では複素数の演算もできます。複素数の扱いについては「Python の複素数型」をみてください。
Python での指数表記
Python で数値を表すときには、関数電卓などでもよく見られる指数表記が使えます。指数表記という言葉以外に、科学表記 (scientific notation) とか E 表記 (E notation)などとも呼ばれます。
10 の指数を記号 E または e を使って書くことができます。例えば \(1.2 \times 10^5\) は 1.2E5 または 1.2e5 になります。
指数は英語で Exponent であるため、記号はその頭文字の E になっています。ネイビア数の \(e\) のことではありません。
>>> 1e1
10.0
>>> 1e2
100.0
>>> 1e3
1000.0
>>> 1e-1 # 10 のマイナス 1 乗
0.1
>>> 1e-2
0.01
>>> 1E1 # 大文字の E でも同様です
10.0
>>> 1E-1
0.1
Python で乱数を生成する
乱数を取得するには random モジュールの random 関数を使います。
>>> import random
>>> random.random()
0.16474214687385758
>>> random.random()
0.9868458915065201
>>> random.random()
0.6081980694587503
>>>
あるリスト内の任意の値をランダムに取得する、という場合には次のように choice 関数を使います。
>>> L = [1,2,3,4,5]
>>> random.choice(L)
4
>>> random.choice(L)
5
>>> random.choice(L)
2
Python で数学の基本的な関数を使う
Python に組み込まれている math モジュールを利用することで、円周率 π などの値やサインやコサインなどの基本的な関数等を利用できます。
>>> import math
>>> math.pi
3.141592653589793
>>> math.sin(math.pi/2)
1.0
>>> math.sin(math.pi/4)
0.7071067811865475
>>> 1/(2**0.5) # 1割るルート2で上と同じ値になるかチェック
0.7071067811865475
この他、SciPy などを利用することによって、科学技術系の数値計算を行うこともできます。
SciPy の利用例は「SciPy を用いた簡単な積分の計算例」などをみてください。