TL;DR
このページでは Python で使われる数値の基本操作方法を網羅的に述べる。
数値のポイント
- 四則演算などがサポートされている
- 数値型は不変な型なので、演算結果は常に新しいオブジェクトとして返される
- 組み込みの数値型は 3 つある
組み込みの数値型は数値を書くだけで値を作成できる。これを数値リテラルという。数値リテラルには、整数を扱う int 型、浮動小数点を扱う float 型、複素数を扱う complex 型の 3 つがある。これについては後述する。
整数の演算
次の表に示すのは整数の基本的な演算方法である。
演算子 | 意味 | 例 | 結果 |
---|---|---|---|
+ |
加算 | 1 + 2 | 3 |
- |
減算 | 100 - 10 | 90 |
* |
乗算 | 3 * 5 | 15 |
/ |
浮動小数点の除算 | 7 / 2 | 3.5 |
// |
整数の除算(切り捨て) | 7 // 2 | 3 |
% |
剰余 | 7 % 3 | 1 |
** |
べき乗 | 3 ** 4 | 81 |
整数を整数で割るときも、/ を使うと、浮動小数点で返される。プレフィックスで基数を指定しない限り、10 進と見なされる。
9 / 5
# 1.8
整数と小数の差は小数となり、整数どうしの商は小数になる。
print(1 + 2) # 3(整数どうしの和は整数)
print(1 - 2.0) # -1.0(整数と小数の差は小数)
print(1.0 * 2j) # 2j(小数と複素数の積は複素数)
print(1 / 1) # 1.0(整数どうしの商は小数)
7**2
# 49
7/2
# 3.5
7/1
# 7.0
7//1
# 7
# // は、整除
7%2
# 1
# ピタゴラスの定理
x = 3
y = 4
z = 5
n = 2
x**n + y**n == z**n
# True
# フェルマーの定理
from math import sqrt
x = 10
y = 6
n = 4
z = x**n+y**n
sqrt(z) # 106.28264204469139
type(sqrt(z)) == int # False
整数と浮動小数点を計算すると、整数値が浮動小数点数値にキャストされる。
50 + 3.
# 53.0
ブール値の False は 0(0.0)、True は 1(1.0) として扱われる。
True + 2
# 3
False + 2.0
# 2.0
累算代入演算子
= の前に算術演算子を入れると、演算と代入を結合できる。左辺の値と右辺の値を計算した結果が左辺に代入される。代入文と 2 項演算が複合した演算子。
a = 10
b = 3
a += b
a
# 13
a = 10
b = 3
a %= b
a
# 1
a = 10
b = 3
a **= b
a
# 1000
カンマ
カンマをつけるとタプルになる。
1,000,000
# (1, 0, 0)
アンダースコア
数字のセパレータをアンダースコアにすると数値が表示される。アンダースコアは無視される。
1_000_000
# 1000000
1_2_3
# 123
ゼロで割る
除算でも、ゼロで割ると例外が発生する。
3 / 0
# ZeroDivisionError
3 // 0
# ZeroDivisionError
組み込み関数
Python では、組み込みの数値型は 3 つある。
- int:整数を扱う
- float:浮動小数点
- complex:複素数
int()
数値型の値は、組み込み関数の int(),float(),complex() を使っても値を生成できる。
Python の整数以外のデータ型を整数に変換するには int() 関数を使う。int 型どうしの演算結果は、割り算では float 型、それ以外は int 型になる。
5 / 1
# 5.0
a = int(1)
a # 1
int('1')
# 1
浮動小数点を整数に変換すると、小数点以下が切り捨てられる。
int(2.9)
# 2
小数点を含む文字列は処理できない。
int('1.0')
# ValueError: invalid literal for int() with base 10: '1.0'
float()
整数を浮動小数点に変換する。float 型どうしの演算は float 型になる。数値として扱えない NaN も float 型として扱われる。
1.0 + 4.0
# 5.0
type(1.0)
# float
type(float('nan'))
# float
float(2.0)
# 2.0
complex()
complex()型は、複素数を扱う型である。数値リテラルに、j もしくは J を付けると定義できる。complex()どうしの演算は complex 型になる。
complex(1)
# (1+0j)
type(complex(1 + 2j))
# complex
complex(1 + 2j) + 3j
# (1+5j)
type(complex(1 + 2j) + 3j)
# complex
bool()
bool()関数は整数に対応するブール値を返す。ゼロは偽、ゼロ以外は真となる。なお、無限大は真となる。
bool(0)
# False
bool(1)
# Ture
bool(-1)
# True
bool(float('-inf')) # 無限大は真
# True
divmod()
divmod() を使えば、商と剰余を同時に出力することができる。
divmod(14, 5)
# (2, 4)
round()
round()は、第一引数の値を第二引数の桁数で丸める。最も近い整数に丸めて返す。丸めとは、数値の端数を処理して、指定した丸め幅の整数倍の数値に置き換えることである。Python では、四捨五入ではなく偶数丸めになる。
round(21.5)
# 22
n = 7 * 0.9
round(n)
# 6
round(0.5) # 0
round(1.5) # 2
round(2.5) # 2
round(3.5) # 4
round(4.5) # 4
floor()
floor(x) は x 以下の最大の整数を返す。floor 関数は math モジュールが入っているので、import して使う。
import math
math.floor(21.5)
# 21
ceil()
math モジュールには、floor とは反対の動きをする ceil 関数がある。ceil 関数は、指定の数値以上の最小の整数を返す。
import math
math.ceil(21.5)
# 22
sqrt()
sqrt は平方根を返す。from import を指定した後は、モジュール名を書かなくてもモジュールに入っている関数を使えるようになる。
import math
math.sqrt(9)
# 3.0
from math import sqrt
sqrt(9)
# 3.0