0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-25

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

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

#文字列
>>> "%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 {}と書式指定を使った新しいスタイル


>>> "{} {} {}".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

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?