Pythonのmathについて、復習メモ。
[Python] math : sqrt / pow / ceil / floor / fabs
[Python] math : factorial / log / gcd / degrees / radians
の続きです。
math.isqrt(n)
nの平方根の整数部分を返す(n は正の整数である必要がある)
import math
n = 25
result = math.isqrt(n)
print(f"isqrt({n}) = {result}") # 出力: isqrt(25) = 5
n = 26
result = math.isqrt(n)
print(f"isqrt({n}) = {result}") # 出力: isqrt(26) = 5
math.prod(iterable, *, start=1)
iterableの要素の積を返す
startはオプションの開始値で、デフォルトは1
import math
numbers = [2, 3, 4]
result = math.prod(numbers)
print(f"prod({numbers}) = {result}")
# 出力: prod([2, 3, 4]) = 24
numbers = [2, 3, 4]
start = 5
result = math.prod(numbers, start=start) # start値を指定
print(f"prod({numbers}, start={start}) = {result}")
# 出力: prod([2, 3, 4], start=5) = 120
math.comb(n, k)
nCk (n 個から k 個を選ぶ組み合わせの数) を返す。
import math
n = 5
k = 2
result = math.comb(n, k)
print(f"comb({n}, {k}) = {result}") # 出力: comb(5, 2) = 10
math.perm(n, k=None)
nPk (n 個から k 個を選ぶ順列の数) を返す
kが指定されていない場合は、nPn (n!) を返す。
import math
n = 5
k = 2
result = math.perm(n, k)
print(f"perm({n}, {k}) = {result}") # 出力: perm(5, 2) = 20
n = 5
result = math.perm(n) # kが指定されていない場合
print(f"perm({n}) = {result}") # 出力: perm(5) = 120
math.fsum(iterable)
iterableの要素の合計を正確に計算する
浮動小数点数の合計で発生する(可能性がある)、丸め誤差を軽減する場合など
import math
numbers = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
result = sum(numbers) # 通常のsum関数
print(f"sum({numbers}) = {result}")
#(誤差が発生)
# 出力: sum([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) = 0.9999999999999999
result = math.fsum(numbers)
print(f"fsum({numbers}) = {result}")
# 出力: fsum([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) = 1.0
まとめ
今回は、mathモジュールの関数 isqrt, prod, comb, perm, fsum について紹介しました。
そろそろ、今まで紹介した 関数を使って、簡単な対話型ゲームを作ってみようかと思います。