Python学習【365日チャレンジ!】102日目のマスターU(@Udemy11)です。
昨日で、一通りの入門編が終了して、今日から実践編ということで、簡単な対話アプリケーションを作成していきます。
これまでは、レクチャーで教えてもらった内容を繰り返して実践するスタイルでしたが、今回は、提示された課題を自分で考えてコードを書いてみて、課題の通りの動きを再現することが目標になります。
コードに正解はないので、どんなコードを書けば、指定されたとおり動くのかを自分で考えてやってみることが重要なので、失敗を恐れず、実践していこうと思います。
それでは今日もPython学習にはいりましょう!
昨日の復習
昨日は、datetime
モジュールとtime
モジュールについて学習しました。
datetime
モジュールは、現在日時を取得して、独自フォーマットで表示することもできました。
import datetime
now = datetime.datetime.now()
print(now)
print(now.isoformat())
print(now.strftime('%y/%m/%d-%H:%M:%S'))
出力結果
2020-05-22 20:2:355.239749
2020-05-22T20:23:355.239749
20/05/22-20:23:55
一方で、time
モジュールは、時間単位を扱うモジュールで、time.sleep()
関数で数秒後に次の操作をさせることができました。
import time
print('start')
time.sleep(1)
print('end')
これは、start
が出力されて1秒後にend
が出力されるコードです。
日時に関しては、大抵のアプリで利用されているので、非常に使用頻度の高いモジュールだと言えます。
詳しくは、昨日の記事を参考にしてください。
それでは、本日の学習に入っていきましょう!
対話型アプリケーション
第一弾の課題は、対話型アプリケーションの作成です。
ロボットのジャービスが質問をしてきて、その質問に答えると、次の質問をしたり、保存されたデータの中からおすすめを提示したりして、好きなスポーツを収集していきます。
最初は質問をしてデータを取得するだけですが、2人目以降は、保存されているデータや回答によって、質問の中身や次の質問が変わるようになっています。
質問が終わったあとには、CSVファイルが更新されているというやり取りを一つのPythonファイルでできるようにします。
フォルダ構造としては、次のような感じです。
jarvis ┳ main.py
┗ ranking.csv(1人目回答後に作成される)
ということで、最終的には4人の人に回答してもらい、データを蓄積していきますので、最終的にこうなるという流れを見ていきます。
1人目のやり取り
こんにちは。私はジャービスです。あなたの名前を教えてください。
MasterU
MasterUさん、あなたの好きなスポーツは何ですか?
英語で答えてください。
baseball
MasterUさん、回答ありがとうございました。
良い1日をお過ごしください。
保存される【ranking.csv】
NAME,COUNT
Baseball,1
まずは、ロボットのジャービスが質問して、入力を待ちます。
自分の名前を入力したあと、さらにジャービスが答えた名前の頭文字を大文字にして、名前を言ったあと、好きなスポーツをききます。
日本語だと、ひらがな、カタカナ、漢字になってしまい、同じスポーツにするには一工夫必要なため、今回は英語で答えます。
入力したデータは、頭文字を大文字にしておきます。
最後に、ジャービスが名前の頭文字を大文字にして名前を言ったあと、お礼を述べます。
main.py
を終了したときには、データの入ったranking.csv
が同じ階層に作成されるようにします。
これが一人目の処理になります。
続いて、同じmain.py
をもう一度開いて、次の人に質問をします。
2人目のやり取り
こんにちは。私はジャービスです。あなたの名前を教えてください。
hayato
私のおすすめのスポーツは、Baseballです。
あなたはこのスポーツが好きですか? [Yes/No]
No
Hayatoさん、あなたの大好きなスポーツはなんですか?
英語で答えてください。
volleyball
Hayatoさん、回答ありがとうございました。
良い1日をお過ごしください。
保存される【ranking.csv】
NAME,COUNT
Baseball,1
Volleyball,1
基本的に2人目以降も最初の質問は同じで、名前を聞いてきます。
1人目と違うのは、ranking.csv
に保存されたデータから、おすすめのスポーツを提示して、そのスポーツが好きかどうか、Yes
かNo
で答えてもらいます。
このときの回答は、Yes
でもYES
でも、Y
でもy
でも構いません。No
の場合も同様です。
もし、それ以外の回答の場合は、次のように聞き返してきます。
Yes か Noで答えてください。
きちんとYes
かNo
を返せたら、次の質問に移ります。
次の質問は、一人目のときと同じで、その回答がranking.csv
にあれば、そのスポーツ名のCOUNT
に1を加えてCSVの値を変更します。
最後は、1人目同様のお礼で終了します。
3人目は、もう少し複雑です。
3人目のやり取り
こんにちは。私はジャービスです。あなたの名前を教えてください。
saya
わたしがおすすめするスポーツは、Baseballです。
あなたはこのスポーツが好きですか? [Yes/No]
No
わたしがおすすめするスポーツは、Volleyballです。
あなたはこのスポーツが好きですか? [Yes/No]
Yes
Sayaさん、あなたの大好きなスポーツはなんですか?
英語で答えてください。
Volleyball
Sayaさん、回答ありがとうございました。
良い1日をお過ごしください。
保存される【ranking.csv】
NAME,COUNT
Baseball,1
Volleyball,2
2人目と同じように、名前を聞かれて答えると、おすすめのスポーツを提示してきます。
2人目と違うのは、ranking.csv
のデータが2つになっているので、1回目のおすすめへの回答がYes
であれば、大好きなスポーツを聞く質問を表示しますが、No
だった場合は、2つ目のスポーツをおすすめにして好きか嫌いかを聞いてきます。
最終的には、1人目2人目と同じお礼のあいさつで終了し、ranking.csv
のデータはValleyball
のCOUNT
が2
になっています。
4人目のやり取り
こんにちは。私はジャービスです。あなたの名前を教えてください。
Yumiko
わたしがおすすめするスポーツは、Volleyballです。
あなたはこのスポーツが好きですか? [Yes/No]
n
わたしがおすすめするスポーツは、Baseballです。
あなたはこのスポーツが好きですか? [Yes/No]
N
Yumikoさん、あなたの大好きなスポーツはなんですか?
英語で答えてください。
softball
Yumikoさん、回答ありがとうございました。
良い1日をお過ごしください。
保存される【ranking.csv】
NAME,COUNT
Baseball,1
Volleyball,2
Softball,1
4人目で最後ですが、出だしは名前を聞くので3人目までと同じです。
次のおすすめのスポーツは、ranking.csv
からデータを取得して、一番数の多い順に紹介します。
Yes
の回答が得られたときか、記録されているすべてのスポーツを聞いてしまった場合に、大好きなスポーツを尋ねる質問に移動します。
答えたスポーツがranking.csv
になければ、NAME
にスポーツ名、COUNT
に1を追加します。
一気に全ては無理
1人目から4人目までのやり取りを、一気にプログラミングすることはできなくもありませんが、それは、一流のPythonマスターだったらできるということです。
初心者にとっては、この一連の流れを考えながら、一気にコードを書くことは無理です。
答えがないので、いろいろな方法で、この対話を実現することは可能です。
なので、これまで学習してきたことを思い出しながら、積み木のように組み立てていきましょう!
少し長くなったので、今回は課題の提供で終了したいと思いますが、
私自身、この課題への答えを何通りか試しているところです。
明日はまず、一人目の対話ファイルを完成させる予定です。
それでは明日も、Good Python!