今さらPython3(4) - 10進数以外の世界など

引き続き、この本の2章を読み進めています。

入門 Python 3

入門 Python 3

実世界で、あまり10進数以外にお目に掛かるケースはないと思いつつ、本で説明している以上は内容を理解しておいた方が良いかなという事で。

>>> 10
10
>>> 0b10
2
>>> 0o10
8
>>> 0x10
16
>>> 0b101
5
>>> 0b1011101
93
>>> 0o12377
5375
>>> 0x1b
27
>>>

本に書いてある例だとなんとなく分かりにくかったので、それ以外にもいろいろ打ち込んでみて確認してみたところ、

  • 2進数の場合、頭に0bをつける
  • 8進数の場合、頭に0oをつける
  • 16進数の場合、頭に0xをつける

インタプリタちゃんは、接頭辞に続く、その何ちゃら進数の値を10進数に変換してくれると言うことでOK?というのが結論。

本に載っている例だと、2, 8, 16進数における'10'という値を10進数に変換していて、それぞれ、2, 8, 16になる事を示していて、算数の教科書みたいで美しいけど、実際には上みたいにいろいろやってみてやっと理解できたというのが実感。

数字の型変換の話

>>> int(True)
1
>>> int(False)
0
>>> int(98.6)
98
>>> int(1.0e4)
10000
>>> int('99')
99
>>> int('-23')
-23
>>>

整数(Int)型への変換をするときはint()で包んであげれば、Boolean(True/False)、Float、Str型から変換できると。といっても、数字で表現できないような文字が含まれていればエラーになる。文字列に小数点が含まれている場合もアウト。

>>> int('98.6')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '98.6'
>>> int('1.0e4')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.0e4'

とは言え、いったんFloatに変換してからIntにすれば良いだけの話かと。

>>> float('98.6')
98.6
>>> int(float('98.6'))
98
>>>

やっぱりね。

型が違うモノどうしの計算は、ユルい方に統一されると。ユルい方ってw

>>> 4 + 7.0
11.0
>>> True + 2
3
>>> False + 5.5
5.5
>>>

上の例だと、演算結果はFloatになって返ってきてます。

・・・だれがTrue/Falseと数字を足し算するんだか。。。

と思ったけど、複数の条件を連続して判定するような時に、何個以上Trueとか、全部Falseのときだけに処理をするみたいなロジックだったら、IF文をネストするより簡単かもと思ったり。

Python3でintは何桁まで持てる?

>>> googol = 10**100
>>> type(googol)
<class 'int'>
>>> googol *= googol
>>> type(googol)
<class 'int'>
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000
>>>

結論:考えなくていいらしい。で、どうしても限界が知りたくて。。。

>>> googol **= googol

googolgoogol乗やったら応答がなくなりました。良い子は真似しないでね。