前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
File "D:\Atom\AI\dictionary.py", line 45
class ParseItem:
^
SyntaxError: invalid syntax
該当のソースコード
class ParseItem: SEPARATOR = '^((-?/d+)##)?(.*)$' def __init__(self, pattern, phrases): """ @param pattern パターン @param phrases 応答例 """ # 辞書のパターンの部分にSEPARATORをマッチさせる m = re.findall(ParseItem.SEPARATOR, pattern) # インスタンス変数modifyに0 self.modify = 0 #マッチ結果の整数部分がからでなければ値を再代入 if m[0] [1]: self.modify =int(m[0] [1]) # インスタンス変数でpatternにマッチ結果のパターン部分を代入 self.pattern = m[0] [2] self.phrases = [] # 応答例を保持するインスタンス変数 self.dic = {} # インスタンス変数 # 引数で渡された応答例を|で分割 # 個々の要素に対してSEPARATORをマッチさせる # self. phrases[ 'need' : 応答例の整数部分] # 'phrase' : 応答例の文字列配分 ] for phrase in phrases.split('|'): # 応答に対してパターンマッチを行う m = re.findall(ParseItem.SEPARATOR, phrase) # 'need'の値を整数部分m[0][1]にする # 'phrase'の値を応答文字列m[0][2] self.dic['need'] = 0 if m[0] [1]: self.dic['need'] = int(m[0] [1]) self.dic['phrase'] = m[0] [2] # 作成した辞書をphrasesリストに追加 # ? self.phrases.append(self.dic.copy()) def match(self, str): """self.pattern(各行ごとの正規表現)を インプット文字列にパターンマッチ """ return re.search(self.pattern, str) def choice(self, mood): """インスタンス変数phrases(リスト)の 要素('need''phrase'の辞書) 'need':数値を @param mood 現在の期限値 """ choices = [] # self.phrasesが保持するリストの要素を反復処理 for p in self.phrases: # self.phrasesの'need'キーの数値と # パラメーターmoodをsuitable()に渡す # 結果がTrueであればchoicesリストに'phrase'キーの数値と if (self.suitable(p['need'], mood)): choices.append(p['phrase']) # choicesリストが空であればNoneを返す if (len(choices) == 0): return None # choicesリストが空でなければランダムに # 応答文字列を選択して返す return random.choice(choices) def suitable(self, need, mood): """インスタンス変数phrases(リスト)の 要素('need''phrase'の辞書) 'need':数値を @param need 必要機嫌値 @param mood 現在の期限値 """ # 必要機嫌値が0であればTrueを返す if (need == 0): return True # 必要機嫌値プラスの場合は機嫌値が必要機嫌値を超えているか判断 elif (need > 0): return (mood > need) # 応答例の数値がマイナスの場合は機嫌値が下回っているか判定 else: return (mood < need)
試したこと
AIを作っているのですが、感情を4つ表現する際にエラーが出てきました。
self.phrases.append(self.dic.copy())の部分ですが、使用している書籍には
self.phrases.append(self.dic.copy() とかっこの部分が一つ少なく書いてあったのですがそれですとdef match(self, str): から反応しなくなったので書き換えたのですが、あってもなくても同じエラーのままでした。
補足情報(FW/ツールのバージョンなど)
Python3.6バージョンです
回答2件
あなたの回答
tips
プレビュー