2.2 数値
Pythonには整数(5や10000000などの小数点以下がない数値)と不動小数点数(3.12121,14.99,1.32e3など)、虚数のサポートが組み込まれている。
2.2.1 整数
四則演算。
>>> 5
5
>>> 0
0
#数字の前にゼロを置いてはならない。
>>> 09
File "<stdin>", line 1
09
^
SyntaxError: invalid token
>>> 123
123
>>> +123
123
>>> -123
-123
>>> 5+9
14
>>> 100-7
93
>>> 4-10
-6
>>> 5+9+3
17
>>> 4+3-2-1+6
10
>>> 6*7
42
>>> 7*7
49
>>> 6*7*2*3
252
#浮動小数点数(10進)徐算を行う
>>> 9/5
1.8
#整数(切り捨て)徐算を行う
>>> 9//5
1
>>> 9/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 9//0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
C言語と同じルールなので割愛したいところだが。。。
>>> a=85
>>> a
85
>>> a-5
80
>>> a
85
>>> a=a-3
>>> a
82
>>> a
82
>>> a=95
>>> a-=3
>>> a
92
>>> a +=8
>>> a
100
>>> a *=3
>>> a
300
>>> a/=3
>>> a
100.0
>>> a=12
>>> a=13
>>> a//=4
>>> a
3
>>> 9%5
4
#(切り捨てされた)商と剰余をまとめて手に入れられる
>>> divmod(9,5)
(1, 4)
2.2.2 優先順位
他言語と同様に加減より乗除の方が優先順位が高い。
>>> 2+3*4
14
>>> 2+(3*4)
14
2.2.3 基数
整数はプレフィックスで特に基数を指定しない限り、10進(基数10)とみなす。
基数とは「桁上がり」するまで何個の数字を使えるかを示す。
ex.2進の場合、数字は0と1だけになる。
0は10進の0と同じ意味で、1も10進の1と同じ意味だが1に1を加えると10になる(1個の10進数2と0個の1)
#2進数の場合、1個の10進数2と0個の1という意味
>>> 0b10
2
#8進数の場合、1個の10進数8と0個の1という意味
>>> 0o10
8
#16進数の場合、1個の10進数16と0個の1という意味
>>> 0x10
16
2.2.4 型の変換
int()関数
Pythonの整数以外のデータ型を整数に変換する時に使う。
整数部だけ残し、小数部を切り捨てる。
>>> int(True)
1
>>> int(False)
0
>>> int(98.6)
98
>>> int(1.0e4)
10000
>>> int('99')
99
>>> int(''-213)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
>>> int('-123')
-123
>>> int(12345)
12345
#数値に見えないものを変換しようとするとエラー発生
>>> int('9aaaaaa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '9aaaaaa'
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> 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.9e2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.9e2'
>>> 4+7.4
11.4
#Trueは1または1.0として扱われる
>>> True +2
3
#Falseは0または0.0として扱われる
>>> False+3.5
3.5
2.2.5 intはどれくらい大きい?
64ビットよりも大きな数値を表現できる。(任意のサイズでOK)
2.2.6 浮動小数点数
整数は小数点数以下がない数値だが、浮動小数点数は小数点以下の値を持つ。
>>> float(True)
1.0
>>> float(False)
0.0
>>> float(45)
45.0
>>> float('45')
45.0
>>> float('98.6')
98.6
>>> float('-1.2')
-1.2
>>> float('2.0e5')
200000.0
2.3 文字列
Pythonの文字列はイミュータブルであり、文字列をその場で書き換えることができない。しかし、文字列の一部を他の文字列にコピーは可能。
2.3.1 クォートを使った作成
対話型インタープリタは文字列をエコー表示する時にシングルクォートを付けるが、どちらのクォートを使って作ってもPythonは全く同じように扱う。
>>> 'Snap'
'Snap'
>>> 'Crackle'
'Crackle'
>>> "Crackle"
'Crackle'
>>> "'Ue'mura"
"'Ue'mura"
>>> '"Ue"mura'
'"Ue"mura'
>>> ''
''
>>> """"""
'' #空文字列
2.3.2 str()を使った型変換
str()関数を使えば、Pythonの他のデータ型を文字列に変換できる。
Pythonは文字列ではないオブジェクトを引数としてprint()呼び出しが発生した時や文字列の展開を行う時に、内部的にstr()関数を呼び出す。
>>> str(98.6)
'98.6'
>>> str(1.9e4)
'19000.0'
>>> str(True)
'True'
2.3.3 \によるエスケープ
Pythonは文字列に含まれる一部の文字をエスケープして他の方法では表現しにくい効果を実現する。
#\nは改行の意味
>>> palindorome = "A man,\nA plan,\nA canal:\nPanama"
>>> print(palindorome)
A man,
A plan,
A canal:
Panama
#\tはテキストの位置を揃えるために使われる
>>> print('\tabc')
abc
>>> print('a\tbc')
a bc
>>> print('abc\t')
abc
#文字列内でクォートを使いたい場合には、それらの前に\を入力する。
>>> testimony = "\"I did nothing! \""
>>> print(testimony)
"I did nothing! "
>>> testimony = "I did nothing! \\"
>>> print(testimony)
I did nothing! \
2.3.4 +による連結
以下のように+演算子を使えばリテラル文字列、文字列変数を連結できる。
>>> 'a' + "a"
'aa'
#リテラル文字列の場合は順に並べるだけでも連結できる
>>> 'a' "a"
'aa'
>>> a="Duck."
>>> b=a
>>> c="Great Duck."
#スペースがない
>>> a+b+c
'Duck.Duck.Great Duck.'
#スペースが自動で入る
>>> print(a,b,c)
Duck. Duck. Great Duck.
2.3.5 *による繰り返し
*演算子を使うと文字列を繰り返すことができる。
>>> start ="Na" * 4 + "\n"
>>> start
'NaNaNaNa\n'
>>> middle="Hey" * 3 + "\n"
>>> middle
'HeyHeyHey\n'
>>> end = "goobye."
>>> print(start + start + middle + end)
NaNaNaNa
NaNaNaNa
HeyHeyHey
goobye.
2.3.6 []による文字の抽出
文字列の中の一つの文字を取り出したい時には、文字列名の後ろに角かっこ([])で囲んだ文字のオフセットを続ける。
オフセットの数え方は
先頭(最も左)のオフセットは0、その右が1....
末尾の文字の(最も右)オフセットは-1、その左が-2....
>>> letters = 'abcdefghijklmnopqrstuvwxyz'
>>> letters[0]
'a'
>>> letters[-1]
'z'
>>> letters[-2]
'y'
>>> letters[25]
'z'
>>> letters[4555]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range #文字列の長さ以上のオフセットを指定するとエラーが発生する。(オフセットは[「0」から「長さ-1」までの範囲になることを忘れないように。)
#文字列はイミュータブルなので文字列に直接文字を挿入したり、指定したインデックスの位置の文字を書き換えたりできない。
>>> name="Henny"
>>> name[0]=P
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'P' is not defined
>>> name[0]='P'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
#文字列関数replace()やスライスの組み合わせを使う必要がある。
>>> name.replace('H','P')
'Penny'
>>> 'P'+name[1:]
'Penny'
感想
この章もC言語で学習したことがある部分が大半だった。
明日も頑張ろう。
参考文献
「Bill Lubanovic著 『入門 Python3』(オライリージャパン発行)」