Python で整数以外のデータを整数に変換するには int( )
関数を使います.例えば,浮動小数点数 3.14
と -3.14
を整数に型変換します.
int(3.14)
3
int(-3.14)
-3
文字列型の「5」を整数に型変換します.
int('5')
5
少々驚きましたが,全角文字の「5」が型変換できました.
int('5')
5
流石に漢字の「五」を整数に変換することはできませんでした.
int('五')
-------------------------------------------------- ValueError Traceback (most recent call last)
浮動小数点数を整数化する場合,演算をしてから整数化するか,整数化してから演算するか,という違いにより得られる結果が異なる可能性があることには注意が必要です.
int(3.14 + 2.89)
6
int(3.14) + int(2.89)
5
2 進数や 16進数を扱う方法はここで説明していますが,int( )
関数でも引数 base
を指定することで,10 進数以外の整数文字列を 10 進整数に変換することができます.例えば 2 進整数の 100 を 10 進整数に変換するコードは次のようになります.
int('100', base=2)
4
0b
を付与して 2 進数であることを明示しても構いません.
int('0b100', base=2)
4
16 進整数の 10 や F0 を 10 進整数に変換します.
int('10', base=16)
16
int('F0', base=16)
240
int( )
関数では 2進数,10進数,16進数以外にも様々な基数を取り扱うことができます.例えば 5 進整数の 14 を 10 進整数に変換します.
int('14', base=5)
9
さらに,16 進数以上の基数も最大で 36 進数を扱うことができます.16 進数では「0, 1, ..., 9, A, B, C, D, E, F, 10, 11, ...」 という並びでしたが,36 進数では「0, 1, ..., 9, A, B, C, D, E, F, G, H, ..., Y, Z, 10, 11, ...」のようになります.つまり,36 進整数の Z と 10 を 10 進整数に変換すると,それぞれ 35 と 36 になります.
int('Z', base=36)
35
int('10', base=36)
36
また,36 進整数の 567 を 10 進整数に変換すると 6703 になります.これは \(567_{(36)} \)\(= 5 \times 36^2 + 6 \times 36^1 + 7 \times 36^0 \)\(= 6480 + 216 + 7 \)\(= 6703_{(10)}\) のとおり計算することで確かめることができます.(17 以上の基数がどのような場面で用いられるのかはよくわかりませんが,Z まで用いれば 36 進整数として取り扱えることが理解できると良いと思います.)
int('567', base=36)
6703
浮動小数点数以外の値を浮動小数点数に変換するには float( )
を使います.例えば,整数を浮動小数点数に変更すると,小数点が付加されます.
float(3)
3.0
文字列を浮動小数点数に変換することも可能です.
float('3.14')
3.14
float('1.23e4')
12300.0
float('1.23E-4')
0.000123
str( )
関数を使うことで,様々な形式のデータを文字列に変換することができます.例えば,整数の 5 を文字列に変換します.
str(5)
'5'
浮動小数点数を文字列に変換します.
str(3.14)
'3.14'
str(0.0000000123)
'1.23e-08'
指数形式の浮動小数点数も文字列に変換します.
str(3.14e+00)
'3.14'
str(3.14e-4)
'0.000314'
str(3.14e-5)
'3.14e-05'
なお,変換時に書式を詳細に設定したい場合は f 文字列を使うと良いでしょう.
Python の str( )
では変数だけでなく,リストや辞書などであっても文字列に変換することができます.例えば scores
というリストを生成して文字列に変換してみます.
scores = [10, 30, 25, 20]
str(scores)
'[10, 30, 25, 20]'
辞書を文字列に変換することでさえ可能です.
novels = {
"genji" : "どの天皇様の御代であったか、女御とか更衣とかいわれる後宮がおおぜいいた中に、最上の貴族出身ではないが深い御愛寵を得ている人があった。",
"bocchan" : "親譲の無鉄砲で小供の時から損ばかりしている。",
"meros" : "メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。",
"rashomon" : "ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。",
}
str(novels)
"{'genji': 'どの天皇様の御代であったか、女御とか更衣とかいわれる後宮がおおぜいいた中に、最上の貴族出身ではないが深い御愛寵を得ている人があった。', 'bocchan': '親譲の無鉄砲で小供の時から損ばかりしている。', 'meros': 'メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。', 'rashomon': 'ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。'}"