Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

pythonでの数値

python3の数値は整数(int型)、小数(float型)、複素数(complex型)の3つ。
論理型(bool型)も数値の1つと言える。(True=1, False=0)
 
○整数型 桁数は無限
16進数 先頭に0x
8進数 先頭に0o
2進数 先頭に0b(b:binary)
・int関数 文字列や小数を整数に直す関数
 

0b1001             #9
0o12               #10
0xAA               #170
1000**10           #1000000000000000000000000000000
int("10")          #10
int("10", 2)       #2    2進数として判断
int("1A", 16)      #26   5進数
int("1A", base=16) #26   16進数 オプション引数base
int("AB", 32)      #331  32進数
int("20", 5)       #10   5進数
int(1.234)         #1    原点方向に丸める
#int("1.234")      #ValueError: invalid literal for int() with base 10
int(float("1.234"))#1
int(1+2)           #3
#int("1+2")        #ValueError: invalid literal for int() with base 10
True               #True
True + 1           #2 必要になったらTrueを1として演算

 
型変換
int()の他にbin():2進数へ oct():8進数へ hex():16進数へ

bin(9)       #'0b1001'
#bin("9")    #TypeError: 'str' object cannot be interpreted as an integer
oct(9)       #'0o11'
hex(255)     #'0xff'

 
○小数型
 精度の高い計算はdecimalライブラリ。

2.5e5              #250000.0
0.1 + 0.1          #0.2
0.2 + 0.1          #0.30000000000000004
0.1 * 3            #0.30000000000000004
.1+.1+.1+.1+.1+.1+.1+.1+.1+.1   #0.9999999999999999

 
○分数
 1/2 → 0.5
 分子・分母を維持した分数の形のまま扱う時はfractionライブラリを利用する。
 
複素数型   末尾にjまたはJ
 complex(re, im) re:実部 im:虚部
 ・リテラル z = 2 + 3j 虚数単位はiではなくjを使う。
 ・z = complex(2, 3) またはcomplex("2+3j") ←文字列型の場合は間のスペースなし。
   jは虚数単位ではなく、複素数クラスであることを表す記号
 ・z.real #2
 ・z.imag #3
 ・z.conjugate() 共役複素数
 ・abs(z) # (z.real**2 + z.imag**2)**0.5
 ・大小関係比較できない
 

z = 3 + 2j         #(3+2j)
z = complex(3, 2)  #(3+2j)    
#z = 3 + 2 * j     #name 'j' is not defined
z.real             #3.0
z.imag             #2.0
abs(z)             #3.6055512754639896
#z < 3             #TypeError: unorderable types: complex() < int()

 cmathライブラリに複素数の計算、座標変換などの関数

○演算など
・「1 + 2」 +:operator 1,2:operand
・print文にすると自動的に文字列型に変換
・和+ 差- 積* 商(小数)/ 商(整数)// 剰余% 累乗**
・絶対値 abs()
・符号反転 -x
・累乗 2の8乗はpow(2,8) または2**8
 
○丸め

// 切り捨て・左方向
int() 切り捨て・原点方向
round() 四捨五入・原点方向・桁指定可能
math.ceil() 切り上げ・右方向
math.floor() 切り捨て・左方向

 

import math
3 // 2           #1
int(1.5)         #1
round(1.5)       #2
math.ceil(1.5)   #2
math.floor(1.5)  #1

-3 // 2           #-2
int(-1.5)         #-1
round(-1.5)       #-2
math.ceil(-1.5)   #-1
math.floor(-1.5)  #-2

round(1.2345)     #1
round(1.2345, 2)  #1.23
round(1.3579, 2)  #1.36
round(1.2, 5)     #1.2

 
・ビット演算子

演算子 意味
& ビットand
ビットor
ビットxor
~ ビット反転 aのビット反転は–(a+1)と同義
<< 左シフト(×2)
>> 右シフト(÷2) 右端からこぼれたビットは削除。左端(正負は不変)

 
「"12".zfill(4)」は0012として表示。formatは文字列参照
 
・文字→アスキーコード ord()
アスキーコード→文字 chr()

ord("a")   #97
ord("あ")  #12354
chr(97)    #"a"