Python format

Python学習【365日チャレンジ!】292日目のマスターU(@Udemy11)です。

株価が上がり調子でバブルの様相を呈しているような気がしますが、果たしていつまで上がるんでしょうか?

これから株を始めようと考えている人やもっと株価は上がっていくと思っている人にジョセフ・P・ケネディ氏(ケネディ大統領の父親)と靴磨きの少年の超有名なお話を紹介したいとおもいます。

アメリカの大恐慌は歴史の教科書にも載る有名なお話ですが、1929年10月24日に大恐慌のきっかけとなる株の大暴落がありました。

その少し前の1928年の冬まで、ケネディ氏は株式投資で大儲けをしていたのですが、ある日の朝、靴磨きの少年に靴を磨いてもらった際、その少年から「おじさん、株を買っておいたほうがいいよ」と言われたそうです。

その時、ケネディ氏は、こんな少年まで株の儲け話をするなら、この後、株は暴落を始めると考え、すべての株を売り払って大恐慌の難を逃れたということです。

つまり、全く経済のことを理解していない素人が儲け話を始めたら、その儲け話は危ないということですね。

仮想通貨もテレビで紹介されて、投資の素人が手を出し始めたあたりの2018年1月に仮想通貨バブルがはじけ飛んでしまったのは記憶の新しいところだと思います。

ま~、ビットコインの価格は2017年の頃に戻ってきていますので、そろそろ仮想通貨ブームの再来があるかもしれませんが。。。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、GoogleアカウントだけでPythonが使えるGoogle Colaboratoryを試してみました。

WebブラウザーだけでPythonが使えるサービスは、paiza.ioがありますが、Google Colaboratoryは、Jupyter Notebookと同じColab ノートブック形式で、本格的にPythonを使うことができます。

ほんと世の中、テクノロジーの進化のスピードが速すぎてびっくりですよね。

Google Colaboratoryの始め方については、昨日の記事をごらんください。

今日は、formatを使った、様々な表記方法を学習します。

formatの復習

formatを学習したのは、なんとPython学習365日チャレンジの10日目でした。

この日からすでに281日継続しているわけなので、かなりPythonの知識が積み上がっているかと思いきや、スキルアップが感じられないのはなぜでしょう?

ということはおいといて、とりあえず、formatの復習をやっていきましょう。

print('{} {} {}'.format('a','b','c'))
print('{2} {1} {0}'.format('a','b','c'))
print('{name} {family}, {family} {name}'.format(name='U', family='Master'))

出力結果

a b c
c b a
U Master, Master U

formatで指定したリストが{}に順番に入力されて出力されます。

また、{}にインデックスの数字を入れると、順番を指定して出力することができたり、Key-Valueの形式で入れた値をKey指定してValueの値を出力することもできました。

こちらのコードはPycharmで書いているのですが、対話型シェルのIPythonやJupyterを使った方がprintを記述する必要がないので、コードが見やすいかもしれません。

昨日学習しましたが、Google ColaboratoryはGoogleのアカウントを持っていればJupyter Notebookと同じようなColabノートブック形式でPythonを使えるので、今回はGoogle Colaboratoryを使ってコードを実行してみました。

[1] '{} {} {}'.format('a','b','c')
    'a b c'

まずは先程復習した最初のコードを実行してみると、出力は、'(シングルクォーテーション)で囲まれて出力されます。

Google Colaboratoryは[1]がコードセルの番号で、すぐ下に出力結果が表示されて、コードと出力が一つのまとまりとして記録されていきます。

タプルから取り出し

タプル(リストでも可)に入れた値をインデックスを使って取り出すこともできます。

[2] t = (1, 2, 3)
    '{0[0]} {0[2]}'.format(t)
    '1 3'
[3] '{t[1]} {t[2]}'.format(t=t)
    '2 3'

リストでもいいのですが、タプルtを定義して、formattを渡して引数のインデックスが0tのインデックスを指定して出力しています。

[3]は、formatの引数ttを指定することで、引数のインデックスではなくt[0]のように記述して出力することができます

また、次のようにformatの引数の中でtを展開してから出力することもできます。

[4] '{} {}'.format(t[0], t[1])
    '1 2'

タプルのアンパッキングのように*を使ってtを出力することもできます。

[5] '{} {} {}'.format(*t)
    '1 2 3'

辞書型から取り出し

タプルやリストと同じように、formatを使って、辞書型データから値を取り出すことができます。

[6] d = {'name': 'U', 'family': 'Master'}
    '{0[name]} {0[family]}'.format(d)
    'U Master'

タプルと同じように**を使ってdを出力することもできます。

[7] '{name} {family}'.format(**d)
    'U Master'

文字列の出力位置を指定

次は、出力する文字数を指定して、右寄せ、左寄せ、センタリングをやってみます。

[8] '{:<20}'.format('left')
    'left                '

最初に:で続く文字を<、最後にインデックス数の20を指定することで、インデックス数が20の範囲に左寄せで文字列を出力することができます。

[9] {:>20}'.format('right')
    '               right'

こちらは>を使って右寄せでrightを出力しています。。

[10] '{:^20}'.format('center')
    '       center       '

左寄せ、右寄せときたら、残りはセンタリングですね。

次は、最初のインデックス0を指定して、スペースではなく*で文字列以外を埋めてみます。

[11] '{0:*^20}'.format('center')
    '*******center*******'

この場合、最初のインデックスを0以外に指定しても大丈夫な気がしますが、0以外を指定するとエラーが起こります。

また、次のような書き方をしても[11]の実行結果と同じ出力になります。

[12] '{name:*^20}'.format(name='center')
    '*******center*******'

要素をまとめる

記号をformatでまとめて指定して、出力に変数名で代入することもできます。

[13] '{name:{fill}{align}{width}}'.format(name='center', fill='*', align='^', width='20')
    '*******center*******'

,(カンマ)

,を使えば数字を3桁ずつに区切って見やすくしてくれます。

[14] '{:,}'.format(123456789)
    '123,456,789'

+

+は通常表示されませんが、+を使うことで明示的に表示させることができます。

[15] '{:+}'.format(123456789)
    '+123456789'

.(ドット)と%

最後に.%を使って割り算を表示してみます

[16] '{:.2%}'.format(7/ 12)
    '58.33%'

.で小数点、2で小数点以下の桁数、%でパーセンテージを出力しています。

これらの記号を記述しない場合は次のような出力結果になります。

[17] '{}'.format(7/ 12)
    '0.5833333333333334'

まとめ

formatを使えば、いろいろな出力ができることがわかりました。

今日紹介した使い方以外にもいろいろなことができるのですが、このくらいにしておかないと、次の日がつらくなるので、今日はここまでにしておきます。

ほんとPythonは、ひとつのメソッドでもいろいろとできてしまうので、覚えることが多すぎですよね。

あせらず、のんびりと学習していきましょう!

ということで、明日もGood Python!