回答編集履歴

3

追記

2018/01/12 14:36

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -41,3 +41,147 @@
41
41
  Ptnaより先にResponderが定義・実装されねばなりません。
42
42
 
43
43
  本当に本の内容を一字一句、順序もファイル分割もたがわず書いているのでしょうか。
44
+
45
+
46
+
47
+ これなら動くはず
48
+
49
+ ---
50
+
51
+ ちょっとバグが多過ぎて、毎回問答していては大変そうなので...
52
+
53
+ ```Python
54
+
55
+ class Responder:
56
+
57
+ """応答クラス
58
+
59
+ """
60
+
61
+ def __init__(self,name):
62
+
63
+ """Responderオブジェクトの名前をnameに格納
64
+
65
+
66
+
67
+ @param name Responderオブジェクトの名前
68
+
69
+ """
70
+
71
+ self.name = name
72
+
73
+
74
+
75
+ def response(self, input):
76
+
77
+ """応答文字列を作って返す
78
+
79
+
80
+
81
+ @param input 入力された文字列
82
+
83
+ """
84
+
85
+ return '{}ってなに?'.format(input)
86
+
87
+ #######################################################
88
+
89
+ #実行ブロック
90
+
91
+ #######################################################
92
+
93
+ def prompt(obj):
94
+
95
+ """ピティナのプロンプトを作る関数
96
+
97
+ 戻り値'Ptnaオブジェクト名:応答オブジェクト名>'
98
+
99
+ """
100
+
101
+ return obj.get_name() + ' : ' + obj.get_responder_name() + ' > '
102
+
103
+
104
+
105
+ class Ptna:
106
+
107
+ """ ピティナの本体クラス
108
+
109
+ """
110
+
111
+ def __init__(self, name):
112
+
113
+ """Ptnaオブジェクトの名前をnameに格納
114
+
115
+ Responderオブジェクトを作成してresponderに格納
116
+
117
+ @param name Ptnaオブジェクトの名前
118
+
119
+ """
120
+
121
+ self.name=name
122
+
123
+ self.responder=Responder( ' What ' )
124
+
125
+
126
+
127
+ def dialogue(self, input):
128
+
129
+ """応答オブジェクトのresponse()を呼び出して
130
+
131
+ 応答文字列を取得する
132
+
133
+
134
+
135
+ @param input ユーザーによって入力された文字列
136
+
137
+ """
138
+
139
+ return self.responder.response(input)
140
+
141
+
142
+
143
+ def get_responder_name(self):
144
+
145
+ """応答オブジェクトの名前を返す
146
+
147
+ """
148
+
149
+ return self.responder.name
150
+
151
+
152
+
153
+ def get_name(self):
154
+
155
+ """Ptnaオブジェクトの名前を返す
156
+
157
+ """
158
+
159
+ return self.name
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ print('Ptna System Prototype : ptna') # プログラムの情報を表示
168
+
169
+ ptna = Ptna( 'ptna' ) # Ptnaオブジェクトを作成
170
+
171
+
172
+
173
+ while True: # 対話処理開始
174
+
175
+ inputs = input(' > ')
176
+
177
+ if not inputs:
178
+
179
+ print('バイバイ')
180
+
181
+ break
182
+
183
+ response = ptna.dialogue(inputs) # 応答文字列を取得
184
+
185
+ print(response) # プロンプトと文字列をつなげて表示
186
+
187
+ ```

2

追記

2018/01/12 14:36

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -33,3 +33,11 @@
33
33
 
34
34
 
35
35
  もう1ブロック分左に詰めないと、`class Responder`の一部と捉えられてしまいます。
36
+
37
+
38
+
39
+ さらに、クラスの定義順にも問題があります。
40
+
41
+ Ptnaより先にResponderが定義・実装されねばなりません。
42
+
43
+ 本当に本の内容を一字一句、順序もファイル分割もたがわず書いているのでしょうか。

1

追記

2018/01/12 14:18

投稿

LouiS0616
LouiS0616

スコア35658

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