まえがき
最近、Pythonを勉強し始めたので、その学習メモです。
今回は数値演算、数学関数についてです。
数値演算
まずは、数値演算です。
Pythonでは、標準で整数、浮動小数点数、複素数を取り扱うことができます。
整数や浮動小数点は、C / C++ / C#などと違いビット数によって型を使い分ける必要がありません。
ちなみに、Python 3における整数と浮動小数点の精度は次のようになっているそうです。
| 種別 | 型名 | ビット数 | 詳細 | 備考 |
|---|---|---|---|---|
| 整数 | int | なし | 最大/最小の上限なし | メモリが許す限り大きな値を取扱可能 |
| 浮動小数点数 | float | 64bit | Cのdouble相当の精度 |
また、C / C++ / C#では標準で用意されていない複素数が使えることも特徴です。
整数(Integer Number)
Pythonでは、小数点をつけない数値を記述することで、整数として認識されます。
整数は、標準演算子で加算( + )、減算( - )、乗算( * )、除算( / or // )、剰余算( % )、累乗算( ** )を行うことができます。
除算は小数点以下も結果に含める"/"と、小数点以下を切り捨てる"//"を使い分けることができます。
int_num1 = 100 int_num2 = 3 add_num = int_num1 + int_num2 sub_num = int_num1 - int_num2 mul_num = int_num1 * int_num2 div_num1 = int_num1 / int_num2 div_num2 = int_num1 // int_num2 mod_num = int_num1 % int_num2 pow_num = int_num1 ** int_num2 print("Add : " + str(add_num)) print("Sub : " + str(sub_num)) print("Mul : " + str(mul_num)) print("Div : " + str(div_num1)) print("Div : " + str(div_num2)) print("Mod : " + str(mod_num)) print("Pow : " + str(pow_num))
実行結果
Add : 103 Sub : 97 Mul : 300 Div : 33.333333333333336 Div : 33 Mod : 1 Pow : 1000000
浮動小数点数(Floating Number)
また、小数点をつけると浮動小数点数として認識されます。
整数部分が0の場合は、省略することもできます。
浮動小数点数も整数と同様、加算( + )、減算( - )、乗算( * )、除算( / or // )、剰余算( % )、累乗算( ** )を行うことができます。
float_num1 = 3.14 float_num2 = .5 add_num = float_num1 + float_num2 sub_num = float_num1 - float_num2 mul_num = float_num1 * float_num2 div_num1 = float_num1 / float_num2 div_num2 = float_num1 // float_num2 mod_num = float_num1 % float_num2 pow_num = float_num1 ** float_num2 print("Add : " + str(add_num)) print("Sub : " + str(sub_num)) print("Mul : " + str(mul_num)) print("Div : " + str(div_num1)) print("Div : " + str(div_num2)) print("Mod : " + str(mod_num)) print("Pow : " + str(pow_num))
実行結果
Add : 3.64 Sub : 2.64 Mul : 1.57 Div : 6.28 Div : 6.0 Mod : 0.14000000000000012 Pow : 1.772004514666935
複素数(Complex Number)
「実数 + 虚数j」の形式で記述することで複素数として認識されます。
複素数は、加算( + )、減算( - )、乗算( * )、除算( / )を行うことができます。
complex_num1 = 10 + 8j complex_num2 = 3 + 2j add_num = complex_num1 + complex_num2 sub_num = complex_num1 - complex_num2 mul_num = complex_num1 * complex_num2 div_num = complex_num1 / complex_num2 print("Add : " + str(add_num)) print("Sub : " + str(sub_num)) print("Mul : " + str(mul_num)) print("Div : " + str(div_num))
実行結果
Add : (13+10j) Sub : (7+6j) Mul : (14+44j) Div : (3.5384615384615383+0.3076923076923079j)
文字列 -> 数値変換
文字列から数値への変換は、int()、float()、complex()関数(コンストラクタ?)を使用します。
複素数文字列から複素数へ変換する場合は、余計な空白は入れてはいけないようです。("1 + 2j"など)
str_num1 = "100" str_num2 = "3.14" result_num = int(str_num1) * float(str_num2) print(str_num1 + " * " + str_num2 + " = " + str(result_num)) str_num3 = "1+2j" print(complex(str_num3))
実行結果
100 * 3.14 = 314.0
数学関数
数学関数を使用するには、mathライブラリをインポートする必要があります。
import math
数学関数は使用できる関数が非常に多いので、よく使いそうなものだけをピックアップして紹介します。
定数
よく使用される数学定数です。
print("π = " + str(math.pi)) print("e = " + str(math.e)) print("τ = " + str(math.tau)) print("∞ = " + str(math.inf)) print("NaN = " + str(math.nan))
実行結果
π = 3.141592653589793 e = 2.718281828459045 τ = 6.283185307179586 ∞ = inf NaN = nan
絶対値(fabs)
print("|3.5| = " + str(math.fabs(3.5))) print("|-3.5| = " + str(math.fabs(-3.5)))
実行結果
|3.5| = 3.5 |-3.5| = 3.5
eの指数関数(exp)
print("e^2 = " + str(math.exp(2)))
実行結果
e^2 = 7.38905609893065
累乗(pow)
print("2^3 = " + str(math.pow(2, 3)))
実行結果
2^3 = 8.0
対数(log)
print("log2(8) = " + str(math.log(8, 2))) print("log10(100) = " + str(math.log10(100)))
実行結果
log2(8) = 3.0 log10(100) = 2.0
平方根(sqrt)
print("√3 = " + str(math.sqrt(3)))
実行結果
√3 = 1.7320508075688772
床関数(floor)
床関数は実数に対して、
以下の最大の整数を返します。
print("floor : 3.14 -> " + str(math.floor(3.14)))
実行結果
floor : 3.14 -> 3
天井関数(ceil)
天井関数は実数に対して、
以上の最小の整数を返します。
print("ceil : 3.14 -> " + str(math.ceil(3.14)))
実行結果
ceil : 3.14 -> 4
切り捨て(trunc)
切り捨て関数は、小数点以下を切り捨てた整数を返します。
print("trunc : 3.14 -> " + str(math.trunc(3.14)))
実行結果
trunc : 3.14 -> 3
三角関数
print("sin(π/2) = " + str(math.sin(math.pi / 2))) print("cos(π) = " + str(math.cos(math.pi))) print("tan(π/4) = " + str(math.tan(math.pi * 0.25))) print("asin(1) = " + str(math.asin(1))) print("acos(1) = " + str(math.acos(1))) print("atan(1) = " + str(math.atan(1)))
実行結果
sin(π/2) = 1.0 cos(π) = -1.0 tan(π/4) = 0.9999999999999999 asin(1) = 1.5707963267948966 acos(1) = 0.0 atan(1) = 0.7853981633974483
角度変換
print("180[deg] -> " + str(math.radians(180)) + "[rad]") print("π[rad] -> " + str(math.degrees(math.pi)) + "[deg]")
実行結果
180[deg] -> 3.141592653589793[rad] π[rad] -> 180.0[deg]
参考文献
Python 公式リファレンス
https://docs.python.org/ja/3.7/index.html
Python-izm
ゲームを作りながら楽しく学べるPythonプログラミング

ゲームを作りながら楽しく学べるPythonプログラミング (Future Coders(NextPublishing))
- 作者: 田中賢一郎
- 出版社/メーカー: インプレスR&D
- 発売日: 2017/03/24
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
エキスパートPythonプログラミング

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)
- 作者: Michal Jaworski,TarekZiade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: ドワンゴ
- 発売日: 2018/02/26
- メディア: Kindle版
- この商品を含むブログを見る