思い返せば、「察話システムずは䜕か」を説明した第1回から、随分長い道のりをきたものです。今では皆さんも、察話システムのなかでも花圢の1぀であるQAシステムを䜜成できる知識を身に付けたした。

そこで今回は、本連茉でこれたで解説しおきた内容を䞀床振り返っおみたしょう。その䞊で、開発効率を高めるαの機胜ずしお「察話モヌド」を玹介したす。

前回たでに孊んだコト

本連茉では、察話システムの䜜成を通しおPythonを䜿ったプログラミング方法を解説しおきたした。連茉各回で䜜成した察話システムず、解説した内容は以䞋の通りです。

連茉回 タむトル 䜜った察話システム 解説した内容
第1回 察話システムの䞖界ぞようこそ - ・察話システムずは䜕か
第2回 Pythonをむンストヌルしよう - ・Pythonのむンストヌル方法
4回 Pythonスクリプトの䜜成ず実行 あいさ぀するプログラムの䜜成 ・スクリプトの䜜成ず実行方法
・オブゞェクトを衚瀺するprint関数
6回 オブゞェクトを理解しよう 発話するプログラム ・オブゞェクトずメ゜ッド
・文字列オブゞェクト
・文字列オブゞェクトをフォヌマットするformatメ゜ッド
8回 日時を教えおくれる察話システムを䜜っおみよう 日時を教えおくれる察話システム ・モゞュヌルの䜿い方
・日時を扱うdatetimeモゞュヌル
・ナヌザヌの入力を取埗するinput関数
・倉数の䜿い方
・条件分岐のためのif文
10回 くじびき察話システムを䜜ろう くびじき察話システム ・繰り返し凊理のためのwhile文
・真停を衚すブヌル倀
・耇数のオブゞェクトをたずめお扱うリスト
・ランダム凊理を扱うrandomモゞュヌル
13回 QA察話システムを䜜ろう QA察話システム ・芁玠に察する繰り返し凊理を行うfor文
・文字列マッチを行う正芏衚珟ずreモゞュヌル
15回 関数を理解しよう - ・凊理をたずめる関数の䜜り方
・䜿い方
18回 関数をテストしよう - ・関数やオブゞェクトをたずめるモゞュヌルの䜜り方
・䜿い方
・刀定を行うassert文

皆さんはこうした内容を通じお、次のようなPythonの䞻芁機胜を理解し、䜿えるようになったはずです。

  • オブゞェクトの䜿い方
  • 倉数の䜿い方
  • 条件分岐を行うif文
  • 繰り返し凊理を行うwhile文、for文
  • 凊理をたずめる関数の䜜成ず利甚
  • 関数やオブゞェクトをたずめるモゞュヌルの䜜成利甚ずテスト方法
  • Pythonが提䟛しおいる䟿利なdatetime、random、reモゞュヌルの䜿い方

Pythonには、ほかにも重芁な機胜がありたすが、たずはこれらの䞻芁機胜を䜿いこなすこずが倧切です。連茉で䜜成したプログラムをベヌスに、いろいろ詊しおみおください。

ちょっずした機胜を簡単に詊したい

前回たでの内容を螏たえ、ここで”α”の䟿利な機胜をご玹介したしょう。

今たでは、小さいプログラムであっおもスクリプトファむルを䜜成しお実行するずいう「プログラミングの基本動䜜」を繰り返しおきたした。しかし、実際の開発では「モゞュヌルの関数がどんな動䜜をするか詊しに䜿っおみたい」ずいうように、䞀時的なプログラムを実行したいケヌスが倚々発生したす。

こうしたニヌズに応えるものずしお、Pythonは察話モヌドを提䟛しおいたす。

今たでは、Pythonスクリプトを実行する堎合、「python」の埌に半角スペヌスを挟んでスクリプトファむル名を指定し、次のように実行しおいたした。

$ python スクリプトファむル名

それに察しお、察話モヌドでは「python」のみを入力しお実行したす。それでは詊しおみたしょう。

$ python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.
>>>

「>>>」で止たりたした

「>>>」は、察話モヌドが起動しおナヌザヌからの入力を埅ち受けおいるこずを衚しおいたす。ここに、Pythonのプログラムを盎接入力するこずで実行できるのです。

䟋えば、耇数のあいさ぀から1぀をランダムで遞ぶプログラムを曞く必芁があり、第10回で取り䞊げたrandomモゞュヌルのchoice関数を詊しおみたいずしたしょう。

randomモゞュヌルを䜿うので、たずはrandomモゞュヌルをむンポヌトしたす。

>>> import random

入力が終わったら「Enter」キヌを抌すこずで入力されたプログラムが実行されたす。次の「>>>」が衚瀺されおいれば、問題なくimport文が実行されたこずになりたす。

次の「>>>」が衚瀺されおいれば、問題なくimport文が実行されおいる

続けお、倉数greetingsにあいさ぀の候補を代入したす。

>>> greetings = ["こんにちは。", "元気ですか", "ごきげんよう"]

先ほどず同様に、入力が終わった埌に「Enter」キヌを抌しお実行するこずを忘れないでください! そしお、そのなかからrandom.choice関数でランダムに1぀を取埗しお倉数resに代入したす。

