数学的な計算をする際に便利なmathモジュールや、乱数を作成するために使われるrandomモジュール等をご紹介します。
mathモジュール
mathモジュールは数学・科学計算用のモジュールです。
n乗の数、平方根、小数の処理などの関数がまとまっています。
mathモジュールを使うためにはimportが必要ですので、始めに宣言しておきましょう。
import math
小数を切り捨てる - floor()
引数に渡した数値を切り捨てて、整数を返します。
print(math.floor(5.51))
[出力結果]
5
小数を切り上げる - ceil()
引数に渡した数値の小数を切り上げて、整数を返します。
print(math.ceil(5.49))
[出力結果]
6
整数部を返す - trunc()
引数に渡した数値の整数部分のみを切り取り返します。
print(math.trunc(5.51))
[出力結果]
5
trunc()とfloor()は似ていますが、floor()が切り捨てで、trunc()は整数部分を返すだけなので、マイナス値を処理するときに違いが現れます。
print(math.trunc(-5.51))
print(math.floor(-5.51))
[出力結果]
-5
-6
trunc()は-5.51の整数部を取得するので-5になります。一方floor()はマイナス値の切り捨てを行うので-6になります。
乗数を計算する - pow()
xのy乗を計算します。xは1つ目の引数、yは2つ目の引数です。
print(math.pow(3, 4))
[出力結果]
81.0
平方根を計算する - sqrt()
引数に渡した数値の平方根を計算します。
print(math.sqrt(2))
[出力結果]
1.4142135623730951
絶対値を返す - fabs()
引数に渡した数値の絶対値を計算します。
print(math.fabs(3))
print(math.fabs(-3))
[出力結果]
3.0
3.0
randomモジュール
randomモジュールを使えば、ランダムな整数や小数を作成できます。こちらもimportが必要です。
import radom
0.0〜1.0未満の数値を生成する - random()
0.0以上1.0未満の浮動小数点数を生成できます。
print(random.random())
[出力結果]
0.7083062926809143 ※実行するごとに変わる
任意の範囲の数値を生成する - uniform()
a以上b以下、またはb以上a以下の浮動小数点数を生成できます。
aは1つ目の引数、bは2つ目の引数です。
print(random.uniform(0, 10))
[出力結果]
6.7759909336150494
range()の要素からランダムに取得 - randrange()
range()で作成される数列の中からランダムに数値を取得できます。
引数はrange()と同じで、1つ目の引数は開始値、2つ目の引数は終了値、3つ目の引数はステップ数で、1つしか引数を指定しなかった場合は終了値のみが引数として渡されます。
print(random.randrange(10))
print(random.randrange(10, 100, 5))
[出力結果]
8
45
ランダムな整数を生成する - randint()
a以上b以下の整数を生成できます。
aは1つ目の引数、bは2つ目の引数です。
import random
print(random.randint(10, 20))
[出力結果]
13
リストやタプルからランダムに値を取得する - choice()
あらかじめ用意されているリストやタプルから値をランダムで取得できます。
また、ある文字列から1つの文字をランダムで取得することも可能です。
l = [3, 6, 8, 1, 0]
print(random.choice(l))
s = 'abcdefg'
print(random.choice(s))
[出力結果]
8
g
choice()では単数の要素しか取得できませんが、sample()やchoices()を使えば複数の要素を取得することもできます。
sample()は重複なし、choices()は重複ありで取得できます。
l = [3, 6, 8, 1, 0]
print(random.sample(l, 3))
print(random.choices(l, k=3))
s = 'abcdefg'
print(random.sample(s, 3))
print(random.choices(s, k=3))
[出力結果]
[1, 8, 6]
[3, 6, 3]
['d', 'b', 'f']
['a', 'a', 'd']
sample()では重複せず、choices()では重複して取得できているのがわかります。
choices()では取得数を指定する引数は k=取得数 と指定する必要があるので注意が必要です。
乱数を固定する方法- seed()
最後にseed()を使って乱数を固定する方法をご紹介します。
randomモジュールにはシード値と呼ばれる「乱数の数値を決めるための値」があります。
シード値はデフォルトでシステム時刻を使っていますが、引数に数値を入れ、シード値を固定することで乱数も固定できます。
for i in range(5):
random.seed(1) #固定する
print(random.randint(1, 10))
[出力結果]
3
3
3
3
3