「Rubyでつくる人工無脳」という本は、人工無脳を作りながらRubyを学ぶという側面もあるようで、プログラムのテクニックがてんこもりになっているみたい。 2つ目のプログラムは、Pythonに置き換えると、自作モジュールのimport、クラスの継承、randomモジュール、リストなどが含まれている。
実行結果
昨日のプログラムからの変更点は、返事をランダムに返すこと。
ちょっとだけ、自然な会話に見えるところもある..かな..
モジュールのソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import random class Responder: def __init__(self, name): self.name=name def response(self, input_text): return '' class WhatResponder(Responder): def response(self, input_text): return f"{input_text}って何?" class RandomResponder(Responder): def __init__(self, name): super().__init__(name) self.responses = ['今日はさむいね','チョコ食べたい','きのう10円拾った'] def response(self, input_text): return random.choice(self.responses) class Unmo: def __init__(self, name): self.name = name self.responder = RandomResponder('Random') def dialog(self, input_text): return self.responder.response(input_text) |
メインのソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import unmo0223 def prompt(unmo): return f"{unmo.name}:{unmo.responder.name} > " print('Unmo System prototype : proto') proto = unmo0223.Unmo('proto') while True: print('>',end=' ') input_text = input() input_text = input_text.rstrip() if input_text == '': break response = proto.dialog(input_text) print(prompt(proto) + response) print('shutdown') |
デバッグするのに結構時間がかかった。 文法的に自信がないので、文法的な誤りだとばかり思ってデバッグしていたけど、結局凡ミスが2つあっただけだった。 エラーメッセージにも慣れていいないので、何が原因か特定するのに時間がかかる。
明日からは、Guiを使ったアプリを作成予定だけど、Rubyとは全く違うみたいなので、まずはPythonでのGuiの扱いについて学習だな..。