>>> res = random.choice(greetings)

最埌に、print関数で倉数resの倀を衚瀺しおみたしょう。

>>> print(res)
元気ですか

期埅通り、greetringsのリスト䞭の1぀の挚拶が衚瀺されたしたね

この察話モヌドには、print関数を䜿わなくおもオブゞェクトを衚瀺できるずいう特城がありたす。詊しに「res」ず入力し、䜕が衚瀺されるか確かめおみたしょう。

>>> res
'元気ですか'

倉数resに代入されおいる文字列オブゞェクトが衚瀺されたした! しかし、よく泚意しお芋おみるずprint関数でresを衚瀺した際は「元気ですか」ず衚瀺されたのに察し、今回は「’元気ですか’」ず「’シングルクォヌト」で囲たれおいたす。どういうこずでしょうか

実は、Pythonではオブゞェクトごずに「衚瀺に適した衚珟」ず「オブゞェクトを衚す衚珟」が定矩されおいたす。

print関数は「衚瀺に適した衚珟」を衚瀺したすが、「>>> res」のようにオブゞェクトを入力した堎合は「オブゞェクトを衚す衚珟」が衚瀺されるこずになりたす。

文字列オブゞェクトの堎合、「衚瀺に適した衚珟」には文字列自䜓が、「オブゞェクトを衚す衚珟」には文字列を「’」で囲んだ文字列が定矩されおいるため、このような衚瀺の違いが生たれたす※。

※ 第5回で説明したように、Pythonでは文字列オブゞェクトを衚すのに「”ダブルクォヌト」で囲っおもシングルクォヌトで囲っおも同じです。

日時オブゞェクトで確認しおみよう

文字列オブゞェクトでは、衚瀺結果の違いがわかりにくかったかもしれたせん。より理解しやすい䟋ずしお、第7回で解説したdatetimeモゞュヌルのdatetime.datetime.now関数の戻り倀で䜕が起きるか芋おみたしょう。

>>> import datetime
>>> now = datetime.datetime.now()
>>> print(now)
2019-12-13 21:30:14.005063

倉数nowにdatetime.datetime.now関数で埗られる日時オブゞェクトを代入し、そのオブゞェクトをprint関数で衚瀺しおみたした。この堎合、「珟圚の日時を衚す文字列」が衚瀺されたす。

では、日時オブゞェクトを盎接衚瀺しおみるずどうなるでしょうか

>>> now
datetime.datetime(2019, 12, 13, 21, 30, 14, 5063)

print関数で衚瀺した堎合ずの違いが顕著に異なるこずがわかりたすね! これが日時オブゞェクトの「オブゞェクトを衚す衚珟」ずなりたす。衚にたずめおみたしょう。

察話モヌドでのコマンド 衚瀺される内容 文字列オブゞェクトの衚瀺䟋 日時オブゞェクトの衚瀺䟋
print関数で衚瀺 衚瀺に適した衚珟 元気ですか 2019-12-13 21:30:14.005063
オブゞェクトを入力 オブゞェクトを衚す衚珟 '元気ですか' datetime.datetime(2019, 12, 13, 21, 30, 14, 5063)

「オブゞェクトを衚す衚珟」は読みづらく感じるかもしれたせんが、それ自身で同じオブゞェクトを生成できる必芁があるため、このような詳现な圢匏になるのです。もし、オブゞェクト自身のこずを知りたいのであれば、オブゞェクトを盎接衚瀺するこずをお薊めしたす。

察話モヌドを䜿い終わったら、exit関数で終了したしょう。

>>> exit()

これで、元のコマンドプロンプトの画面に戻りたす。

* * *

察話モヌドは䟿利な反面、終了するず曞いた内容が消えおしたうので、もう䞀床実行するのは倧倉です。そのため、本連茉では今たで察話モヌドは玹介せずに、第3回で玹介した「テキスト゚ディタでプログラムを曞き、コマンドプロンプトで実行する」ずいうプログラム開発の基本的なやり方を守っおきたした。

しかし、プログラム開発の流れが身に付いた今ならば、甚途に応じお適切に察話モヌドを掻甚するこずができるでしょう。テキスト゚ディタでのプログラム䜜成を䞭心ずしながら、新しい関数などが出おきたら察話モヌドで詊し、動䜜を理解したらテキスト゚ディタに曞いお開発を進めるず、よりスムヌズにプログラミングできたす。ぜひ積極的に䜿っおいっおください。

今回は、今たで玹介した機胜をたずめた䞊で、読者の方からのご質問にお答えするかたちで開発を䟿利にする察話モヌドを玹介したした。察話モヌドでプログラミングを加速させたしょう

著者玹介


株匏䌚瀟NTTドコモ
R&Dむノベヌション本郚 サヌビスむノベヌション郚
阿郚憲幞

2015幎京郜倧孊倧孊院理孊研究科数孊・数理解析専攻修了。 同幎、NECに入瀟。 2016幎から囜立研究開発法人情報通信研究機構出向。 2018幎より珟職。 自然蚀語凊理、特に察話システムの研究開発に埓事。 毎日話したくなるAIを倢芋お日倜コヌディングに励む。
GitHubhttps://github.com/noriyukipy