from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'risk' players_per_group = None num_rounds = 15 #lottery outcomes lottery_mat = [ [1, [50,50,50,80], [20,20,100,100]], #r11 & r12 [2, [10,10,90,90], [30,50,50,60]], #r21 & r22 [3, [100,100,100,100], [20,20,20,110]], #r31 & r32 [4, [100,100,0,0], [50,50,50,50]], #r41 & r42 [5, [100,100,0,0], [100,75,25,0]], #r51 & r52 ] class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: for p in self.get_players(): #question order randomization r_images = [['r_opt/r11.png', 'r_opt/r12.png'],['r_opt/r21.png', 'r_opt/r22.png'],['r_opt/r31.png', 'r_opt/r32.png'],['r_opt/r41.png', 'r_opt/r42.png'],['r_opt/r51.png', 'r_opt/r52.png']] r_matrixindex = list(range(len(Constants.lottery_mat))) #r_questions = [list(a) for a in zip(r_images, r_matrixindex)] r_questions = [list(Constants.lottery_mat[i]) for i in range(len(Constants.lottery_mat))] r_randomized_questions = random.sample(r_questions, len(r_questions)) r_list = list() for qn in r_randomized_questions: #for all 5 types of questions... for i in range(3): #... repeat 3 times r_list.append(qn) p.participant.vars['risk_qn_order'] = r_list for p in self.get_players(): p.lottery_index = p.participant.vars['risk_qn_order'][self.round_number-1][0] p.outcome = random.sample([0,1,2,3], 1)[0] #randomly choose questions 1 to 15 p.chosen_task = random.sample(range(1,16),1)[0] print('chosen task for player ' + str(p.id_in_group) + ' is' + str(p.chosen_task)) for p in self.get_players(): print('Player ' + str(p.id_in_group) + ' risk task qn order and info') print(p.participant.vars['risk_qn_order']) class Group(BaseGroup): pass class Player(BasePlayer): lottery_choice = models.IntegerField( choices = [ [1, 'Option 1'], [2, 'Option 2'], ], widget=widgets.RadioSelect, blank=False ) lottery_index = models.IntegerField() outcome = models.IntegerField() outcome_payout = models.IntegerField() chosen_task = models.IntegerField()