型とリテラル その1
今回はmathモジュールなど、
数学的な内容を学習しました。
高校の頃から数学が嫌いなのでかなり辛かったです。
ググれなければ詰んでました。
ネットに感謝です。
ただ、Decimalクラスとceil floor以外は一生使わないような気が。。。
以下、今回の備忘録です。
言語仕様
●3章 型とリテラル
■オブジェクトについて
オブジェクトとは
・データ
・データを操作する抽象的な塊。
全てのオブジェクトは生成されてから廃棄されるまでIDという
オブジェクトを識別する情報を持っている。
ID = オブジェクトの格納されるメモリの場所
プログラムはオブジェクトのリファレンスから
オブジェクトを操作する。
リファレンスは変数やリテラルで表す。
リテラル = 文字列・数値などの「データそのもの」を指す。
Pythonのリファレンスには予め「型」を指定する必要がない。
Pythonではメモリの解放について考えなくてもいい。
■論理型
論理型 = bool
boolは論理値を持つ。
論理値は「and・or・not」というキーワードと共に利用し、
それらのキーワードは論理値を変更出来る。
イマイチわかりにくかったので調べてみたら
・論理型 = bool型
・論理値 = bool値 = 真偽値
要は論理値ってTrueとFalseのことらしい。
「真偽値(True/False)を持つ型を論理型(bool型)と呼ぶ」
間違ってたら誰かコメントでツッコんで下さい。
■数値型
int・float・complexの3つ。
※2系のlongは廃止。
x+y # 和
x-y # 差
x*y # 積
x/y # 商
x//y # 商、小数点以下切り捨て
-x # 符号反転
+x # 符号そのまま
abs(x) # 絶対値
int(x) # 整数への変換
float(x) # 浮動小数点数への変換
complex(re, im) # 実数部re、虚数部imの複素数。imのデフォはゼロ。
c.conjugate() # 複素数cの共役複素数(実数部に依存)
pow(x, y) # xのy乗
x**y # xのy乗
■int型(整数型)
>>>posnum = 12
>>>negnum = -posnum
-12
>>>-negnum
12
intでn進数を表すには
16進数 数字の前に0xを付加
8進数 数字の前に0oを付加
2進数 数字の前に0bを付加
>>>0x11
17
(16進数の11は10進数の17)
>>>0c12
10
(8進数の12は10進数の10)
>>>0b1010
10
(2進数1010のは10進数の10)
intでn進数に変換する
16進数 hex(x)
8進数 oct(x)
2進数 bin(x)
>>>hex(17)
'0x11'
>>>oct(10)
'0o12'
>>>bin(10)
'0b1010'
int()は整数を生成する。
引数をを渡さない場合はゼロを生成する。
整数に変換出来ない場合はValueErrerを送出する。
>>>int()
0
>>>int('5') # strから変換
5
>>>int('a') # 'a'は整数に変換出来ないのでエラー
エラー
ついでに
>>>int('5.5') # 本当に整数じゃないと駄目らしい。
エラー
int関数は基数(n進数)を指定出来る。
基数は2から36まで指定出来る。
>>>int('a' 16)
10
2系は整数の割り算は整数(切り捨て)になる。
3系は必要に応じて浮動少数点数になる。
>>>3 / 2
1.5
■float型(浮動小数点数型)
浮動小数点数を使った場合の計算がおかしくなるのは
コンピュータが2進数(バイナリ)で保存している為。
>>>0.1 + 0.1 + 0.1 == 0.3
False
例)
0.1を2進数で表現すると
0.000110011001100110011....
という循環2進数になる。
■complex(複素数型)
※複素数とは
複素数(ふくそすう、complex number)は、
実数 a, b と虚数単位 i を用いて
a + bi
と表せる数のことである。
虚数単位(i) = 2乗すると「-1」になる数(√-1)。
複素数 z = a + bi に対して、
a を z の実部(じつぶ、real part)、
b を z の虚部(きょぶ、imaginary part)といい、
それぞれ記号で Re, Imと表す。
直に記述する方法と、complex関数を使用する方法がある。
(※iは電流のiと混同しないためにjが使われる)
>>>1 + 5j
(1+5j)
>>>complex(1.3, 0.5)
(1.3+0.5j)
四則演算も出来る。
>>>(1 + 5j) + (2 + 1j)
(3 + 6j)
>>>(1+5j) / 2
(0.5+2.5j)
■mathモジュール
intとfloatの数学関数計算にはmathモジュールを使う。
mathモジュールはC言語の数学関数へのアクセスを提供。
>>> import math
>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045
>>> math.cos(math.pi)
-1.0
>>> math.log(math.e)
1.0
以下は近似値
>>> math.sin(0)
0.0
>>> math.sin(math.pi)
1.2246467991473532e-16
>>> math.tan(math.pi)
-1.2246467991473532e-16
mathモジュールのよく使う関数
math.ceil(x)
X以上の最小の整数を返す。
浮動小数点数じゃない場合は整数(Integral値)を返す。
>>> math.ceil(4.5)
5
>>> math.ceil(4)
4
math.floor(x)
X以下の最小の整数を返す。
浮動小数点数じゃない場合は整数(Integral値)を返す。
>>> math.floor(4.5)
4
>>> math.floor(4)
4
math.factorial(x)
xの階乗
※階乗
6の階乗 6×5×4×3×2×1 = 720
math.exp(x)
e**xを返す。
math.(1) = e
eは2.718281828459045 #近似値
math.exp(3)の場合、
2.718281828459045 × 2.718281828459045 × 2.718281828459045
と考えればいい。
math.log(x,[base])
baseを底としたxの対数を返す。
実際には「[]」を入力しない。
baseを省略すると底がeになる。
対数とは
http://oto-suu.seesaa.net/article/167913379.html
対数とはどんな数字か?
http://www.minemura.org/juken/taisu.html
「xはαをyにする指数」
αを底、yを真数と呼ぶ。
例)
「xは2を8にする指数」
>>> math.log(8,2)
3.0
xは3
>>> math.log(8)
2.0794415416798357
math.sqrt(x)
xの平方根(square root)を返す。
>>> math.sqrt(9)
3.0
math.cos(x)
xの余弦を返す。
math.sin(x)
xの正弦を返す。
math.tan(x)
xの正接を返す。
■cmathモジュール
省略
■numbersモジュール
rational number 有理数
有理数・・・「整数」or「有限の小数」or「無限に続くが数が循環している小数」
isinstance(x, numbers.Number)
種類は何であれ、数であるということだけチェックが出来る。
整数かどうかのチェックにはIntegral
>>> obj = 0.2
>>> isinstance(obj, numbers.Integral)
False
実数にはReal
複素数にはComplex
有理数にはRational
>>> import numbers
>>> obj = 1
>>> isinstance(obj, numbers.Number)
True
>>> isinstance(obj, numbers.Real)
True
>>> isinstance(obj, numbers.Complex)
True
>>> isinstance(obj, numbers.Rational)
True
複素数の場合は有理数や実数として扱えないので以下のようになる。
>>> obj = complex(1, 1)
>>> obj
(1+1j)
>>> isinstance(obj, numbers.Complex)
True
>>> isinstance(obj, numbers.Rational)
False
>>> isinstance(obj, numbers.Real)
False
■fractionsモジュール
fraction・・・分数、端数の意。
fractionモジュールはFractionという有理数を表現するクラスを提供する。
Fractionクラスは自動的に有理数を約分する。
>>> from fractions import Fraction
>>> Fraction(-8, 5)
Fraction(-8, 5)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(16, -10) + Fraction(4, 20)
Fraction(-7, 5)
Fraction(-7, 5)
>>> Fraction(1, 3) ** 2
Fraction(1, 9)
fractionsモジュールは最大公約数を計算するgcd関数を提供する。
gcdは整数や有理数が使える。
gcd(Greatest Common Divisor)
=最大公約数
>>> from fractions import gcd
>>> gcd(Fraction(1,9), Fraction(1,6))
Fraction(1, 18)
>>> gcd(64,24)
8
■decimalモジュール
人間と同じような現実世界の数値の使い方を実現するモジュール。
10進数の浮動小数点数にも対応。
会計・帳簿などの金銭を扱うアプリケーションに利用する。
floatの0.1とDecimalの0.1は別物。
>>> from decimal import Decimal
>>> 0.1 == Decimal("0.1")
False
浮動小数点数の計算にはズレがあるので以下のようになる。
>>> 0.1+0.1+0.1
0.30000000000000004
>>> 0.1+0.1+0.1 == 0.3
False
Decimalを使えば以下のように厳密に浮動小数点数を計算・比較出来る。
>>> from decimal import Decimal
>>> Decimal("0.1") + Decimal("0.1") + Decimal("0.1")
Decimal('0.3')
>>> Decimal("0.1") + Decimal("0.1") + Decimal("0.1") == Decimal("0.3")
True
有効桁数
・加算・・・そのまま
・乗算・・・増える
>>> Decimal("1.50") + Decimal("2.50")
Decimal('4.00')
>>> Decimal("1.50") * Decimal("2.50")
Decimal('3.7500')
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (17件) を見る