from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random def draw_a_ball(red, black, blue, yellow): urn = red*['red'] + black*['black'] + blue*['blue'] + yellow*['yellow'] drawn_one = random.choice(urn) return drawn_one def ball_payoff(color,red, black, blue, yellow): if color == 'red': you_get = red if color == 'black': you_get = black if color == 'blue': you_get = blue if color == 'yellow': you_get = yellow return you_get class Set1(Page): form_model = 'player' form_fields = ['q1','q2','q3','q4','q5'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set1'] def before_next_page(self): questions_num1 = [1,2,3,4,5] if self.participant.vars['num_for_bonus'] in questions_num1: payoff_AA = [[4,8,4,8],[6,8,4,6],[8,8,4,4],[10,8,4,2],[12,8,4,0]] payoff_BB = [[4,4,8,8],[6,4,8,6],[8,4,8,4],[10,4,8,2],[12,4,8,0]] questions_set1 = [self.player.q1, self.player.q2, self.player.q3, self.player.q4, self.player.q5] number = self.participant.vars['num_for_bonus'] dict_set1 = dict(zip(questions_num1 , questions_set1)) option_choosen = dict_set1[number] #draw a ball from urn ball_color = draw_a_ball(44,6,12,38) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num1, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num1, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set2(Page): form_model = 'player' form_fields = ['q6','q7','q8','q9','q10'] questions_num2 = [6,7,8,9,10] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set2'] def before_next_page(self): questions_num2 = [6,7,8,9,10] if self.participant.vars['num_for_bonus'] in questions_num2: payoff_AA = [[4,8,4,8],[6,8,4,6],[8,8,4,4],[10,8,4,2],[12,8,4,0]] payoff_BB = [[4,4,8,8],[6,4,8,6],[8,4,8,4],[10,4,8,2],[12,4,8,0]] questions_set2 = [self.player.q6, self.player.q7, self.player.q8, self.player.q9, self.player.q10] number = self.participant.vars['num_for_bonus'] dict_set2 = dict(zip(questions_num2 , questions_set2)) option_choosen = dict_set2[number] #draw a ball from urn ball_color= draw_a_ball(22,18,25,35) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num2, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num2, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set3(Page): form_model = 'player' form_fields = ['q11','q12','q13','q14','q15'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set3'] def before_next_page(self): questions_num3 = [11,12,13,14,15] if self.participant.vars['num_for_bonus'] in questions_num3: payoff_AA = [[4,8,4,8],[6,8,4,6],[8,8,4,4],[10,8,4,2],[12,8,4,0]] payoff_BB = [[4,4,8,8],[6,4,8,6],[8,4,8,4],[10,4,8,2],[12,4,8,0]] questions_set3 = [self.player.q11, self.player.q12, self.player.q13, self.player.q14, self.player.q15] number = self.participant.vars['num_for_bonus'] dict_set3 = dict(zip(questions_num3 , questions_set3)) option_choosen = dict_set3[number] #draw a ball from urn ball_color = draw_a_ball(7,23,3,67) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num3, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num3, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set4(Page): form_model = 'player' form_fields = ['q16','q17','q18','q19','q20'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set4'] def before_next_page(self): questions_num4 = [16,17,18,19,20] if self.participant.vars['num_for_bonus'] in questions_num4: payoff_AA = [[4,8,4,8],[6,8,4,6],[8,8,4,4],[10,8,4,2],[12,8,4,0]] payoff_BB = [[4,4,8,8],[6,4,8,6],[8,4,8,4],[10,4,8,2],[12,4,8,0]] questions_set4 = [self.player.q16, self.player.q17, self.player.q18, self.player.q19, self.player.q20] number = self.participant.vars['num_for_bonus'] dict_set4 = dict(zip(questions_num4 , questions_set4)) option_choosen = dict_set4[number] #draw a ball from urn ball_color = draw_a_ball(13,7,50,30) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num4, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num4, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set5(Page): form_model = 'player' form_fields = ['q21','q22'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set5'] def before_next_page(self): questions_num5 = [21,22] if self.participant.vars['num_for_bonus'] in questions_num5: payoff_AA = [[8,8,4,4],[12,8,4,0]] payoff_BB = [[8,4,8,4],[12,4,8,0]] questions_set5 = [self.player.q21, self.player.q22] number = self.participant.vars['num_for_bonus'] dict_set5 = dict(zip(questions_num5 , questions_set5)) option_choosen = dict_set5[number] #draw a ball from urn ball_color = draw_a_ball(17,28,45,10) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num5, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num5, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set6(Page): form_model = 'player' form_fields = ['q23','q24'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set6'] def before_next_page(self): questions_num6 = [23,24] if self.participant.vars['num_for_bonus'] in questions_num6: payoff_AA = [[8,8,4,4],[12,8,4,0]] payoff_BB = [[8,4,8,4],[12,4,8,0]] questions_set6 = [self.player.q23, self.player.q24] number = self.participant.vars['num_for_bonus'] dict_set6 = dict(zip(questions_num6, questions_set6)) option_choosen = dict_set6[number] #draw a ball from urn ball_color = draw_a_ball(6,29,11,54) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num6, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num6, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set7(Page): form_model = 'player' form_fields = ['q25','q26'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set7'] def before_next_page(self): questions_num7 = [25,26] if self.participant.vars['num_for_bonus'] in questions_num7: payoff_AA = [[8,8,4,4],[12,8,4,0]] payoff_BB = [[8,4,8,4],[12,4,8,0]] questions_set7 = [self.player.q25, self.player.q26] number = self.participant.vars['num_for_bonus'] dict_set7 = dict(zip(questions_num7 , questions_set7)) option_choosen = dict_set7[number] #draw a ball from urn ball_color = draw_a_ball(15,10,67,8) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num7, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num7, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set8(Page): form_model = 'player' form_fields = ['q27','q28'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set8'] def before_next_page(self): questions_num8 = [27,28] if self.participant.vars['num_for_bonus'] in questions_num8: payoff_AA = [[8,8,4,4],[12,8,4,0]] payoff_BB = [[8,4,8,4],[12,4,8,0]] questions_set8 = [self.player.q27, self.player.q28] number = self.participant.vars['num_for_bonus'] dict_set8 = dict(zip(questions_num8 , questions_set8)) option_choosen = dict_set8[number] #draw a ball from urn ball_color = draw_a_ball(12,3,38,47) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num8, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num8, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen class Set9(Page): form_model = 'player' form_fields = ['q29','q30'] def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['set9'] def before_next_page(self): questions_num9 = [29,30] if self.participant.vars['num_for_bonus'] in questions_num9: payoff_AA = [[8,8,4,4],[12,8,4,0]] payoff_BB = [[8,4,8,4],[12,4,8,0]] questions_set9 = [self.player.q29, self.player.q30] number = self.participant.vars['num_for_bonus'] dict_set9 = dict(zip(questions_num9 , questions_set9)) option_choosen = dict_set9[number] #draw a ball from urn ball_color = draw_a_ball(0,10,78,12) self.participant.vars['ball_color'] = ball_color if option_choosen == 'Option A': dict_A = dict(zip(questions_num9, payoff_AA)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_A[number]) self.participant.vars['option'] = option_choosen if option_choosen == 'Option B': dict_B = dict(zip(questions_num9, payoff_BB)) self.participant.vars['question_bonus'] = ball_payoff(ball_color, *dict_B[number]) self.participant.vars['option'] = option_choosen page_sequence = [Set1, Set2, Set3, Set4, Set5, Set6, Set7, Set8, Set9]