オブジェクトを理解しよう(後編)

【連載】

対話システムをつくろう! Python超入門

【第6回】オブジェクトを理解しよう(後編)

[2019/04/25 08:00]阿部憲幸 ブックマーク ブックマーク

開発ソフトウェア

前回、「オブジェクト」と「メソッド」について説明しました。それを踏まえて今回は、文字列オブジェクトの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

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

【連載】教えてカナコさん! これならわかるAI入門 [15] チャットボットってなあに?

【連載】教えてカナコさん! これならわかるAI入門 [15] チャットボットってなあに?

前回までで、機械学習の説明は一通り終えたことになります。今回からは数回にわたって、現在のAIがどの程度言語を理解し、どんなことができるのかについてお話ししていきたいと思います。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る