from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'real_effort' players_per_group = None num_rounds = 99 # set this large enough time_tables = 120 N_cells = 48 #multiple of six class Subsession(BaseSubsession): def creating_session(self): # values import random self.session.vars['matrix'] = [[], [],[],[],[],[]] #set here the rows for i in self.session.vars['matrix']: # jow many elements per row (rowx element must be equal to N_cells) for j in range(0, int(Constants.N_cells/6)): i.append(random.randint(0, 1)) self.session.vars['solution'] = Constants.N_cells - sum([item for sublist in self.session.vars['matrix'] for item in sublist]) for p in self.get_players(): p.solution = self.session.vars['solution'] for p in self.get_players(): if self.round_number == 1: p.participant.vars['total_correct'] = 0 class Group(BaseGroup): pass class Player(BasePlayer): input_sum = models.IntegerField(min=0, max=Constants.N_cells) total = models.IntegerField() solution = models.IntegerField() # when they do a mistake def input_sum_error_message(self, value): if value != self.session.vars['solution']: return 'The answer is not correct' def total_correct(self): # when answer is correct if self.input_sum == self.session.vars['solution']: self.participant.vars['total_correct'] += 1 #RECREATE MATRIX import random self.session.vars['matrix'] = [[], [], [], [], [], []] # for i in self.session.vars['matrix']: for j in range(0, int(Constants.N_cells/6)): i.append(random.randint(0, 1)) self.session.vars['solution'] = Constants.N_cells-sum([item for sublist in self.session.vars['matrix'] for item in sublist]) self.solution = self.session.vars['solution'] print(self.solution) self.total = self.participant.vars['total_correct'] print(self.total)