Python Udemy講座 MVCモデル コントローラー

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

最近寝不足が続いています。

Amazonプライムでおもしろそうな映画を見つけると早く寝ないとと思いながら、ついついみちゃうんですよね。

ほんとAmazonプライムはやばいです。

そういえば、ショートスリーパーという言葉が流行った時期がありましたが、今はしっかりとよい睡眠をとって脳を休ませたほうがいいアイデアが浮かんだり、いい仕事ができるということが主流になっていますよね。

ナポレオンは3時間しか寝なかったと言われていますが、実際はきっちりと質の良い睡眠をとっていたことがわかっています。

ルイ・アントワーヌ・フォヴレ・ド・ブーリエンヌという外交官で、ナポレオンの個人秘書として11年間行動をともにしていた人が書いた【奈翁実伝】という回顧録で、ナポレオンが睡眠を大切に考えて、1日7時間は寝て、昼寝までしていたことが書かれているらしいです。

やっぱり睡眠は大切ですよね。

ということで、しっかりと睡眠が取れるよう、今日のPython学習は、スパッと短く切り上げます。

昨日の復習

昨日は、MVCモデルで作る対話アプリJarvisのmodelに関するファイルrobot.pyの会話を格納したtemplatesフォルダの中身を学習しました。

Jarvisが問いかける会話の内容をtemplatesフォルダにまとめることで、会話を変更するときにコードを触る必要がなくなります。

テンプレートにすることで、robot.pyで取得する値を変数に入れて、テンプレートの中でも利用することができました。

templatesフォルダに関しては、昨日の記事を参考にしてください。

本日は、具体的にJarvisを動かすコントローラーのコードを書いていきます。

conversation.py

昨日までの段階で、対話アプリJarvisは完成しているので、今日学習するconversation.pyのコードは、Jarvisに電池を入れて、どの動作をするか伝える役割になります。

コード的には、Modelrobotモジュールを読み込んで、オブジェクトを作って、どのメソッド(関数)を実行させるかを書くことになります。

robotモジュールに定義されているクラスやメソッドについては、こちらの記事を参考にしてみてください。

それでは、conversation.pyのコードをみてみましょう

from jarvis.models import robot


def talk_about_sports():
    sports_robot = robot.SportsRobot()
    sports_robot.hello()
    sports_robot.recommend_sport()
    sports_robot.ask_user_favorite()
    sports_robot.thank_you()

これまでのコードに比べると、めちゃくちゃシンプルです。

最初にrobotモジュールを読み込んでいます。

from jarvis.modelsとなっているのは、最終的なメインの実行ファイルがmain.pyなので、メインの実行ファイルからのパスにする必要があるからです。

Python Udemy講座 MVCモデル設計

def talk_about_sports()

conversation.pyで定義する関数はこの一つだけです。

この関数を実行するだけで、Jarvisが動き出し、記述されているメソッドを順番に処理していきます。

sports_robot = robot.SportsRobot()

SportsRobotクラスから、sports_robotオブジェクト(インスタンス)を作成します。

これで、SportsRobotクラスで定義されているメソッドが使えるようになります。

sports_robot.hello()

最初に実行するメソッドは、hello()です。

JarvisJarvis

////////////////////////////////////////
こんにちは。私はJarvisです。あなたの名前を教えてください。
////////////////////////////////////////

あいさつをして、その後、ユーザーの名前を取得します。

sports_robot.recommend_sport()

2番めに実行されるメソッドは、recommend_sport()です。

JarvisJarvis

////////////////////////////////////////
私のおすすめのスポーツは、【スポーツ名】です。
あなたはこのスポーツが好きですか? [Yes/No]
////////////////////////////////////////

この質問は、回答データを保存したCSVファイルranking.pyがなければ実行されず、ファイルがあれば人気のスポーツを順番に好きかどうか聞いていきます。

whileループを使って繰り返し質問するようにしていましたね。

sports_robot.ask_user_favorite()

このメソッドは、ユーザーの好きなスポーツを尋ねてCSVファイルに保存します。

JarvisJarvis

////////////////////////////////////////
【ユーザー名】さん。あなたの好きなスポーツは何ですか?
英語で答えてください。
////////////////////////////////////////

すでに解説しましたが、英語で答えてもらうようにしているのは、漢字やひらがながある日本語よりも、すでにCSVに保存されているスポーツと取得したスポーツが同じかどうかを判断する処理が簡単だからです。

sports_robot.thank_you()

最後のメソッドはお礼の挨拶をするthank_you()です。

JarvisJarvis

////////////////////////////////////////
Jarvis:【ユーザー名】さん、回答ありがとうございました。
良い1日をお過ごしください。
////////////////////////////////////////

取得しているロボットの名前(Jarvis)とユーザー名を入れてお礼をいって終了します。

これで完成

このconversation.pyでJarvisは完成です。

あとは、talk_about_sports()を実行するだけなので、最後の行で、実行コードを書けば、Jarvisが動き始めます。

言ってみれば、電池を入れてあとはボタンを押す前の状態になっているわけです。

あとは、そのスイッチを用意するだけですが明日学習することにします。

お楽しみは最後にとっておこうということで、ちょっとだけ引き伸ばしてしまいますが、ここまで一緒に学習してこられた場合は、先にmain.pyを作ってみてもいいですし、最後の行にtalk_about_sports()を書き足して実行してみてください。

なんでも自分で試してみることが大切ですからね。

それでは、明日もGood Python!