def get_correct_answer(m): # get the string to be repeated answer, n = m.search_last_message( r"(?:{verb}) (.*) (\w+) times separated".format( verb="|".join(repetition.verbs), context="|".join(repetition.context))) return " and ".join([answer] * msg.string_to_number(n))
def solve(m): nsteps, object_ = m.search_last_message( r"(\w+) steps forward, pick up the (\w+)") nsteps = msg.string_to_number(nsteps) for i in range(nsteps - 1): m.send("I move forward.") # wait for feedback m.read() # move m.send("I pick up the {object}.".format(object=object_))
def get_correct_answer(m): """ get the string to be repeated :param m: :return: """ answer, n = m.search_last_message( r"(?:{verb}) (.*) (\w+) times\.".format( verb="|".join(repetition.verbs))) return " ".join([answer] * msg.string_to_number(n))
def get_correct_answer(m): """ get the string to be repeated :param m: :return: """ answer, n = m.search_last_message( r"(?:{verb}) (.*) (\w+) times separated".format( verb="|".join(repetition.verbs), context="|".join(repetition.context))) enum = [answer] * msg.string_to_number(n) return " and ".join([", ".join(enum[:-1]), enum[-1]])
def on_something_said(self, event): """ find out the correct answer. get the answer of the learner and parse it :param event: :return: """ count = self.get_world().state.learner_inventory[self.target_obj] answer = event.get_match(1) num_answer = msg.string_to_number(answer) if num_answer == count: self.set_reward(1, "Correct!") else: self.set_message("{negative_feedback} " "You have {count} {objects}.".format( negative_feedback = random.choice(msg.failed), count = count, objects = msg.pluralize(self.target_obj, count)))
def on_something_said(self, event): # find out the correct answer count = self.get_world().state.learner_inventory[self.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) num_answer = msg.string_to_number(answer) if num_answer == count: self.set_result(1, "Correct!") else: self.set_message("{negative_feedback} " "You have {count} {objects}.".format( negative_feedback=random.choice(msg.failed), count=count, objects=msg.pluralize(self.target_obj, count)))
def on_answer_query(self, event): # if we are waiting for an object, then we don't expect an answer # to a query if self.stage == 'waiting-give-back': return # if you just gave me an object, then this is not the # answer for a query if self.time_gave_me_object == self.get_time(): return # short variable for the world state ws = self.get_world().state # we check if the learner's answer matches the number of instances # it has of the given object count = ws.learner_inventory[self.state.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) try: num_answer = msg.string_to_number(answer) except ValueError: num_answer = None # check if the learner has failed self.failed = self.failed or num_answer != count # get a feedback response feedback = random.choice(msg.congratulations) if num_answer == count \ else random.choice(msg.failed) if self.stage == 'initial-query': ws.learner_inventory[self.state.target_obj] += 1 self.set_message( "{feedback} I gave you {indef_object}. " "How many {objects} do you have now?".format( indef_object=msg.indef_article(self.state.target_obj), objects=msg.pluralize(self.state.target_obj, 2), feedback=feedback)) self.stage = 'one-more-query' elif self.stage == 'one-more-query': self.set_message( "{feedback} Now give the {object} back to me.".format( object=self.state.target_obj, feedback=feedback)) ws.teacher_accepts.add(self.state.target_obj) self.stage = 'waiting-give-back' elif self.stage == 'final-query': # reward the learner if it replied correctly all the questions if not self.failed: self.set_reward(1, feedback) else: self.set_reward(0, feedback)
def on_answer_query(self, event): # if we are waiting for an object, then we don't expect an answer # to a query if self.stage == 'waiting-give-back': return # if you just gave me an object, then this is not the # answer for a query if self.time_gave_me_object == self.get_time(): return # short variable for the world state ws = self.get_world().state # we check if the learner's answer matches the number of instances # it has of the given object count = ws.learner_inventory[self.state.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) try: num_answer = msg.string_to_number(answer) except ValueError: num_answer = None # check if the learner has failed self.failed = self.failed or num_answer != count # get a feedback response feedback = random.choice(msg.congratulations) if num_answer == count \ else random.choice(msg.failed) if self.stage == 'initial-query': ws.learner_inventory[self.state.target_obj] += 1 self.set_message( "{feedback} I gave you {indef_object}. " "How many {objects} do you have now?".format( indef_object=msg.indef_article(self.state.target_obj), objects=msg.pluralize(self.state.target_obj, 2), feedback=feedback)) self.stage = 'one-more-query' elif self.stage == 'one-more-query': self.set_message("{feedback} Now give the {object} back to me." .format(object=self.state.target_obj, feedback=feedback)) ws.teacher_accepts.add(self.state.target_obj) self.stage = 'waiting-give-back' elif self.stage == 'final-query': # reward the learner if it replied correctly all the questions if not self.failed: self.set_result(1, feedback) else: self.set_result(0, feedback)