from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'result_racism' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 Name_All = [ ['Emily Miller', 'Abigail Murphy', 'Samantha Wood', 'Elizabeth Snyder', 'Ashley Wagner', 'Sarah Meyer'], ['Jacob Sullivan', 'Michael Peterson', 'Joshua Stone', 'Matthew Olson', 'Daniel Fisher', 'Christopher Myers'], ['Emma Lin', 'Mia Yang', 'Sophia Chang', 'Chloe Zhang', 'Grace Huang', 'Ella Li'], ['David Liu', 'Ethan Wang', 'Aiden Wu', 'James Chen', 'Mason Kim', 'Edgar Nguyen'], ['Alexis Jefferson', 'Annie Singleton', 'Rosa Williams', 'Lillie Dorsey', 'Aisha Washington', 'Latoya Rivers'], ['Reggie Rivers', 'Cedric Joseph', 'Derrick Mosley', 'Andre Jackson', 'Maurice Banks', 'Tyron Booker']] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): order1 = models.IntegerField() order2 = models.IntegerField() order3 = models.IntegerField() order4 = models.IntegerField() order5 = models.IntegerField() order6 = models.IntegerField() order7 = models.IntegerField() order8 = models.IntegerField() order9 = models.IntegerField() order10 = models.IntegerField() order11 = models.IntegerField() order12 = models.IntegerField() name1 = models.StringField() name2 = models.StringField() name3 = models.StringField() name4 = models.StringField() name5 = models.StringField() name6 = models.StringField() name7 = models.StringField() name8 = models.StringField() name9 = models.StringField() name10 = models.StringField() name11 = models.StringField() name12 = models.StringField() pay_name = models.StringField() pay_name_num = models.IntegerField() pay_name_num_2 = models.IntegerField() pay_task = models.IntegerField() prolificID = models.StringField(label='What is your Prolific ID?') consent = models.IntegerField( choices=[[1, "Consent"], [2, "Do not Consent"]], widget=widgets.RadioSelect ) # comp1 = models.IntegerField( # label='Which one of the followings are true?', # choices=[[1, "You need to know details of the test before you can make a guess."], # [2, "You can make a guess of their score even if you don't know the details of the test."]], # widget=widgets.RadioSelect # ) # comp2 = models.IntegerField( # label='For each task, you will be given the relevant information and submit your guess. Which one of the followings are true?', # choices=[[1, "The correct guess is equal to the information you will receive."], # [2, "The correct guess may be different from the information you will receive."]], # widget=widgets.RadioSelect # ) # PAGES class ProlificID(Page): form_model = 'player' form_fields = ['prolificID'] @staticmethod def is_displayed(player): return player.consent == 1 class Consent1(Page): form_model = 'player' form_fields = ['consent'] class EndPage(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.consent == 2 class InstN1(Page): form_model = 'player' # form_fields = ['comp1', 'comp2'] @staticmethod def is_displayed(player): return player.consent == 1 # only for prolific def before_next_page(player: Player, timeout_happened): x = list(range(1, 13)) random.shuffle(x) a1 = x[0] a4 = x[3] player.order1 = a1 player.order2 = x[1] player.order3 = x[2] player.order4 = a4 player.order5 = x[4] player.order6 = x[5] player.order7 = x[6] player.order8 = x[7] player.order9 = x[8] player.order10 = x[9] player.order11 = x[10] player.order12 = x[11] # if player.participant.id_in_session < 20: #WhiteFM # Name1 = C.Name_All[0] # Name2 = C.Name_All[1] # if player.participant.id_in_session > 19: #WhiteMF # if player.participant.id_in_session < 33: # Name1 = C.Name_All[1] # Name2 = C.Name_All[0] # if player.participant.id_in_session > 34: # if player.participant.id_in_session < 63: #AsianFM # Name1 = C.Name_All[2] # Name2 = C.Name_All[3] if player.participant.id_in_session > 0: if player.participant.id_in_session < 3: #AsianMF Name1 = C.Name_All[3] Name2 = C.Name_All[2] if player.participant.id_in_session > 2: if player.participant.id_in_session < 10: #BlackFM Name1 = C.Name_All[4] Name2 = C.Name_All[5] # if player.participant.id_in_session > 42: # Name1 = C.Name_All[5] # Name2 = C.Name_All[4] # one race random.shuffle(Name1) random.shuffle(Name2) if player.order1 < 7: player.name1 = Name1[0] rows, cols = len(Name1)-1, 1 tmp = [(0*cols) for i in range(rows)] ind1 = list(range(0, len(Name1)-1)) for j in ind1: tmp[j] = Name1[j+1] Name1 = tmp if player.order1 > 6: player.name1 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order2 < 7: player.name2 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order2 > 6: player.name2 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order3 < 7: player.name3 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order3 > 6: player.name3 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order4 < 7: player.name4 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order4 > 6: player.name4 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order5 < 7: player.name5 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order5 > 6: player.name5 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order6 < 7: player.name6 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order6 > 6: player.name6 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order7 < 7: player.name7 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order7 > 6: player.name7 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order8 < 7: player.name8 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order8 > 6: player.name8 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order9 < 7: player.name9 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order9 > 6: player.name9 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order10 < 7: player.name10 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order10 > 6: player.name10 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order11 < 7: player.name11 = Name1[0] rows, cols = len(Name1) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name1) - 1)) for i in ind1: tmp[i] = Name1[i + 1] Name1 = tmp if player.order11 > 6: player.name11 = Name2[0] rows, cols = len(Name2) - 1, 1 tmp = [(0 * cols) for i in range(rows)] ind1 = list(range(0, len(Name2) - 1)) for i in ind1: tmp[i] = Name2[i + 1] Name2 = tmp if player.order12 < 7: player.name12 = Name1[0] if player.order12 > 6: player.name12 = Name2[0] x = [player.name1, player.name2, player.name3, player.name4, player.name5, player.name6, player.name7, player.name8, player.name9, player.name10, player.name11, player.name12] y = [player.order1, player.order2, player.order3, player.order4, player.order5, player.order6, player.order7, player.order8, player.order9, player.order10, player.order11, player.order12] name_tmp = list(range(0, 12)) task_tmp = list(range(0, 7)) random.shuffle(name_tmp) random.shuffle(task_tmp) player.pay_name = x[name_tmp[0]] player.pay_name_num = name_tmp[0] # Shown as name_tmp[0]+1 'th applicant on the screen player.pay_name_num_2 = y[name_tmp[0]]-1 # real ID player.pay_task = task_tmp[0] participant = player.participant participant.pay_name = player.pay_name participant.pay_name_num = player.pay_name_num participant.pay_name_num_2 = player.pay_name_num_2 participant.pay_task = player.pay_task participant.order1 = player.order1 participant.order2 = player.order2 participant.order3 = player.order3 participant.order4 = player.order4 participant.order5 = player.order5 participant.order6 = player.order6 participant.order7 = player.order7 participant.order8 = player.order8 participant.order9 = player.order9 participant.order10 = player.order10 participant.order11 = player.order11 participant.order12 = player.order12 participant.name1 = player.name1 participant.name2 = player.name2 participant.name3 = player.name3 participant.name4 = player.name4 participant.name5 = player.name5 participant.name6 = player.name6 participant.name7 = player.name7 participant.name8 = player.name8 participant.name9 = player.name9 participant.name10 = player.name10 participant.name11 = player.name11 participant.name12 = player.name12 class ResultsWaitPage(WaitPage): pass class Results(Page): pass # class Comp(Page): # form_model = 'player' # # @staticmethod # def vars_for_template(player): # c1 = player.comp1 # c2 = player.comp2 # return dict( # c1=c1, # c2=c2 # ) page_sequence = [Consent1, ProlificID, InstN1, EndPage] # page_sequence = [Consent1, InstN1]