from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class MyPage_start(Page): def is_displayed(self): return self.round_number ==1 #timeout_seconds =2 class MyPage_p1_0(Page): def is_displayed(self): return self.round_number ==1 #timeout_seconds =2 class MyPage_p1_1(Page): def is_displayed(self): return self.round_number <=2 #timeout_seconds =2 form_model="player" def get_form_fields(self): return ['fixed_amount'] def fixed_amount_choices(self): if self.player.active_decission_p1 == 1: choices=[ [1, 'Fixed amount of $2'], [2, 'Let the computer choose between $0 and $15'], ] elif self.player.active_decission_p1 == 2: choices=[ [1, 'Fixed amount of $10'], [2, 'Let the computer choose between $0 and $15'], ] # here we shuffle to make order of choices random random.shuffle(choices) return choices def before_next_page(self): if self.player.active_decission_p1 == 1: if self.player.fixed_amount==1: self.participant.vars['payment_p1'][0]=2 else: self.participant.vars['payment_p1'][0]=self.participant.vars["random_payment"] elif self.player.active_decission_p1 == 2: if self.player.fixed_amount==1: self.participant.vars['payment_p1'][1]=10 else: self.participant.vars['payment_p1'][1]=self.participant.vars["random_payment"] class MyPage_p1_2(Page): def is_displayed(self): return [self.round_number ==2][0] #timeout_seconds =2 class MyPage_p2_1(Page): def is_displayed(self): return [(self.round_number >=3 and self.round_number <=10) or (self.round_number==29) or (self.round_number ==(33+len(self.subsession.get_players())) and self.player.type_A==False) or (self.round_number ==(34+2*len(self.subsession.get_players())) and self.player.type_A==False)][0] timeout_seconds=20 timer_text='Time left' def vars_for_template(self): if self.round_number<20: if self.player.active_task==1: title='count letter b in the string' elif self.player.active_task==2: title='count letter d in the string' elif self.player.active_task==3: title='count letter p in the string' elif self.player.active_task==4: title='count letter q in the string' elif self.player.active_task==5: title='sum two 2-digit numbers' elif self.player.active_task==6: title='sum two 3-digit numbers' elif self.player.active_task==7: title='sum two 4-digit numbers' elif self.player.active_task==8: title='sum two 5-digit numbers' return{ 'title' : title, 'task_number' : self.subsession.round_number-2, 'task_number_prev' : self.subsession.round_number-3, } elif self.round_number>20: if self.round_number==29: self.player.find_task_to_do_p3() self.participant.vars['active_task']=self.player.active_task if self.player.active_task==1: title='count letter b in the string' elif self.player.active_task==2: title='count letter d in the string' elif self.player.active_task==3: title='count letter p in the string' elif self.player.active_task==4: title='count letter q in the string' elif self.player.active_task==5: title='sum two 2-digit numbers' elif self.player.active_task==6: title='sum two 3-digit numbers' elif self.player.active_task==7: title='sum two 4-digit numbers' elif self.player.active_task==8: title='sum two 5-digit numbers' return{ "title" : title, 'active_task' : self.player.active_task, "comp_selected" : self.player.question_to_do, "your_decission" : round(self.player.in_round(self.player.question_to_do + 16).decission, 2), "comp_decission" : round(self.player.computer_draw, 2) } elif self.round_number ==(33+len(self.subsession.get_players())): if self.player.part_4_order==1: self.player.active_task=self.participant.vars['active_task_p4_1'] who_is_more=self.participant.vars['who_is_more_1'] elif self.player.part_4_order==2: self.player.active_task=self.participant.vars['active_task_p4_2'] who_is_more=self.participant.vars['who_is_more_2'] if self.player.active_task==1: title='count letter b in the string' elif self.player.active_task==2: title='count letter d in the string' elif self.player.active_task==3: title='count letter p in the string' elif self.player.active_task==4: title='count letter q in the string' elif self.player.active_task==5: title='sum two 2-digit numbers' elif self.player.active_task==6: title='sum two 3-digit numbers' elif self.player.active_task==7: title='sum two 4-digit numbers' elif self.player.active_task==8: title='sum two 5-digit numbers' if self.round_number ==(30+len(self.subsession.get_players())+3): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+4): i=2 return{ "title" : title, 'active_task' : self.player.active_task, 'round_num' : i, "who_is_more": who_is_more } elif self.round_number ==(34+2*len(self.subsession.get_players())): if self.player.part_4_order==1: self.player.active_task=self.participant.vars['active_task_p4_2'] who_is_more=self.participant.vars['who_is_more_1'] elif self.player.part_4_order==2: self.player.active_task=self.participant.vars['active_task_p4_1'] who_is_more=self.participant.vars['who_is_more_2'] if self.player.active_task==1: title='count letter b in the string' elif self.player.active_task==2: title='count letter d in the string' elif self.player.active_task==3: title='count letter p in the string' elif self.player.active_task==4: title='count letter q in the string' elif self.player.active_task==5: title='sum two 2-digit numbers' elif self.player.active_task==6: title='sum two 3-digit numbers' elif self.player.active_task==7: title='sum two 4-digit numbers' elif self.player.active_task==8: title='sum two 5-digit numbers' if self.round_number ==(30+len(self.subsession.get_players())+3): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+4): i=2 return{ "title" : title, 'active_task' : self.player.active_task, 'round_num' : i, "who_is_more": who_is_more } class MyPage_p2_2(Page): def is_displayed(self): return [(self.round_number >=3 and self.round_number <=10) or (self.round_number==29) or (self.round_number ==(33+len(self.subsession.get_players())) and self.player.type_A==False) or (self.round_number ==(34+2*len(self.subsession.get_players())) and self.player.type_A==False)][0] form_model="player" def get_form_fields(self): return ['count_sum{}'.format(i) for i in range(1, Constants.var_length)] timeout_seconds =120 timer_text='Time left' timeout_submission={} for i in range(1, Constants.var_length): timeout_submission.update({"count_sum{}".format(i): -1}) del i def vars_for_template(self): list=[] for i in range(1,Constants.var_length): if self.player.active_task==1: list.append(eval("self.player.string"+str(i))) title='count letter b in the string' elif self.player.active_task==2: list.append(eval("self.player.string"+str(i))) title='count letter d in the string' elif self.player.active_task==3: list.append(eval("self.player.string"+str(i))) title='count letter p in the string' elif self.player.active_task==4: list.append(eval("self.player.string"+str(i))) title='count letter q in the string' elif self.player.active_task==5: list.append('{:0,.0f}'.format(eval("self.player.sd1_"+str(i)))+'+'+'{:0,.0f}'.format(eval("self.player.sd2_"+str(i)))) title='sum two 2-digit numbers' elif self.player.active_task==6: list.append('{:0,.0f}'.format(eval("self.player.dd1_"+str(i)))+'+'+'{:0,.0f}'.format( eval("self.player.dd2_"+str(i)))) title='sum two 3-digit numbers' elif self.player.active_task==7: list.append('{:0,.0f}'.format( eval("self.player.td1_"+str(i)))+'+'+'{:0,.0f}'.format( eval("self.player.td2_"+str(i)))) title='sum two 4-digit numbers' elif self.player.active_task==8: list.append('{:0,.0f}'.format( eval("self.player.qd1_"+str(i)))+'+'+'{:0,.0f}'.format( eval("self.player.qd2_"+str(i)))) title='sum two 5-digit numbers' if self.round_number ==(30+len(self.subsession.get_players())+3): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+4): i=2 else: i=100 list1=list list2=['count_sum{}'.format(i) for i in range(1, Constants.var_length)] return{ 'title' : title, 'my_list' : zip(list1, list2), 'task_number' : self.subsession.round_number-2, 'round_num' :i } def before_next_page(self): if self.player.active_task==1: self.player.check_correct_strings('b') for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_b']=self.player.n_correct self.participant.vars['payment_p2'][0]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==2: self.player.check_correct_strings('d') for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_d']=self.player.n_correct self.participant.vars['payment_p2'][1]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==3: self.player.check_correct_strings('p') for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_p']=self.player.n_correct self.participant.vars['payment_p2'][2]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==4: self.player.check_correct_strings('q') for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_q']=self.player.n_correct self.participant.vars['payment_p2'][3]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==5: self.player.check_correct_sd() for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_sd']=self.player.n_correct self.participant.vars['payment_p2'][4]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==6: self.player.check_correct_dd() for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_dd']=self.player.n_correct self.participant.vars['payment_p2'][5]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct elif self.player.active_task==7: self.player.check_correct_td() for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_td']=self.player.n_correct self.participant.vars['payment_p2'][6]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct else: self.player.check_correct_qd() for i in range(1, Constants.var_length): self.player.n_correct += eval("self.player.correct"+str(i)) if self.round_number<=10: self.participant.vars['correct_qd']=self.player.n_correct self.participant.vars['payment_p2'][7]=self.player.n_correct elif self.round_number==29: self.participant.vars['payment_p3_block3']=self.player.n_correct elif self.round_number ==33+len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][0]=self.player.n_correct elif self.round_number ==34+2*len(self.subsession.get_players()): self.participant.vars['payment_p4_block2'][1]=self.player.n_correct class MyPage_p2_3(Page): def is_displayed(self): return self.round_number == 10 #timeout_seconds =2 class MyPage_p3_1(Page): def is_displayed(self): return [self.round_number == 11 or self.round_number == 14 or self.round_number == 17 or self.round_number == 30][0] #timeout_seconds =2 class MyPage_p3_2(Page): def is_displayed(self): return [self.round_number >=11 and self.round_number <=13][0] #timeout_seconds =2 form_model="player" def get_form_fields(self): return ['decission'] def vars_for_template(self): if self.player.decission_num==1: option_A="Task 3 (counting letter p in a string of 25 letters) for $0.50 per correct answer" option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' elif self.player.decission_num==2: option_A='Task 7 (adding two 4-digit numbers, such as 5,384+3,645) for $0.50 per correct answer' option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' else: option_A='Task 3 (counting letter p in a string of 25 letters) for $0.50 per correct answer' option_B='Task 4 (counting letter q in a string of 25 letters) for $[ ] per correct answer' return{ 'option_A' : option_A, 'option_B' : option_B } class MyPage_p3_3(Page): def is_displayed(self): return [self.round_number >=11 and self.round_number <=13][0] #timeout_seconds =2 def vars_for_template(self): if self.player.decission_num==1: option_A="Task 3 (counting letter p in a string of 25 letters) for $0.50 per correct answer" option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' if self.player.decission==0.49 or self.player.decission==0.50 or self.player.decission==0.51: comp_draw=self.player.rand_prac*0.68+(1-self.player.rand_prac)*0.52 elif self.player.decission>0.51: comp_draw=min(self.player.decission+self.player.rand_prac/1.9, 4.49) else: comp_draw=self.player.rand_prac*self.player.decission+(1-self.player.rand_prac)*0.5 elif self.player.decission_num==2: option_A='Task 7 (adding two 4-digit numbers, such as 5,384+3,645) for $0.50 per correct answer' option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' if self.player.decission==0.49 or self.player.decission==0.50 or self.player.decission==0.51: comp_draw=self.player.rand_prac*0.68+(1-self.player.rand_prac)*0.52 elif self.player.decission>0.51: comp_draw=min(self.player.decission-self.player.rand_prac/1.9, 4.41) else: comp_draw=self.player.rand_prac*self.player.decission+(1-self.player.rand_prac)*0.5 else: option_A='Task 3 (counting letter p in a string of 25 letters) for $0.50 per correct answer' option_B='Task 4 (counting letter q in a string of 25 letters) for $[ ] per correct answer' if self.player.decission==0.49 or self.player.decission==0.50 or self.player.decission==0.51: comp_draw=self.player.rand_prac*self.player.decission+(1-self.player.rand_prac)*0 elif self.player.decission>0.51: comp_draw=self.player.rand_prac*self.player.decission+(1-self.player.rand_prac)*0.5 else: comp_draw=self.player.rand_prac*self.player.decission+(1-self.player.rand_prac)*0.5 return{ 'option_A' : option_A, 'option_B' : option_B, 'comp_draw' : round(comp_draw, 2), } class MyPage_p3_4(Page): def is_displayed(self): return [self.round_number >= 14 and self.round_number <= 16][0] #timeout_seconds =2 form_model="player" def get_form_fields(self): return ['answer_1', 'answer_2', 'answer_3', 'answer_4',] def answer_1_choices(self): choices=[ [1, 'The task in Option X'], [2, 'The task in Option Y'], [3, 'It will be randomly determined'] ] return choices def answer_2_choices(self): choices=[ [1, 'The amount filled by you'], [2, 'The amount drawn by the computer'], [3, '$0.50'], [4, 'It will be randomly determined'] ] return choices def answer_3_choices(self): choices=[ [1, 'The task in Option X'], [2, 'The task in Option Y'], [3, 'It will be randomly determined'] ] return choices def answer_4_choices(self): choices=[ [1, 'The amount filled by you'], [2, 'The amount drawn by the computer'], [3, '$0.50'], [4, 'It will be randomly determined'] ] return choices def vars_for_template(self): if self.player.decission_num==3: option_A="Task 2 (counting letter d in a string of 25 letters) for $0.50 per correct answer" option_B="Task 3 (counting letter p in a string of 25 letters) for $[ ] per correct answer" filled=0.95 comp_draw1=0.85 comp_draw2=2.85 elif self.player.decission_num==2: option_A="Task 2 (counting letter d in a string of 25 letters) for $0.50 per correct answer" option_B='Task 5 (adding two 2-digit numbers, such as 36+85) for $[ ] per correct answer' filled=0.25 comp_draw1=0.20 comp_draw2=0.40 else: option_A='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $0.50 per correct answer' option_B='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $[ ] per correct answer' filled=2.50 comp_draw1=2.30 comp_draw2=3.30 return{ 'option_A' : option_A, 'option_B' : option_B, 'filled' : filled, 'comp_draw1' : comp_draw1, 'comp_draw2' : comp_draw2, } def before_next_page(self): if self.player.decission_num==1: self.player.check_correct_ans_p_3() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p3_block2'][0]=self.player.n_correct elif self.player.decission_num==2: self.player.check_correct_ans_p_3() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p3_block2'][1]=self.player.n_correct elif self.player.decission_num==3: self.player.check_correct_ans_p_3() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p3_block2'][2]=self.player.n_correct class MyPage_p3_5(Page): def is_displayed(self): return [self.round_number >= 17 and self.round_number <= 28][0] #timeout_seconds =2 form_model="player" def get_form_fields(self): return ['decission'] def vars_for_template(self): if self.player.active_question==1: option_A="Task 1 (counting letter b in a string of 25 letters) for $0.50 per correct answer" option_B="Task 2 (counting letter d in a string of 25 letters) for $[ ] per correct answer" elif self.player.active_question==2: option_A="Task 1 (counting letter b in a string of 25 letters) for $0.50 per correct answer" option_B="Task 3 (counting letter p in a string of 25 letters) for $[ ] per correct answer" elif self.player.active_question==3: option_A='Task 1 (counting letter b in a string of 25 letters) for $0.50 per correct answer' option_B='Task 4 (counting letter q in a string of 25 letters) for $[ ] per correct answer' elif self.player.active_question==4: option_A='Task 5 (adding two 2-digit numbers, such as 71+45) for $0.50 per correct answer' option_B='Task 6 (adding two 3-digit numbers, such as 487+185) for $[ ] per correct answer' elif self.player.active_question==5: option_A='Task 5 (adding two 2-digit numbers, such as 71+25) for $0.50 per correct answer' option_B='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $[ ] per correct answer' elif self.player.active_question==6: option_A='Task 5 (adding two 2-digit numbers, such as 12+83) for $0.50 per correct answer' option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' elif self.player.active_question==7: option_A='Task 6 (adding two 3-digit numbers, such as 487+185) for $0.50 per correct answer' option_B='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $[ ] per correct answer' elif self.player.active_question==8: option_A='Task 6 (adding two 3-digit numbers, such as 487+185) for $0.50 per correct answer' option_B='Task 8 (adding two 5-digit numbers, such as 53,324+85,342) for $[ ] per correct answer' elif self.player.active_question==9: option_A='Task 5 (adding two 3-digit numbers, such as 751+125) for $0.50 per correct answer' option_B='Task 5 (adding two 3-digit numbers, such as 751+125) for $[ ] per correct answer' elif self.player.active_question==10: option_A='Task 2 (counting letter d in a string of 25 letters) for $0.50 per correct answer' option_B='Task 3 (counting letter p in a string of 25 letters) for $[ ] per correct answer' elif self.player.active_question==11: option_A='Task 2 (counting letter d in a string of 25 letters) for $0.50 per correct answer' option_B='Task 6 (adding two 3-digit numbers, such as 487+185) for $[ ] per correct answer' elif self.player.active_question==12: option_A='Task 2 (counting letter d in a string of 25 letters) for $0.50 per correct answer' option_B='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $[ ] per correct answer' return{ 'option_A' : option_A, 'option_B' : option_B, 'current_round' : self.round_number-16 } def before_next_page(self): if self.player.active_question==1: self.participant.vars['rate_2']=self.player.decission elif self.player.active_question==2: self.participant.vars['rate_3']=self.player.decission elif self.player.active_question==3: self.participant.vars['rate_4']=self.player.decission elif self.player.active_question==4: self.participant.vars['rate_6']=self.player.decission elif self.player.active_question==5: self.participant.vars['rate_7']=self.player.decission elif self.player.active_question==6: self.participant.vars['rate_8']=self.player.decission self.participant.vars['rate_1']=0.5 self.participant.vars['rate_5']=0.5 class MyPage_p3_6(Page): def is_displayed(self): return [self.round_number ==29][0] class MyPage_p4_0(Page): def is_displayed(self): return [self.round_number >= 30 and self.round_number <= 32][0] form_model="player" def get_form_fields(self): return ['answer_1', 'answer_2', 'answer_3', 'answer_4',] def answer_1_choices(self): if self.player.treatment_1==1: choices=[ [1, 'The Option chosen by the computer for me'], [2, 'The Option that I chose for myself'], [3, 'It will be randomly selected'], ] elif self.player.treatment_1==0: choices=[ [1, 'The Option chosen by the A player for me'], [2, 'The Option that I chose for myself'], [3, 'It will be randomly selected'], ] return choices def answer_2_choices(self): if self.round_number==30: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $1.95'], [3, 'I have to pay $2.50'], [4, 'I have to pay a random price'], ] elif self.subsession.round_number==31: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $1.95'], [3, 'I have to pay, but price is kept secret'], ] elif self.subsession.round_number==32: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $1.95'], [3, 'I have to pay $7.00'], [4, 'I have to pay, but price is kept secret'], ] return choices def answer_3_choices(self): if self.player.treatment_1==1: choices=[ [1, 'The Option chosen by the computer for me'], [2, 'The Option that I chose for myself'], [3, 'It will be randomly selected'], ] elif self.player.treatment_1==0: choices=[ [1, 'The Option chosen by the A player for me'], [2, 'The Option that I chose for myself'], [3, 'It will be randomly selected'], ] return choices def answer_4_choices(self): if self.round_number==30: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $5.15'], [3, 'I have to pay $2.50'], [4, 'I have to pay, but price is kept secret'], ] elif self.subsession.round_number==31: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $5.15'], [3, 'I have to pay, but price is kept secret'], ] elif self.subsession.round_number==32: choices=[ [1, 'I do not have to pay anything'], [2, 'I have to pay $5.15'], [3, 'I have to pay $7.00'], [4, 'I have to pay, but price is kept secret'], ] return choices def vars_for_template(self): option_U="Task 3 (counting letter p in a string of 25 letters) for $0.50 per correct answer" option_V='Task 5 (adding two 2-digit numbers, such as 36+85) for $0.50 per correct answer' option_W='Task 7 (adding two 4-digit numbers, such as 8,936+1,585) for $0.50 per correct answer' if self.round_number==30: filled=2.50 elif self.subsession.round_number==31: filled=0.00 elif self.subsession.round_number==32: filled=7.00 return{ 'option_A' : option_U, 'option_B' : option_V, 'option_C' : option_W, 'filled' : filled, 'scenario_num': self.subsession.round_number-29 } def before_next_page(self): if self.round_number==30: self.player.check_correct_ans_p_4() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p4_block1'][0]=self.player.n_correct elif self.round_number==31: self.player.check_correct_ans_p_4() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p4_block1'][1]=self.player.n_correct elif self.round_number==32: self.player.check_correct_ans_p_4() for i in range(1, 5): self.player.n_correct += eval("self.player.correct_ans_"+str(i)) self.participant.vars['payment_p4_block1'][2]=self.player.n_correct class after_part_4_block_1(Page): def is_displayed(self): return [ self.round_number ==33][0] class MyPage_p4_1_treatment_1(Page): def is_displayed(self): return [((self.round_number>=33 and self.round_number <(30+len(self.subsession.get_players())+2)) or (self.round_number >(30+len(self.subsession.get_players())+3) and self.round_number <(30+2*len(self.subsession.get_players())+3))) and self.player.type_A==True and self.player.treatment_1==True][0] def vars_for_template(self): if self.player.id_in_group in self.session.vars['group_1']: i=self.subsession.round_number-32 g_1_l=len(self.session.vars['group_1']) if ig_1_l: j=self.subsession.round_number-33-g_1_l-1 if (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==1 and ig_1_l): tasks=[1, 2, 3, 4] task_names=['counting letter b in a string of 25 letters for $0.50', 'counting letter d in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_2']), 'counting letter p in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_3']), 'counting letter q in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_4']), ] if self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']<=4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']) else: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).delete_1) self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_numbers_1']=tasks self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_1']=['Option U: '+task_names[tasks[0]-1], 'Option V:'+task_names[tasks[1]-1], 'Option W: '+task_names[tasks[2]-1]] choices=[ [0, 'Option U:'+task_names[tasks[0]-1]], [1, 'Option V:'+task_names[tasks[1]-1]], [2, 'Option W:'+task_names[tasks[2]-1]], ] self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_comp_1']=self.group.get_player_by_id(self.session.vars['group_1'][j]).comp_draw_p4_op comp_choice=self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_1'][self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_comp_1']] elif (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==2 and ig_1_l): tasks=[5, 6, 7, 8] task_names=['adding two 2-digit numbers, such as 12+83 for $0.50', 'adding two 3-digit numbers, such as 487+185 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_6']), 'adding two 4-digit numbers, such as 8,936+1,585 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_7']), 'adding two 5-digit numbers, such as 53,324+85,342 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_8']), ] if self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']>4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']) else: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).delete_2) self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_numbers_2']=tasks self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_2']=['Option U: '+task_names[tasks[0]-5], 'Option V:'+task_names[tasks[1]-5], 'Option W: '+task_names[tasks[2]-5]] choices=[ [0, 'Option U:'+task_names[tasks[0]-5]], [1, 'Option V:'+task_names[tasks[1]-5]], [2, 'Option W:'+task_names[tasks[2]-5]], ] self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_comp_2']=self.group.get_player_by_id(self.session.vars['group_1'][j]).comp_draw_p4_op comp_choice=self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_2'][self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_comp_2']] if self.round_number <(30+len(self.subsession.get_players())+2): round_num=1 decission_number=self.round_number-32 elif self.round_number >(30+len(self.subsession.get_players())+3): round_num=2 decission_number=self.round_number-(30+len(self.subsession.get_players())+3) return{ 'choices' : choices, "round_num": round_num, "decission_number" : round(decission_number), "group_1" : self.session.vars['group_1'], "comp_choice": comp_choice, "length" : (len(self.session.vars['group_1'])-1) } class MyPage_p4_1_treatment_2(Page): def is_displayed(self): return [((self.round_number>=33 and self.round_number <(30+len(self.subsession.get_players())/2+2)) or (self.round_number >(30+len(self.subsession.get_players())/2+3) and self.round_number <(30+len(self.subsession.get_players())+3))) and self.player.type_A==True and self.player.treatment_1==False][0] form_model="player" def get_form_fields(self): return ['decission_p4_type_A'] def decission_p4_type_A_choices(self): if self.player.id_in_group in self.session.vars['group_1']: i=self.subsession.round_number-32 g_1_l=len(self.session.vars['group_1']) if ig_1_l: j=self.subsession.round_number-33-g_1_l-1 if (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==1 and ig_1_l): tasks=[1, 2, 3, 4] task_names=['counting letter b in a string of 25 letters for $0.50', 'counting letter d in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_2']), 'counting letter p in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_3']), 'counting letter q in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_4']), ] if self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']<=4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']) else: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).delete_1) self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_numbers_1']=tasks self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_1']=['Option U: '+task_names[tasks[0]-1], 'Option V:'+task_names[tasks[1]-1], 'Option W: '+task_names[tasks[2]-1]] choices=[ [0, 'Option U:'+task_names[tasks[0]-1]], [1, 'Option V:'+task_names[tasks[1]-1]], [2, 'Option W:'+task_names[tasks[2]-1]], ] elif (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==2 and ig_1_l): tasks=[5, 6, 7, 8] task_names=['adding two 2-digit numbers, such as 12+83 for $0.50', 'adding two 3-digit numbers, such as 487+185 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_6']), 'adding two 4-digit numbers, such as 8,936+1,585 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_7']), 'adding two 5-digit numbers, such as 53,324+85,342 for $'+str(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['rate_8']), ] if self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']>4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['active_task']) else: tasks.remove(self.group.get_player_by_id(self.session.vars['group_1'][j]).delete_2) self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_numbers_2']=tasks self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['tasks_presented_2']=['Option U: '+task_names[tasks[0]-5], 'Option V:'+task_names[tasks[1]-5], 'Option W: '+task_names[tasks[2]-5]] choices=[ [0, 'Option U:'+task_names[tasks[0]-5]], [1, 'Option V:'+task_names[tasks[1]-5]], [2, 'Option W:'+task_names[tasks[2]-5]], ] elif self.player.id_in_group in self.session.vars['group_2']: i=self.subsession.round_number-32 g_2_l=len(self.session.vars['group_2']) if ig_2_l: j=self.subsession.round_number-33-g_2_l-1 if (self.group.get_player_by_id(self.session.vars['group_2'][j]).part_4_order==1 and ig_2_l): tasks=[1, 2, 3, 4] task_names=['counting letter b in a string of 25 letters for $0.50', 'counting letter d in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_2']), 'counting letter p in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_3']), 'counting letter q in a string of 25 letters for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_4']), ] if self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['active_task']<=4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['active_task']) else: tasks.remove(self.player.delete_1) self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['tasks_numbers_1']=tasks self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['tasks_presented_1']=['Option U: '+task_names[tasks[0]-1], 'Option V:'+task_names[tasks[1]-1], 'Option W: '+task_names[tasks[2]-1]] choices=[ [0, 'Option U:'+task_names[tasks[0]-1]], [1, 'Option V:'+task_names[tasks[1]-1]], [2, 'Option W:'+task_names[tasks[2]-1]], ] elif (self.group.get_player_by_id(self.session.vars['group_2'][j]).part_4_order==2 and ig_2_l): tasks=[5, 6, 7, 8] task_names=['adding two 2-digit numbers, such as 12+83 for $0.50', 'adding two 3-digit numbers, such as 487+185 for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_6']), 'adding two 4-digit numbers, such as 8,936+1,585 for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_7']), 'adding two 5-digit numbers, such as 53,324+85,342 for $'+str(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['rate_8']), ] if self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['active_task']>4: tasks.remove(self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['active_task']) else: tasks.remove(self.group.get_player_by_id(self.session.vars['group_2'][j]).delete_2) self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['tasks_numbers_2']=tasks self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['tasks_presented_2']=['Option U: '+task_names[tasks[0]-5], 'Option V:'+task_names[tasks[1]-5], 'Option W: '+task_names[tasks[2]-5]] choices=[ [0, 'Option U:'+task_names[tasks[0]-5]], [1, 'Option V:'+task_names[tasks[1]-5]], [2, 'Option W:'+task_names[tasks[2]-5]], ] return choices def vars_for_template(self): if self.round_number <(30+len(self.subsession.get_players())+2): round_num=1 decission_number=self.round_number-32 elif self.round_number >(30+len(self.subsession.get_players())+3): round_num=2 decission_number=self.round_number-(30+len(self.subsession.get_players())+3) return{ "round_num": round_num, "decission_number" : round(decission_number), "group_1" : self.session.vars['group_1'], "group_2" : self.session.vars['group_2'], } def before_next_page(self): if self.player.id_in_group in self.session.vars['group_1']: i=self.subsession.round_number-32 g_1_l=len(self.session.vars['group_1']) if ig_1_l: j=self.subsession.round_number-33-g_1_l-1 if (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==1 and ig_1_l): self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_A_1']=self.player.decission_p4_type_A elif (self.group.get_player_by_id(self.session.vars['group_1'][j]).part_4_order==2 and ig_1_l): self.group.get_player_by_id(self.session.vars['group_1'][j]).participant.vars['chosen_by_A_2']=self.player.decission_p4_type_A elif self.player.id_in_group in self.session.vars['group_2']: i=self.subsession.round_number-32 g_2_l=len(self.session.vars['group_2']) if ig_2_l: j=self.subsession.round_number-33-g_2_l-1 if (self.group.get_player_by_id(self.session.vars['group_2'][j]).part_4_order==1 and ig_2_l): self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['chosen_by_A_1']=self.player.decission_p4_type_A elif (self.group.get_player_by_id(self.session.vars['group_2'][j]).part_4_order==2 and ig_2_l): self.group.get_player_by_id(self.session.vars['group_2'][j]).participant.vars['chosen_by_A_2']=self.player.decission_p4_type_A class MyPage_p4_wait_B(WaitPage): def is_displayed(self): return [((self.round_number>=33 and self.round_number <(30+len(self.subsession.get_players())+2)) or (self.round_number >(30+len(self.subsession.get_players())+3) and self.round_number <(30+2*len(self.subsession.get_players())+3))) and self.player.type_A==False ][0] class MyPage_p4_wait_A(WaitPage): def is_displayed(self): return [(self.round_number ==(30+len(self.subsession.get_players())+2) or self.round_number ==(30+2*len(self.subsession.get_players())+3)) and self.player.type_A==True ][0] class MyPage_p4_2(Page): def is_displayed(self): return [(self.round_number ==(30+len(self.subsession.get_players())+2) or self.round_number ==(30+2*len(self.subsession.get_players())+3)) and self.player.type_A==False][0] form_model="player" def get_form_fields(self): return ['decission_p4'] def decission_p4_choices(self): if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks=[1, 2, 3, 4] task_names=['counting letter b in a string of 25 letters for $0.50', 'counting letter d in a string of 25 letters for $'+str(self.participant.vars['rate_2']), 'counting letter p in a string of 25 letters for $'+str(self.participant.vars['rate_3']), 'counting letter q in a string of 25 letters for $'+str(self.participant.vars['rate_4']), ] if self.participant.vars['active_task']<=4: tasks.remove(self.participant.vars['active_task']) else: tasks.remove(self.player.delete_1) choices=[ [0, "Option U: "+task_names[tasks[0]-1]], [1, 'Option V: '+task_names[tasks[1]-1]], [2, 'Option W: '+task_names[tasks[2]-1]], ] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks=[5, 6, 7, 8] task_names=['adding two 2-digit numbers, such as 12+83 for $0.50', 'adding two 3-digit numbers, such as 487+185 for $'+str(self.participant.vars['rate_6']), 'adding two 4-digit numbers, such as 8,936+1,585 for $'+str(self.participant.vars['rate_7']), 'adding two 5-digit numbers, such as 53,324+85,342 for $'+str(self.participant.vars['rate_8']), ] if self.participant.vars['active_task']>=5: tasks.remove(self.participant.vars['active_task']) else: tasks.remove(self.player.delete_2) choices=[ [0, 'Option U: '+task_names[tasks[0]-5]], [1, 'Option V: '+task_names[tasks[1]-5]], [2, 'Option W: '+task_names[tasks[2]-5]], ] return choices def before_next_page(self): if self.player.treatment_1==True: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): self.player.comp_choice=self.participant.vars['chosen_by_comp_1'] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): self.player.comp_choice=self.participant.vars['chosen_by_comp_2'] elif self.player.treatment_1==False: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): self.player.comp_choice=self.participant.vars['chosen_by_A_1'] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): self.player.comp_choice=self.participant.vars['chosen_by_A_2'] def vars_for_template(self): if self.player.treatment_1==True: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_comp_1']] tasks_presented=self.participant.vars['tasks_presented_1'] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_comp_2']] tasks_presented=self.participant.vars['tasks_presented_2'] elif self.player.treatment_1==False: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_A_1']] tasks_presented=self.participant.vars['tasks_presented_1'] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_A_2']] tasks_presented=self.participant.vars['tasks_presented_2'] if self.round_number ==(30+len(self.subsession.get_players())+2): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+3): i=2 return{ "round_num" : i, 'comp_choice' : comp_choice, "group_1" : self.session.vars['group_1'], "tasks_presented" : tasks_presented, } class MyPage_p4_3(Page): def is_displayed(self): return [(self.round_number ==(30+len(self.subsession.get_players())+2) or self.round_number ==(30+2*len(self.subsession.get_players())+3)) and self.player.type_A==False][0] form_model="player" def get_form_fields(self): return ['max_payment'] def vars_for_template(self): if self.player.treatment_1==True: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks_presented=self.participant.vars['tasks_presented_1'] your_choice=self.participant.vars['tasks_presented_1'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_comp_1']] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks_presented=self.participant.vars['tasks_presented_2'] your_choice=self.participant.vars['tasks_presented_2'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_comp_2']] elif self.player.treatment_1==False: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks_presented=self.participant.vars['tasks_presented_1'] your_choice=self.participant.vars['tasks_presented_1'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_A_1']] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): tasks_presented=self.participant.vars['tasks_presented_2'] your_choice=self.participant.vars['tasks_presented_2'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_A_2']] if self.round_number ==(30+len(self.subsession.get_players())+2): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+3): i=2 return{ 'your_choice' : your_choice, 'comp_choice' : comp_choice, "round_num" : i, 'tasks_presented' : tasks_presented } class MyPage_p4_4(Page): def is_displayed(self): return [(self.round_number ==(30+len(self.subsession.get_players())+2) or self.round_number ==(30+2*len(self.subsession.get_players())+3)) and self.player.type_A==False][0] def vars_for_template(self): if self.player.treatment_1==True: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): your_choice=self.participant.vars['tasks_presented_1'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_comp_1']] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): your_choice=self.participant.vars['tasks_presented_2'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_comp_2']] elif self.player.treatment_1==False: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): your_choice=self.participant.vars['tasks_presented_1'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_1'][self.participant.vars['chosen_by_A_1']] elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): your_choice=self.participant.vars['tasks_presented_2'][self.player.decission_p4] comp_choice=self.participant.vars['tasks_presented_2'][self.participant.vars['chosen_by_A_2']] if self.round_number ==(30+len(self.subsession.get_players())+2): i=1 elif self.round_number ==(30+2*len(self.subsession.get_players())+3): i=2 return{ 'your_choice' : your_choice, 'comp_choice' : comp_choice, "round_num" : i } def before_next_page(self): if self.player.treatment_1==True: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): if self.player.max_payment >self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_1']=self.participant.vars['tasks_numbers_1'][self.player.decission_p4] self.participant.vars['who_is_more_1']="the Task you chose for yourself" self.participant.vars['pay_for_task_p4'][0]=self.player.comp_draw_p4_pay elif self.player.max_payment <=self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_1']=self.participant.vars['tasks_numbers_1'][self.participant.vars['chosen_by_comp_1']] self.participant.vars['who_is_more_1']="the Task the computer chose for you" self.participant.vars['pay_for_task_p4'][0]=0 elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): if self.player.max_payment >self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_2']=self.participant.vars['tasks_numbers_2'][self.player.decission_p4] self.participant.vars['who_is_more_2']="the Task you chose for yourself" self.participant.vars['pay_for_task_p4'][1]=self.player.comp_draw_p4_pay elif self.player.max_payment <=self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_2']=self.participant.vars['tasks_numbers_2'][self.participant.vars['chosen_by_comp_2']] self.participant.vars['who_is_more_2']="the Task the computer chose for you" self.participant.vars['pay_for_task_p4'][1]=0 elif self.player.treatment_1==False: if (self.player.part_4_order==1 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==2 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): if self.player.max_payment >self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_1']=self.participant.vars['tasks_numbers_1'][self.player.decission_p4] self.participant.vars['who_is_more_1']="the Task you chose for yourself" self.participant.vars['pay_for_task_p4'][0]=self.player.comp_draw_p4_pay elif self.player.max_payment <=self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_1']=self.participant.vars['tasks_numbers_1'][self.participant.vars['chosen_by_A_1']] self.participant.vars['who_is_more_1']="the Task player A chose for you" self.participant.vars['pay_for_task_p4'][0]=0 elif (self.player.part_4_order==2 and self.round_number ==(30+len(self.subsession.get_players())+2)) or (self.player.part_4_order==1 and self.round_number ==(30+2*len(self.subsession.get_players())+3)): if self.player.max_payment >self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_2']=self.participant.vars['tasks_numbers_2'][self.player.decission_p4] self.participant.vars['who_is_more_2']="the Task you chose for yourself" self.participant.vars['pay_for_task_p4'][1]=self.player.comp_draw_p4_pay elif self.player.max_payment <=self.player.comp_draw_p4_pay: self.participant.vars['active_task_p4_2']=self.participant.vars['tasks_numbers_2'][self.participant.vars['chosen_by_A_2']] self.participant.vars['who_is_more_2']="the Task player A chose for you" self.participant.vars['pay_for_task_p4'][1]=0 class after_part_4_block_2(Page): def is_displayed(self): return [ self.round_number ==(30+2*len(self.subsession.get_players())+4)][0] def before_next_page(self): if self.player.type_A==0: if self.participant.vars["part"]==1: self.participant.payoff=self.participant.vars['payment_p1'][self.participant.vars["round"]-1] elif self.participant.vars["part"]==2: self.participant.payoff=0.5*self.participant.vars['payment_p2'][self.participant.vars["round"]-1] elif self.participant.vars["part"]==3: if self.participant.vars["block"]==1: self.participant.payoff=3*self.participant.vars['payment_p3_block2'][self.participant.vars["round"]-1] elif self.participant.vars["block"]==2: self.participant.payoff=self.participant.vars['payment_p3_block3']*self.participant.vars['rate_{}'.format(self.participant.vars['active_task'])] elif self.participant.vars["part"]==4: if self.participant.vars["block"]==1: self.participant.payoff=3*self.participant.vars['payment_p4_block1'][self.participant.vars["round"]-1] elif self.participant.vars["block"]==2: if self.player.part_4_order==1: self.participant.payoff=self.participant.vars['payment_p4_block2'][self.participant.vars["round"]-1]*self.participant.vars['rate_{}'.format(self.participant.vars['active_task_p4_{}'.format(self.participant.vars["round"])])]+(Constants.endowment-self.participant.vars['pay_for_task_p4'][self.participant.vars["round"]-1]) elif self.player.part_4_order==2: if self.participant.vars["round"]==1: self.participant.payoff=self.participant.vars['payment_p4_block2'][0]*self.participant.vars['rate_{}'.format(self.participant.vars['active_task_p4_2'])]+(Constants.endowment-self.participant.vars['pay_for_task_p4'][1]) elif self.participant.vars["round"]==2: self.participant.payoff=self.participant.vars['payment_p4_block2'][1]*self.participant.vars['rate_{}'.format(self.participant.vars['active_task_p4_1'])]+(Constants.endowment-self.participant.vars['pay_for_task_p4'][0]) elif self.player.type_A==1: self.participant.payoff=15 class questions(Page): def is_displayed(self): return [ self.round_number >=(30+2*len(self.subsession.get_players())+4) and self.round_number <=(30+2*len(self.subsession.get_players())+6)][0] form_model="player" def get_form_fields(self): if self.round_number==(30+2*len(self.subsession.get_players())+4): return ['q_1_school', 'q_2_status', 'q_3_GPA', 'q_4_terms'] elif self.round_number==(30+2*len(self.subsession.get_players())+5): return ['q_5_task_{}'.format(i) for i in range(1, 9) ] elif self.round_number==(30+2*len(self.subsession.get_players())+6): return ['q_6_confusing', 'q_7_feedback' ] def q_1_school_choices(self): choices=[ [1, 'Engineering'], [2, 'Business'], [3, 'Science'], [4, 'Agriculture'], [5, 'Arts'], [6, 'Social science'], [7, 'Other'], ] return choices def q_2_status_choices(self): choices=[ [1, 'Undergraduate student'], [2, 'Graduate student'], [3, 'Other'], ] return choices def q_4_terms_choices(self): choices=[ [1, "Freshman"], [2, "Sophomore"], [3, "Junior"], [4, "Senior"], [5, "I am not an undergraduate student"], ] return choices def vars_for_template(self): if self.round_number==(30+2*len(self.subsession.get_players())+4): i=1 elif self.round_number==(30+2*len(self.subsession.get_players())+5): i=2 elif self.round_number==(30+2*len(self.subsession.get_players())+6): i=3 return{ "round_num" : i } page_sequence = [ MyPage_start, MyPage_p1_0, MyPage_p1_1, MyPage_p1_2, MyPage_p2_1, MyPage_p2_2, MyPage_p2_3, MyPage_p3_1, MyPage_p3_2, MyPage_p3_3, MyPage_p3_4, MyPage_p3_5, MyPage_p3_6, MyPage_p4_0, after_part_4_block_1, MyPage_p4_1_treatment_1, MyPage_p4_1_treatment_2, MyPage_p4_wait_B, MyPage_p4_wait_A, MyPage_p4_2, MyPage_p4_3, MyPage_p4_4, after_part_4_block_2, questions, ]