Pythonにおける数値、型変換、数学のマスター
Pythonにおける数値、型変換、数学のマスター
Pythonが数値データをどう扱うか、型変換のニュアンス、日常プログラミングで使える強力な数学ユーティリティを学びます。
Pythonの数値データ型
Pythonは数値を3つの基本型に分類します:整数用のint、小数部を持つ実数用のfloat、実部と虚部を持つcomplexです。小数点の有無でintとfloatが区別されます(例:5は整数、5.0は浮動小数点)。複素数はx + yj表記で、xが実部、yが虚部です。
type()で値のクラスを調べ、isinstance()で特定の型への所属を確認できます。例:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
出力:
<class 'int'> <class 'float'> (8+3j) True
Pythonの整数は任意精度で、浮動小数点は約15桁の精度を保ちます。バイナリ、16進数、8進数表現を扱う開発者向けに、Pythonは便利なプレフィックスを提供します:
| 数値システム | プレフィックス |
|---|---|
| バイナリ | 0b または 0B |
| 8進数 | 0o または 0O |
| 16進数 | 0x または 0X |
例:
# 出力: 107
print(0b1101011)
# 出力: 253 (251 + 2)
print(0xFB + 0b10)
# 出力: 13
print(0o15)
結果:
107 253 13
型変換(型強制)
浮動小数点オペランドが関与する算術演算では、Pythonは自動的に整数を浮動小数点に昇格させます。例:
>>> 1 + 2.0
3.0
明示的変換もint()、float()、complex()で簡単にでき、文字列のパースも可能です:
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
浮動小数点から整数への変換では、Pythonは丸めではなく小数部分を切り捨てます。
PythonのDecimal
浮動小数点演算はバイナリ表現の限界により予期せぬ結果を生むことがあります。例:
>>> (1.1 + 2.2) == 3.3
False
0.1のような数値はバイナリで厳密に表現できないため、微小な丸め誤差が生じます。decimalモジュールは任意精度の10進演算を提供し、これを緩和します:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
出力:
0.1 0.1000000000000000055511151231257827021181583404541015625
Decimalを使えば有効桁数と厳密な10進表現が保持され、金融計算に不可欠です:
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
出力:
3.3 3.000
10進演算はバイナリ浮動小数点より遅いため、金銭的価値、設定可能な精度、有効桁数制御が必要な場面に限定してDecimalを使用してください。
Floatの代わりにDecimalを使うべき場面
- 厳密な10進表現を要求する金融・通貨アプリケーション
- 精度を明示的に制御する必要があるシナリオ
- 有効な10進桁数の概念を必要とするアプリケーション
PythonのFractions
fractionsモジュールは有理数をサポートし、分子と分母を整数として正確な演算を可能にします:
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
出力:
3/2 5 1/3
浮動小数点からFractionを作成するとバイナリ丸めの影響で直感に反する結果になることがあるため、10進数には文字列入力を推奨します:
import fractions
# 浮動小数点から
print(fractions.Fraction(1.1))
# 文字列から
print(fractions.Fraction('1.1'))
出力:
2476979795053773/2251799813685248 11/10
分数はすべての算術演算子をサポートします:
from fractions import Fraction as F
print(F(1, 3) + F(1, 3))
print(1 / F(5, 6))
print(F(-3, 10) > 0)
print(F(-3, 10) < 0)
出力:
2/3 6/5 False True
Pythonの数学
Pythonのmathモジュールは三角関数、対数、階乗などの関数を提供します:
import math
print(math.pi)
print(math.cos(math.pi))
print(math.exp(10))
print(math.log10(1000))
print(math.sinh(1))
print(math.factorial(6))
出力:
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
乱数とサンプリングにはrandomモジュールが利用できます:
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
print(random.choice(x))
random.shuffle(x)
print(x)
print(random.random())
サンプル出力(値は変動):
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
両モジュールとも、利用可能なすべての関数と属性を詳細に文書化しています。
Python
- C#型変換完全ガイド:暗黙・明示的変換、Parse、Convertクラス
- Python キーワードと識別子: 予約語と命名規則をマスター
- Python 文・インデント・コメント: 明確なガイド
- Python 変数・定数・リテラル: 包括的ガイド
- Python 型変換とキャスト: 包括的ガイド
- Python I/Oとモジュールインポート完全マスター: 実践ガイド
- Python グローバル・ローカル・非ローカル変数を理解する
- Pythonディレクトリ・ファイル操作マスター:作成、移動、一覧、リネーム、削除
- Pythonエラーと組み込み例外をマスターする
- Pythonで現在の日付と時刻を取得する実践ガイド
- Python type()とisinstance()の理解:実例付き解説