python 言語処理100本ノック -第1章: 準備運動- 07. テンプレートによる文生成

07. テンプレートによる文生成

引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y=”気温”, z=22.4として,実行結果を確認せよ.

今回のポイントは1.format関数の使い方、2.string.Templateの使い方です。
順番に見ていきます。まずはformat関数です。
6行目の「'{0}時の{1}は{2}’.format(x, y, z)」が該当箇所になります。
format関数は文字列中に{}に対して、format()の引数に指定した値を渡すことで、動的に文字列の内容を変化させることができます。
ここでは、14~16行目で指定したx、y、zの値をそれぞれ{0}、{1}、{2}に設定しています。
{0}・・・x:12
{1}・・・y:”気温”
{2}・・・z:22.4

次にstring.Templateです。
10行目の「Template(‘$hour時の$tempは$val’)」がTemplate関数の使用箇所になります。
$hour、$temp、$valでが可変部分になります。
これに対して、「s.substitute(hour=x, temp=y, val=z)」でそれぞれにx、y、zの値を設定しています。

#coding: utf-8
from string import Template

#format関数1
def str_format(x, y, z):
    return '{0}時の{1}は{2}'.format(x, y, z)

#format関数2
def str_format2(x, y, z):
    s = Template('$hour時の$tempは$val')
    return s.substitute(hour=x, temp=y, val=z)

#実行
x = 12
y = "気温"
z = 22.4

val = str_format(x, y, z)
print(val)

val2 = str_format2(x, y, z)
print(val2)

■実行結果


12時の気温は22.4
12時の気温は22.4

■開発環境
Windows10
Python 3.7.3
Visual Studio Code 1.33.1

■言語処理100本ノック 公式
言語処理100本ノック 2015