from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random author = 'Robizon' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'tipped_workers_app' players_per_group = None part_0_length=2 #consent part_1_length=4 #instructions part_2_length=2 #quiz part_3_length=5 #counting task part_4_length=3 #belifs part_5_length=1 #risk task part_6_length=2 #Demographics num_rounds = part_0_length+part_1_length+part_2_length+part_3_length+part_4_length+part_5_length+part_6_length+2 box_length=100 chunks=10 class Subsession(BaseSubsession): def creating_session(self): if self.round_number==1: for p in self.get_players(): p.participant.vars['rounds']=[1, 100, 100, 100, 100, 100, 100, 100] # random number of smile faces #p.participant.vars['number_of_smiles']=[random.randint(0, Constants.box_length) for x in range(Constants.part_3_length)] # number of smile face is 50 p.participant.vars['number_of_smiles']=[50 for x in range(Constants.part_3_length)] p.participant.vars['list_of_smiles']=[list(random.sample([0]*(Constants.box_length-x)+[1]*x, Constants.box_length)) for x in p.participant.vars['number_of_smiles']] p.participant.vars['answered_list_p1']=[] p.participant.vars['correct']=[[0]*Constants.box_length for i in range(0, Constants.part_3_length)] p.participant.vars['image_id']=[['image_{}'.format(i) for i in range(Constants.chunks*i, Constants.chunks*(i+1))] for i in range(Constants.chunks)] p.participant.vars['val_id']=[[i for i in range(Constants.chunks*i, Constants.chunks*(i+1))] for i in range(Constants.chunks)] p.participant.vars['quiz_n_correct']=0 p.participant.vars['strike']=0 p.participant.vars['quiz_your_answers']=[0]*4 p.participant.vars['correct_answers']=[0, 2, 1, 3] p.participant.vars['correctly_answered']=[0]*4 p.participant.vars['risk_list']=list(range(10, 100, 10)) random.shuffle(p.participant.vars['risk_list']) class Group(BaseGroup): pass class Player(BasePlayer): smiley_allocation=models.LongStringField() select=models.LongStringField() time=models.LongStringField() mouse=models.LongStringField() mouse_time=models.LongStringField() n_correct=models.IntegerField(initial=0) n_incorrect=models.IntegerField(initial=0) fixed_amount=models.IntegerField() lottery=models.IntegerField() quiz_1=models.IntegerField(widget=widgets.RadioSelect) quiz_2=models.IntegerField(widget=widgets.RadioSelect) def check_correct(self, current_round): for i in self.participant.vars['answered_list_p1'][current_round]: if self.participant.vars['list_of_smiles'][current_round][i]==1: self.participant.vars['correct'][current_round][i]=1 self.n_correct+=1 else: self.participant.vars['correct'][current_round][i]=-1 self.n_incorrect+=1 text_to_A=models.LongStringField(label=False) belief_1=models.FloatField(min=0, max=2.5) belief_2=models.FloatField(min=0, max=2.5) belief_3=models.LongStringField() belief_4=models.LongStringField() belief_5=models.IntegerField() belief_6=models.IntegerField() belief_7=models.IntegerField() belief_8=models.IntegerField() q_age=models.IntegerField(min=1, max=120) q_gender=models.IntegerField(widget=widgets.RadioSelect) q_6_confusing=models.FloatField(blank=True) q_7_feedback=models.LongStringField(blank=True)