[Python3 入門 4日目] 2章 Pyの成分： 数値、文字列、変数 （2.3.7〜2.4）

#続き

##2.3.7 [start: end:step]によるスライス
スライスを使えば、文字列から**部分文字列**（文字列の一部）を取り出すことができる。

- [:]は先頭から末尾までのシーケンス全体を抽出する。
- [start:]はstartオフセットから末尾までのシーケンスを抽出する。
- [:end]は先頭から**end-1**オフセットまでのシーケンスを抽出する。
- [start:end]はstartオフセットから**end-1**オフセットまでのシーケンスを抽出する。
- [start: end:step]はstep文字ごとにstartオフセットから**end-1**オフセットまでのシーケンスを抽出する。

※オフセットはインデックス参照の時と同様。

```py
>>> letters = 'abcdefghijklmnopqrstuvwxyz'

#文字全体を指定
>>> letters[:]
'abcdefghijklmnopqrstuvwxyz'

#オフセット20から末尾までの切り取る。
>>> letters[20:]
'uvwxyz'
>>> letters[10:]
'klmnopqrstuvwxyz'

#オフセット12から14までの切り取る。
>>> letters[12:15]
'mno'
#最後の3文字を取り取る。
>>> letters[-3:]
'xyz'

#オフセット18から末尾から4文字手前までの切り取る。
>>> letters[18:-3]
'stuvw'
>>> letters[-6:-2]
'uvwx'

#先頭から末尾までの7字ごとに切り取る。
>>> letters[::7]
'ahov'

#オフセット4から18まで3文字ごとに切り取る。
>>> letters[4:19:3]
'ehknq'
>>> letters[19::4]
'tx'
>>> letters[:21:5]
'afkpu'
>>> letters[:21:5]
'afkpu'

#ステップサイズとして負数を指定すると逆にスライスする。
>>> letters[-1::-1]
'zyxwvutsrqponmlkjihgfedcba'
>>> letters[::-1]
'zyxwvutsrqponmlkjihgfedcba'

#間違ったオフセットにも寛容である。
>>> letters[-499:]
'abcdefghijklmnopqrstuvwxyz'

#文字列の先頭よりも手前のスライスオフセットは0として、末尾よりも後ろのスライスオフセットは-1として扱われる。
>>> letters[-51:50]
'abcdefghijklmnopqrstuvwxyz'

#末尾51字手前から末尾の50字手前までは以下のようになる。
>>> letters[-51:-50]
''
>>> letters[70:71]
''
```

##2.3.8 len()による長さの取得
len()関数は文字列内の文字数を数える。

```py
>>> len(letters)
26
>>> empty=''
>>> len(empty)
0
```

##2.3.9 split()による分割
文字列関数split()を使えば**セパレータ**に基づいて文字列を分割し、部分文字列の**リスト**を作る。
Point     split()により**リスト**ができる

```py
>>> todos = "a,b,c,d"
>>> todos.split(",")
['a', 'b', 'c', 'd']
>>> todos = "get gloves,get mask,get cat vitamins,call ambulance"

#デフォルトでは引数 空白文字 ""　が使われる
>>> todos.split()
['get', 'gloves,get', 'mask,get', 'cat', 'vitamins,call', 'ambulance']
```

##2.3.10 join()による結合

split()関数の逆の働きをする。

```py
>>> crypto_list =["aa","bb","cc"]

#string.join(list)という形式で記述する。
>>> crypto_string=",".join(crypto_list)
>>> print("unchi",crypto_string)
unchi aa,bb,cc
```


##2.3.11 多彩な文字列操作

```py
>>> poem="""All that doth flow we cannot liquid name
... Or else would fire and water be the same;
... But that is liquid which is moist and wet
... Fire that property can never get.
... Then 'tis not cold that doth the fire put out
... But 'tis the wet that makes it die,no doubt."""
>>> poem[:13]
'All that doth'

 #長さ確認
>>> len(poem)
249

#先頭はAllになっているかどうか確認
>>> poem.startswith('All')
True

#末尾はThat\'s all,folks!になっているかどうか
>>> poem.endswith('That\'s all,folks!')
False

#theという単語が最初に現れる箇所のオフセットを調べる。
>>> word = 'the'
>>> poem.find(word)
73

#最後のtheのオフセットもわかる。
>>> poem.rfind(word)
214

#theという3文字のシーケンスは全部で何回現れていたか。
>>> poem.count(word)
3

#この詩に含まれる文字は全て英字か数字になっているかどうか。
>>> poem.isalnum()
False
```

##2.3.12  大文字と小文字の区別、配置

```py

#両端から.のシーケンスを除く
>>> setup = 'a duck goes into a bar...'
>>> setup.strip('.')
'a duck goes into a bar'

#先頭の単語をタイトルケース（先頭文字のみ大文字）
>>> setup.capitalize()
'A duck goes into a bar...'

#全ての単語をタイトルケース
>>> setup.title()
'A Duck Goes Into A Bar...'

#全ての文字を大文字
>>> setup.upper()
'A DUCK GOES INTO A BAR...'

#全ての文字を小文字に変換
>>> setup.lower()
'a duck goes into a bar...'

#大文字小文字を逆にする
>>> setup.swapcase()
'A DUCK GOES INTO A BAR...'

#30字分のスペースの中央に文字列を配置
>>> setup.center(30)
'  a duck goes into a bar...   '

#左端に配置
>>> setup.ljust(30)
'a duck goes into a bar...     '

#右端に配置
>>> setup.rjust(30)
'     a duck goes into a bar...'
```

##2.3.13  replace()による置換
replace()を使えば部分文字列を簡単に書き換えることができる。
書き換えたい部分がはっきりしている時にはreplace()は良い。

```py
>>> setup = 'a duck goes into a bar...'

#最後の回数を省略すると置換は一度のみ。
>>> setup.replace('duck','aaaaaaa')
'a aaaaaaa goes into a bar...'

#最大100回まで置換可能
>>> setup.replace('a','b',100)
'b duck goes into b bbr...'
>>> setup.replace('a','b',2)
'b duck goes into b bar...'
```

#復習課題
###2-1 １時間は何秒か。
```py
>>> 60*60
3600
```
###2-2,3　 前問の結果をseconds_per_hourという変数に代入しよう。また、1日は何秒か。
```py
>>> seconds_per_hour=60*60
>>> seconds_per_hour*24
86400
```

###2-4,5 　1日の秒数を計算し、変数seconds_per_dayへ保存し、seconds_per_hourで割る。浮動小数点数除算(/)を使用する。
```py

>>> seconds_per_day=seconds_per_hour*24
>>> seconds_per_day/seconds_per_hour
24.0
```

###2-6 整数除算（//）を使ってseconds_per_dayをseconds_per_hourで割る。
2-5と同じ結果になっていることがわかる。

```py

>>> seconds_per_day//seconds_per_hour
24
```

#感想
本日で3章まで終わりました。（備忘録は明日以降順次）
リスト、辞書、集合、タプルって重要だなと感じた。
学生時代、意識してなかったなと。
それがC言語のつまずきの原因かもしれない。基本大事。


######参考文献
「Bill Lubanovic著 『入門 Python3』(オライリージャパン発行)」