0
1

More than 3 years have passed since last update.

[Python3 入門 3日目]2章 Pyの成分: 数値、文字列、変数 (2.2〜2.3.6)

Last updated at Posted at 2020-01-08

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』(オライリージャパン発行)」

0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1