前回、「オブジェクト」と「メソッド」について説明しました。それを踏まえて今回は、文字列オブジェクトのformatメソッドを使い、前回作成した「発話するプログラム」を改良していきます。

発話するプログラムの改良

プログラムを開発する際は、多くの場合、既存のプログラムに手を加えるかたちで改良していきます。本連載でも、前回作成したPythonスクリプト「utterance.py」にコードを追加することで改良していくことにします。

まずは、前回作成したutterance.pyをテキストエディタで開いてください。現状のスクリプトでは、以下のように記述してあるはずです。

# 文字列による発話
print("システム発話:", "お帰りなさい!")

この後に続けるかたちで、前回オブジェクトとメソッドについて説明する際に例に挙げた、formatメソッドを使ったコードを以下のように追加してください。

# 文字列による発話
print("システム発話:", "お帰りなさい!")

# フォーマットメソッドによる発話
print("formatメソッドによるシステム発話:", "{}さん、お帰りなさい!".format("阿部"))

3行目に空行を入れているのは、人の可読性を考慮したものです。空行では何も行われないため、入れても入れなくても動作は変わりません。コードの読みやすさを考えて、適宜空行を入れるかどうか決めてください。

上記のスクリプトを実行すると、以下のように表示されます。

$ python utterance.py
システム発話: お帰りなさい!
formatメソッドによるシステム発話: 阿部さん、お帰りなさい!

追加したコード中、「”{}さん、お帰りなさい!”.format(“阿部”)」が、文字列オブジェクトのformatメソッドを使用している部分です。メソッドに渡すオブジェクトを「引数」、引数を渡されたメソッドが返す結果を「戻り値」「返り値」などと呼びます。――というところまでは、前回お話した通りです。

実は、メソッドの引数は常に1つというわけではなく、メソッドに応じて異なります。文字列オブジェクトのformatメソッドの場合、formatメソッドを呼び出す側の文字列オブジェクト内にある「{}」の数と同じ数の引数をとります。

この機能を使って、文頭に「おぉ!」のような一言を言う少し気の利いたプログラムに改良してみましょう。

先ほどと同じ要領で、utterance.pyの末尾に次のコードを追加してください。

print("2つの引数をとるformatメソッドによるシステム発話:",
      "{}{}さん、お帰りなさい!".format("おぉ!", "阿部"))

その上でutterance.pyを実行すると、次のようになるはずです。

$ python utterance.py
システム発話: お帰りなさい!
formatメソッドによるシステム発話: 阿部さん、お帰りなさい!
2つの引数をとるformatメソッドによるシステム発話: おぉ!阿部さん、お帰りなさい!

この例では、formatメソッドを呼び出す文字列オブジェクト「”{}{}さん、お帰りなさい!”」は2つの{}を含んでいるので、そこに対応するかたちで2つの引数「”おぉ!”」と「”阿部”」を渡しています。

なお、1行が長くなるとコードが読みにくくなるため、追加したコードのprint関数では初めの「,」の部分で改行を行なっています。1行が長くなってしまう場合、Pythonではこのように適宜改行を行うのが良いコーディングスタイルであるとされています

※ Pythonのコーディングスタイルについては「PEP 8」にて言及されているので、興味のある方はそちらを参照してください。

それでは続いて、format メソッドの引数を変えることで他の人にもあいさつしてみましょう。utterance.pyの末尾に次のコードを追加してください。

print("2つの引数をとるformatメソッドによるシステム発話:",
      "{}{}さん、お帰りなさい!".format("わぁ!", "憲幸"))

実行すると、以下のように表示されます。

$ python utterance.py
システム発話: お帰りなさい!
formatメソッドによるシステム発話: 阿部さん、お帰りなさい!
2つの引数をとるformatメソッドによるシステム発話: おぉ!阿部さん、お帰りなさい!
2つの引数をとるformatメソッドによるシステム発話: わぁ!憲幸さん、お帰りなさい!

無事「憲幸さん」に対してもあいさつできました!

さて、今度は皆さんの番です。プログラミングは、新しい内容を学んで理解したら、自分の場合に置き換えていろいろ試してみることで上達します。formatメソッドの引数を皆さんの知り合いの名前に変えてutterance.pyの末尾に追記/実行し、あいさつしてみましょう。

今回は、文字列オブジェクトのformatメソッドを使って発話するプログラムを改良していく方法を学びました。前回と今回で、プログラム開発の流れとオブジェクト/メソッドの考え方を理解していただいたところで、次回はPythonでプログラミングしていく上で必須となる「変数」と「データ型」の概念について解説します。

著者紹介


株式会社NTTドコモ
R&Dイノベーション本部 サービスイノベーション部
阿部憲幸

2015年京都大学大学院理学研究科数学・数理解析専攻修了。 同年、NECに入社。 2016年から国立研究開発法人情報通信研究機構出向。 2018年より現職。 自然言語処理、特に対話システムの研究開発に従事。 毎日話したくなるAIを夢見て日夜コーディングに励む。
GitHub:https://github.com/noriyukipy