An Embedded Engineer’s Blog

とある組み込みエンジニアの備忘録的なブログです。

Python学習メモ - その2

まえがき

最近、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)

床関数は実数xに対して、x以下の最大の整数を返します。

print("floor : 3.14 -> " + str(math.floor(3.14)))

実行結果

floor : 3.14 -> 3


天井関数(ceil)

天井関数は実数xに対して、x以上の最小の整数を返します。

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

https://www.python-izm.com/

ゲームを作りながら楽しく学べるPythonプログラミング

エキスパートPythonプログラミング

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)