from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class welcome(Page): form_model = 'player' form_fields = ['email1', 'email2'] def error_message(self,values): print('value is', values) if values['email1'] != values['email2']: return 'two email addresses do not match. Please check your email address.' class Results(Page): pass class page1(Page): form_model = 'player' form_fields = ['test_q1', 'test_q2'] def error_message(self, value): return self.player.set_error_message(value) def before_next_page(self): if self.player.id_in_group >=3: z = [2,3] random.shuffle(z) self.player.o_1 = 1 self.player.o_2 = z[0] self.player.o_3 = z[1] z = [4,5] random.shuffle(z) self.player.o_4 = z[0] self.player.o_5 = z[1] else: z = [1,2,3] random.shuffle(z) while z[0] == 1 or z == [3,2,1]: random.shuffle(z) self.player.o_1 = z[0] self.player.o_2 = z[1] self.player.o_3 = z[2] z = [4,5] random.shuffle(z) self.player.o_4 = z[0] self.player.o_5 = z[1] self.player.o_a = random.randint(2,4) self.player.s1 = random.randint(0,1) self.player.s2 = random.randint(0,1) self.player.s3 = random.randint(0,1) self.player.s4 = random.randint(0,1) self.player.s5 = random.randint(0,1) self.player.sc = random.randint(0,1) class page_ac2(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 2 class page_ac3(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 3 class page_ac4(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 4 class page_ac5(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 5 class page_ac6(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 6 class page_ac7(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 7 class page_ac8(Page): form_model = 'player' form_fields = ['optionah','optionat'] def is_displayed(self): return self.player.o_a == 8 class task1(Page): form_model = 'player' form_fields = ['option1'] def vars_for_template(self): mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(self.player.o_1-1) + self.player.s1][0] a2 = mat[2*(self.player.o_1-1) + self.player.s1][1] a3 = mat[2*(self.player.o_1-1) + self.player.s1][2] a4 = mat[2*(self.player.o_1-1) + self.player.s1][3] a5 = mat[2*(self.player.o_1-1) + self.player.s1][4] a6 = mat[2*(self.player.o_1-1) + self.player.s1][5] a7 = mat[2*(self.player.o_1-1) + self.player.s1][6] a8 = mat[2*(self.player.o_1-1) + self.player.s1][7] b1 = mat[2*(self.player.o_1-1) - self.player.s1+1][0] b2 = mat[2*(self.player.o_1-1) - self.player.s1+1][1] b3 = mat[2*(self.player.o_1-1) - self.player.s1+1][2] b4 = mat[2*(self.player.o_1-1) - self.player.s1+1][3] b5 = mat[2*(self.player.o_1-1) - self.player.s1+1][4] b6 = mat[2*(self.player.o_1-1) - self.player.s1+1][5] b7 = mat[2*(self.player.o_1-1) - self.player.s1+1][6] b8 = mat[2*(self.player.o_1-1) - self.player.s1+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) class task2(Page): form_model = 'player' form_fields = ['option2'] def vars_for_template(self): k1 = self.player.o_2 k2 = self.player.s2 mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(k1-1) + k2][0] a2 = mat[2*(k1-1) + k2][1] a3 = mat[2*(k1-1) + k2][2] a4 = mat[2*(k1-1) + k2][3] a5 = mat[2*(k1-1) + k2][4] a6 = mat[2*(k1-1) + k2][5] a7 = mat[2*(k1-1) + k2][6] a8 = mat[2*(k1-1) + k2][7] b1 = mat[2*(k1-1) - k2+1][0] b2 = mat[2*(k1-1) - k2+1][1] b3 = mat[2*(k1-1) - k2+1][2] b4 = mat[2*(k1-1) - k2+1][3] b5 = mat[2*(k1-1) - k2+1][4] b6 = mat[2*(k1-1) - k2+1][5] b7 = mat[2*(k1-1) - k2+1][6] b8 = mat[2*(k1-1) - k2+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) class task3(Page): form_model = 'player' form_fields = ['option3'] def vars_for_template(self): k1 = self.player.o_3 k2 = self.player.s3 mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(k1-1) + k2][0] a2 = mat[2*(k1-1) + k2][1] a3 = mat[2*(k1-1) + k2][2] a4 = mat[2*(k1-1) + k2][3] a5 = mat[2*(k1-1) + k2][4] a6 = mat[2*(k1-1) + k2][5] a7 = mat[2*(k1-1) + k2][6] a8 = mat[2*(k1-1) + k2][7] b1 = mat[2*(k1-1) - k2+1][0] b2 = mat[2*(k1-1) - k2+1][1] b3 = mat[2*(k1-1) - k2+1][2] b4 = mat[2*(k1-1) - k2+1][3] b5 = mat[2*(k1-1) - k2+1][4] b6 = mat[2*(k1-1) - k2+1][5] b7 = mat[2*(k1-1) - k2+1][6] b8 = mat[2*(k1-1) - k2+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) class task4(Page): form_model = 'player' form_fields = ['option4'] def vars_for_template(self): k1 = self.player.o_4 k2 = self.player.s4 mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(k1-1) + k2][0] a2 = mat[2*(k1-1) + k2][1] a3 = mat[2*(k1-1) + k2][2] a4 = mat[2*(k1-1) + k2][3] a5 = mat[2*(k1-1) + k2][4] a6 = mat[2*(k1-1) + k2][5] a7 = mat[2*(k1-1) + k2][6] a8 = mat[2*(k1-1) + k2][7] b1 = mat[2*(k1-1) - k2+1][0] b2 = mat[2*(k1-1) - k2+1][1] b3 = mat[2*(k1-1) - k2+1][2] b4 = mat[2*(k1-1) - k2+1][3] b5 = mat[2*(k1-1) - k2+1][4] b6 = mat[2*(k1-1) - k2+1][5] b7 = mat[2*(k1-1) - k2+1][6] b8 = mat[2*(k1-1) - k2+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) class task5(Page): form_model = 'player' form_fields = ['option5'] def vars_for_template(self): k1 = self.player.o_5 k2 = self.player.s5 mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(k1-1) + k2][0] a2 = mat[2*(k1-1) + k2][1] a3 = mat[2*(k1-1) + k2][2] a4 = mat[2*(k1-1) + k2][3] a5 = mat[2*(k1-1) + k2][4] a6 = mat[2*(k1-1) + k2][5] a7 = mat[2*(k1-1) + k2][6] a8 = mat[2*(k1-1) + k2][7] b1 = mat[2*(k1-1) - k2+1][0] b2 = mat[2*(k1-1) - k2+1][1] b3 = mat[2*(k1-1) - k2+1][2] b4 = mat[2*(k1-1) - k2+1][3] b5 = mat[2*(k1-1) - k2+1][4] b6 = mat[2*(k1-1) - k2+1][5] b7 = mat[2*(k1-1) - k2+1][6] b8 = mat[2*(k1-1) - k2+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) class passing(Page): def before_next_page(self): a1 = [0]*19 a1[self.player.o_1] = self.player.option1 a1[self.player.o_2] = self.player.option2 a1[self.player.o_3] = self.player.option3 a1[self.player.o_4] = self.player.option4 a1[self.player.o_5] = self.player.option5 self.player.c1 = a1[1] self.player.c2 = a1[2] self.player.c3 = a1[3] self.player.c4 = a1[4] self.player.c5 = a1[5] self.player.cch = self.player.optionah self.player.cct = self.player.optionat self.player.qtp = random.randint(1,5) self.player.qtp2 = random.randint(1,6) self.player.coin1 = random.randint(0,1) self.player.coin2 = random.randint(0,1) b1 = [0]*19 b1[self.player.o_1] = self.player.s1 b1[self.player.o_2] = self.player.s2 b1[self.player.o_3] = self.player.s3 b1[self.player.o_4] = self.player.s4 b1[self.player.o_5] = self.player.s5 self.player.ss = 2 self.player.ss = b1[self.player.qtp] pays = [ [[18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10]],\ [[18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0]],\ [[18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0]],\ [[5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0]],\ [[5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0]],\ ] #the following if decides event if self.player.coin1 == 0 and self.player.coin2 == 0: self.player.event = 'TT' elif self.player.coin1 == 0 and self.player.coin2 == 1: self.player.event = 'TH' elif self.player.coin1 == 1 and self.player.coin2 == 0: self.player.event = 'HT' else: self.player.event = 'HH' ss = 3 - self.player.coin1 * 2 - self.player.coin2 #the following if decides payment i = 0 while i<= 17: if self.player.qtp == i + 1: if a1[i+1] == 1: self.player.dtp = "A" self.player.payA = pays[i][b1[i+1]][ss*2] self.player.payB = pays[i][b1[i+1]][ss*2 + 1] else: self.player.dtp = "B" self.player.payA = pays[i][-1 - b1[i+1]][ss*2] self.player.payB = pays[i][-1 - b1[i+1]][ss*2 + 1] i = i + 1 #the following if decides whether to switch payment to attention check question if self.player.qtp2 == 1: if self.player.sc == 0: if self.player.event == "HH" or self.player.event == "HT": if self.player.cch == 1: self.player.dtp = "A" if self.player.event == "HH": self.player.payA = 18 self.player.payB = 2 elif self.player.event == "HT": self.player.payA = 0 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 0 else: self.player.dtp = "B" if self.player.event == "HH": self.player.payA = 18 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 0 else: if self.player.cct == 1: self.player.dtp = "A" if self.player.event == "TT": self.player.payA = 18 self.player.payB = 2 elif self.player.event == "TH": self.player.payA = 0 self.player.payB = 0 else: self.player.payA = 0 self.player.payB = 0 else: self.player.dtp = "B" if self.player.event == "TT": self.player.payA = 18 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 2 else: if self.player.event == "HH" or self.player.event == "HT": if self.player.cch == 1: self.player.dtp = "N/A" if self.player.event == "HH": self.player.payA = 18 self.player.payB = 2 elif self.player.event == "HT": self.player.payA = 0 self.player.payB = 0 else: self.player.payA = 0 self.player.payB = 0 else: self.player.dtp = "N/A" if self.player.event == "HH": self.player.payA = 18 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 2 else: if self.player.cct == 1: self.player.dtp = "N/A" if self.player.event == "TT": self.player.payA = 18 self.player.payB = 2 elif self.player.event == "TH": self.player.payA = 0 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 0 else: self.player.dtp = "N/A" if self.player.event == "TT": self.player.payA = 18 self.player.payB = 2 else: self.player.payA = 0 self.player.payB = 0 self.player.payA = self.player.payA + 5 self.player.payB = self.player.payB + 5 if self.player.qtp2 == 1: if self.player.cch == 1: self.player.dtph = "A" else: self.player.dtph = "B" if self.player.cct == 1: self.player.dtpt = "A" else: self.player.dtpt = "B" class result_page1_ac(Page): def is_displayed(self): return self.player.qtp2 == 1 class result_page1(Page): def vars_for_template(self): k1 = self.player.qtp k2 = self.player.ss mat = [ [18,2,18,2,18,2,18,2],[10,10,10,10,10,10,10,10],\ [18,2,18,0,0,2,0,0],[10,10,10,0,0,10,0,0],\ [18,2,18,0,0,0,0,2],[0,0,10,10,0,10,10,0],\ [5,0,5,0,5,0,15,0],[0,0,10,0,10,0,10,0],\ [5,0,5,0,5,0,15,0],[10,0,10,0,10,0,0,0],\ ] a1 = mat[2*(k1-1) + k2][0] a2 = mat[2*(k1-1) + k2][1] a3 = mat[2*(k1-1) + k2][2] a4 = mat[2*(k1-1) + k2][3] a5 = mat[2*(k1-1) + k2][4] a6 = mat[2*(k1-1) + k2][5] a7 = mat[2*(k1-1) + k2][6] a8 = mat[2*(k1-1) + k2][7] b1 = mat[2*(k1-1) - k2+1][0] b2 = mat[2*(k1-1) - k2+1][1] b3 = mat[2*(k1-1) - k2+1][2] b4 = mat[2*(k1-1) - k2+1][3] b5 = mat[2*(k1-1) - k2+1][4] b6 = mat[2*(k1-1) - k2+1][5] b7 = mat[2*(k1-1) - k2+1][6] b8 = mat[2*(k1-1) - k2+1][7] return dict( a1="$"+str(a1), a2="$"+str(a2), a3="$"+str(a3), a4="$"+str(a4), a5="$"+str(a5), a6="$"+str(a6), a7="$"+str(a7), a8="$"+str(a8), b1="$"+str(b1), b2="$"+str(b2), b3="$"+str(b3), b4="$"+str(b4), b5="$"+str(b5), b6="$"+str(b6), b7="$"+str(b7), b8="$"+str(b8), ) def is_displayed(self): return self.player.qtp2 != 1 class page7(Page): timeout_seconds = 7 def is_displayed(self): return self.player.qtp >1 or self.player.qtp2 == 1 class page8(Page): def is_displayed(self): return self.player.qtp >1 or self.player.qtp2 == 1 page_sequence = [ welcome, page1, task1, page_ac2, task2, page_ac3, task3, page_ac4, task4, page_ac5, task5, page_ac6, passing, result_page1_ac, result_page1, page7, page8 ]