3.1 数値型: int
, float
,
complex
Pythonにはいくつかの数値型があり、それぞれ異なるタスクやデータ処理に適しています。int
, float
, complex
と、整数のサブクラスであるブール型bool
について以前に触れましたね。ここではそれぞれの型をもうちょっと詳しく見ていきます。
int
(整数):
これはおそらくPythonで最もよく使われる数値型です。整数は正でも負でもOKで、小数点はありません。 Pythonは任意精度をサポートするので、実質的にマシンのメモリ制限を除けば、扱える数字のサイズに限界はありません。
float
(浮動小数点数):
これらの数字は実数を表現し、小数点を含むことができます。PythonはIEEE 754倍精度標準に準拠し、約15桁の精度を持ちます。
complex
(複素数):
複素数は実部と虚部を持ち、どちらも浮動小数点数で表されます。Pythonでは虚部を表すのにj
またはJ
を使います。たとえば、次のように複素数を作成できます:
complex_number = 3 + 5j
bool
(ブール値):
PythonではTrue
とFalse
は、整数の特化型で、それぞれ1と0として動作します。これにより、算術演算や他の数学的表現に使用できます。
算術演算:
Pythonは、加算、減算、乗算、除算、整数除算、余剰計算、累乗といった基本的な算術演算をすべてサポートしています。例えば:
- 加算: 3 + 2
- 減算: 5 - 2
- 乗算: 2 * 3
- 除算: 7 / 2
- 整数除算: 7 // 2
- 余剰計算: 7 % 2
- 累乗: 2 ** 3
型変換:
型変換(またはキャスト)についても話しましたよね。
数字を別の型に変換するには、int()
, float()
やcomplex()
などのキャストの関数を使います。
数値型の変換については、以前にいくつかの点を見てきましたが、次回の講義でさらに詳しく説明します。
3.2 疑似乱数
プログラマーが直面することがある、簡単そうなタスク:「特定のリストから夕方に見るランダムな映画を選ぶ」、「宝くじの当選者を決める」、「スマホを振って曲リストをシャッフルする」、「メッセージを暗号化するためのランダムな数字を選ぶ」…といったとき、毎回のように当然の疑問が湧くのです。どうやってそのランダムな数字を手に入れるの?
「本当の」ランダムな数を手に入れるのは、実はかなり難しいことなんです。 コンピュータに特別な数学コプロセッサを内蔵するほどで、それが「真のランダム性」の要件を満たす数字を生成します。
そこでプログラマーたちは<強>疑似乱数強>という独自の解決策を考えました。疑似乱数とは、一見ランダムに見えるけど、専門家が詳細に分析すると一定の法則性を見つけることができるような数列のことです。秘密文書の暗号化には向かないけど、ゲームでサイコロを投げるようなシミュレーションにはぴったりです。
疑似乱数を生成する<強>多くのアルゴリズム強>が存在し、ほとんどは前の数字といくつかの補助番号を元に次の乱数を生成します。
例えば、次のプログラムは画面に1000個のユニークな数字を表示します:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
ちなみに、私たちは疑似乱数ではなく、<強>数列強>の話をしています。単一の数を見ても、それがランダムかどうかは分かりませんから。
ランダムな数はさまざまな方法で得られます:
def get_random_number():
return 4 # これは確かにランダムな数 (zがサイコロを振って出した)、参照:「サイコロジョーク」
3.3 ライブラリrandom
Pythonには組み込みのrandomライブラリがあって、それを使ってみたくなるかもね。その名前からも分かるように、このライブラリを使って[疑似]乱数を生成できます。
randomライブラリは組み込みとはいえ、別のライブラリなので、使う前にコードにインポートする必要があります。
これはimport
というキーワードを使って行います。例:
import random
randomライブラリにはたくさんの面白いメソッドがありますが、今日はそのうちの2つだけに触れます: メソッドrandom()
とメソッドrandint()
です。類似したタスクを行いますが、目的は異なります。
メソッドrandom.random()
:
このメソッドは0.0から1.0の間の浮動小数点のランダムな数を返します。この範囲内の数は均等に生成されます。つまり、インターバル内のそれぞれの数が選ばれる確率は同じです。
import random
probability = random.random()
print("ランダム確率:", probability)
メソッドrandom.randint(a, b):
この関数はa
からb
までの範囲の整数をランダムに返します。random.random()
とは異なり、0から1の範囲の浮動小数点を返しますが、randint()
は整数を選びたいときに使います。たとえば、random.randint(1, 10)
は1
から10
までのどれかの整数を返します。
import random
dice_roll = random.randint(1, 6) # サイコロを振るシミュレーション
print("出た目:", dice_roll)
これらはとても便利で面白いメソッドなので、ぜひ活用してくださいね。
3.4 ライブラリmath
さて、ついでにもう一つ面白いライブラリを紹介しましょう。それはmathライブラリです。ここにはπやeのような数学の基本的な関数や定数が含まれています。
randomライブラリと同じように、このライブラリも使う前にインポートする必要があります:
import math
ここにPythonのmath
ライブラリの主要な関数と定数の一覧があります:
関数/定数 | 説明 |
---|---|
math.pi | 定数π、約3.14159 |
math.e | 自然対数の底、約2.71828 |
math.sqrt(x) | xの平方根を返す |
math.exp(x) | eのx乗を返す |
math.log(x[, base]) | 基数baseのxに対する対数を返す。もしbaseが指定されていない場合、自然対数を返す。 |
math.cos(x) | xのコサインを返す(xはラジアンで指定される) |
math.sin(x) | xのサインを返す(xはラジアンで指定される) |
math.tan(x) | xのタンジェントを返す(xはラジアンで指定される) |
math.ceil(x) | 数を最も近い整数に切り上げます |
math.floor(x) | 数を最も近い整数に切り捨てます |
math.factorial(x) | xの階乗を返す |
たとえ数学が得意でなくても、近い将来これらの関数を使う予定がないとしても、少なくとも3つの非常に便利なものがあります:
sqrt()
— 数の平方根ceil()
— 数を最も近い整数に切り上げるfloor()
— 数を最も近い整数に切り捨てる
例:
import math
number = 9.7
rounded_up = math.ceil(number) # 切り上げ、結果は10
rounded_down = math.floor(number) # 切り捨て、結果は9
print("切り上げた数:", rounded_up)
print("切り捨てた数:", rounded_down)
GO TO FULL VERSION