teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2018/01/12 14:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -19,4 +19,76 @@
19
19
 
20
20
  さらに、クラスの定義順にも問題があります。
21
21
  Ptnaより先にResponderが定義・実装されねばなりません。
22
- 本当に本の内容を一字一句、順序もファイル分割もたがわず書いているのでしょうか。
22
+ 本当に本の内容を一字一句、順序もファイル分割もたがわず書いているのでしょうか。
23
+
24
+ これなら動くはず
25
+ ---
26
+ ちょっとバグが多過ぎて、毎回問答していては大変そうなので...
27
+ ```Python
28
+ class Responder:
29
+ """応答クラス
30
+ """
31
+ def __init__(self,name):
32
+ """Responderオブジェクトの名前をnameに格納
33
+
34
+ @param name Responderオブジェクトの名前
35
+ """
36
+ self.name = name
37
+
38
+ def response(self, input):
39
+ """応答文字列を作って返す
40
+
41
+ @param input 入力された文字列
42
+ """
43
+ return '{}ってなに?'.format(input)
44
+ #######################################################
45
+ #実行ブロック
46
+ #######################################################
47
+ def prompt(obj):
48
+ """ピティナのプロンプトを作る関数
49
+ 戻り値'Ptnaオブジェクト名:応答オブジェクト名>'
50
+ """
51
+ return obj.get_name() + ' : ' + obj.get_responder_name() + ' > '
52
+
53
+ class Ptna:
54
+ """ ピティナの本体クラス
55
+ """
56
+ def __init__(self, name):
57
+ """Ptnaオブジェクトの名前をnameに格納
58
+ Responderオブジェクトを作成してresponderに格納
59
+ @param name Ptnaオブジェクトの名前
60
+ """
61
+ self.name=name
62
+ self.responder=Responder( ' What ' )
63
+
64
+ def dialogue(self, input):
65
+ """応答オブジェクトのresponse()を呼び出して
66
+ 応答文字列を取得する
67
+
68
+ @param input ユーザーによって入力された文字列
69
+ """
70
+ return self.responder.response(input)
71
+
72
+ def get_responder_name(self):
73
+ """応答オブジェクトの名前を返す
74
+ """
75
+ return self.responder.name
76
+
77
+ def get_name(self):
78
+ """Ptnaオブジェクトの名前を返す
79
+ """
80
+ return self.name
81
+
82
+
83
+
84
+ print('Ptna System Prototype : ptna') # プログラムの情報を表示
85
+ ptna = Ptna( 'ptna' ) # Ptnaオブジェクトを作成
86
+
87
+ while True: # 対話処理開始
88
+ inputs = input(' > ')
89
+ if not inputs:
90
+ print('バイバイ')
91
+ break
92
+ response = ptna.dialogue(inputs) # 応答文字列を取得
93
+ print(response) # プロンプトと文字列をつなげて表示
94
+ ```

2

追記

2018/01/12 14:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -15,4 +15,8 @@
15
15
  > print(prompt(ptna), response) # プロンプトと文字列をつなげて表示
16
16
  > ```
17
17
 
18
- もう1ブロック分左に詰めないと、`class Responder`の一部と捉えられてしまいます。
18
+ もう1ブロック分左に詰めないと、`class Responder`の一部と捉えられてしまいます。
19
+
20
+ さらに、クラスの定義順にも問題があります。
21
+ Ptnaより先にResponderが定義・実装されねばなりません。
22
+ 本当に本の内容を一字一句、順序もファイル分割もたがわず書いているのでしょうか。

1

追記

2018/01/12 14:18

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,2 +1,18 @@
1
1
  `class Ptna`と定義していますから、
2
- インスタンスを生成する際も`ptna = Ptna('ptna')`と書いてください。
2
+ インスタンスを生成する際も`ptna = Ptna('ptna')`と書いてください。
3
+
4
+ あと下記部分のインデントがおかしいです。
5
+ > ```Python
6
+ > print('Ptna System Prototype : ptna') # プログラムの情報を表示
7
+ > ptna = ptna( 'ptna' ) # Ptnaオブジェクトを作成
8
+
9
+ > while True: # 対話処理開始
10
+ > inputs = input(' > ')
11
+ > if not inputs:
12
+ > print('バイバイ')
13
+ > break
14
+ > response = ptna.dialogue(inputs) # 応答文字列を取得
15
+ > print(prompt(ptna), response) # プロンプトと文字列をつなげて表示
16
+ > ```
17
+
18
+ もう1ブロック分左に詰めないと、`class Responder`の一部と捉えられてしまいます。