[Python3 入門 15日目]7章 文字列（7.1.2〜7.1.2.2）

##7.1.2 書式指定 
###7.1.2.1 %を使ったスタイル

- 古いスタイルの書式設定は string % dataという形式を使う。
- %と型指定子の間には、幅の上限、文字数の上限、配置、パディングを指定できる。

```py

#文字列
>>> "%s" % 42
`42`
#10進整数
>>> "%d" % 42
`42`
#16進整数
>>> "%x" % 42
`2a`
#8進整数
>>> "%o" % 42
`52`

#10進float
>>> "%f" % 7.03
`7.030000`
#指数形式float
>>> "%e" % 7.03
`7.030000e+00`
#桁の大きさによって変わる%g (10進floatまたは指数形式float)
>>> "%g" % 7.03
`7.03`
#整数とリテラルの%
>>> "%d%%" % 100
`100%`

>>> actor = "Richard Gere"
>>> cat="Chester"
>>> weight=28
#文字列の挿入
>>> "My wife is favorite actor is %s" % actor
`My wife is favorite actor is Richard Gere`
#複数の文字列挿入時は(cat,weight)のようにタプルにまとめなければならない。
>>> "Our cat %s weights %s pounds" % (cat,weight)
'Our cat Chester weights 28 pounds'

>>> n = 42
>>> f=7.03
>>> s="string cheese"
#デフォルト幅で表示。
>>> "%s %f %s" %(n,f,s)
'42 7.030000 string cheese'
#各変数について最小限の幅10を設定し、右揃えにした。
>>> "%10s %10f %10s" %(n,f,s)
'        42   7.030000 string cheese'
#同じ幅を使って左揃えにした。
>>> "%-10s %-10f %-10s" %(n,f,s)
'42         7.030000   string cheese'
#フィールドの幅は同じで文字数の上限を4にして右揃えにする。こうすると文字列が一部切り捨てられ、小数点以下が4桁になる。
>>> "%10.4d %10.4f %10.4s" %(n,f,s)
'      0042     7.0300       stri'
#フィールド幅の下限を指定せず、字数制限を行う。
>>> "%.4d %.4f %.4s" %(n,f,s)
'0042 7.0300 stri'
#フィールド幅と文字数の*による引数化
>>> "%*.*d %*.*f %*.*s" %(10,4,n,10,4,f,10,4,s)
'      0042     7.0300       stri'

```

###7.1.2.2 {}と書式指定を使った新しいスタイル


```py

>>> "{} {} {}".format(n,f,s)
`42 7.03 string cheese`

#{}の中の数字はformatの中のインデックスを示している。
>>> "{2} {0} {1}".format(n,f,s)
`string cheese 42 7.03`

#引数は辞書やキーワード引数でも良い。そして、書式指定にキー、名前を入れることも可能。
>>> "{n} {f} {s}".format(n=42,f=7.03,s="string cheese")
`42 7.03 string cheese`


>>> d={"n":42,"f":7.03,"s":"string cheese"}
#{0}はformat()の中の引数dという辞書を指す。
#{2}はformat()の中の引数otherという文字列を指す。
>>> "{0[n]} {0[f]} {0[s]} {1}".format(d,"other")
`42 7.03 string cheese other`

#%の代わりに:を使える。
>>> "{0:d} {1:f} {2:s}".format(n,f,s)
`42 7.030000 string cheese`
#キーワード引数で指定
>>> "{n:d} {f:f} {s:s}".format(n=42,f=7.03,s="string cheese")
`42 7.030000 string cheese`
#フィールド幅の下限を10としてデフォルトの右揃え。
>>> "{0:10d} {1:10f} {2:10s}".format(n,f,s)
`        42   7.030000 string cheese`
#上と同じ右揃えだが、>を使う分わかりやすくなっている。
>>> "{0:>10d} {1:>10f} {2:>10s}".format(n,f,s)
`        42   7.030000 string cheese`
#左揃え
>>> "{0:<10d} {1:<10f} {2:<10s}".format(n,f,s)
`42         7.030000   string cheese`

#中央揃え
>>> "{0:^10d} {1:^10f} {2:^10s}".format(n,f,s)
`    42      7.030000  string cheese`

#古いスタイルと異なり、小数点の後ろで指定する精度はfloatなら小数点以下の桁数、文字列なら文字数の上限を指定するが整数では使えなくなった。
>>> "{0:>10.4d} {1:>10.4f} {2:>10.4s}".format(n,f,s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Precision not allowed in integer format specifier
>>> "{0:>10d} {1:>10.4f} {2:>10.4s}".format(n,f,s)
`        42     7.0300       stri`

#:の直後、位置揃えや幅の指定の前に指定することで出力フィールドの隙間部分をスペース以外の文字で埋めることができる。
>>> "{0:!^20s}".format("BIG SALE")
`!!!!!!BIG SALE!!!!!!`

```


#感想

最近更新頻度が空いてきましたね。
投稿サボり気味でした。。。

勉強の方ですが、8章のデータベース関連にかなり苦戦しております。データベースの話が抽象的でなかなか頭に入ってこないは、本通りに進めているのにエラー出るわでめげそうでしたね。
明日はもう一度時間をかけて8章やってみます。
7章の続きは明日投稿する。

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

「Pythonチュートリアル 3.8.1ドキュメント 7.入力と出力」
https://docs.python.org/ja/3/tutorial/inputoutput.html#old-string-formatting