from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'message_pretest' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 Message_1= 'Congratulations.You have transcribed a total of X(Y) symbols(strings) correct!' Message_2 = 'You can do better. You have only transcribed X(Y) symbols(strings) correct.' Message_3 = 'You have transcribed X(Y) symbols(strings) correct up to this point. ' Message_4 = 'Congratulations. If you slow down a little, your accuracy may improve.' Message_5 = 'You can do better. Slow down a little, your accuracy may improve.' Message_6 = 'If you slow down a little, your accuracy may improve.' Message_7 = 'Congratulations. Even if you speed up, you still can maintain accuracy.' Message_8 = 'You can do better. Speed up, you can still maintain accuracy.' Message_9 = 'Even if you speed up, you can still maintain accuracy.' Message_10 = 'Congratulations. I believe you can do even better in the next round!' Message_11 = 'You can do better. That should not be too hard to do.' Message_12 = 'Do you think you can do better in the next round?' Message_list1 = [Message_2, Message_12, Message_6, Message_7, Message_5, Message_4, Message_1, Message_10, Message_11, Message_3, Message_9, Message_8] Message_list2 = [Message_7, Message_12, Message_10, Message_11, Message_3, Message_6, Message_8, Message_9, Message_1, Message_4, Message_5, Message_2] Message_list3 = [Message_10, Message_1, Message_7, Message_9, Message_12, Message_8, Message_11, Message_4, Message_6, Message_2, Message_5, Message_3] Message_list4 = [Message_12, Message_8, Message_3, Message_7, Message_2, Message_6, Message_1, Message_4, Message_9, Message_11, Message_5, Message_10] Message_list5 = [Message_11, Message_2, Message_4, Message_3, Message_6, Message_8, Message_5, Message_9, Message_10, Message_1, Message_7, Message_12] PAPERCUPS_TEMPLATE = __name__ + '/papercups.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): attention = models.IntegerField(min=0, max=1, initial=0) Num_Attempts = models.IntegerField(initial=1) Attention_content = models.IntegerField() List_number = models.IntegerField(initial=0) ProlificID = models.StringField() ProlificID_2 = models.StringField() Gender = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Male'], [2, 'Female'], [3, 'Non-binary / gender diverse'], [4, 'Prefer not to say']]) # Referring to US CPS survey Race = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'White '], [2, 'Black or African American'], [3, 'American Indian or Alaska Native'], [4, 'Asian'], [5, 'Native Hawaiian or Other Pacific Islander'], [6, 'Other']]) YOB = models.IntegerField(min=1923, max=2023) Nationality = models.StringField() # Referring to US CPS survey Education = models.StringField(widget=widgets.RadioSelect, choices=['Less than High School', 'High school completion', "Some colleges or associate's degree", "Bachelor's degree", 'Advanced degree']) enroll = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Yes'], [0, 'No']]) Comprehension_1 = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '2 rounds'], [2, '5 rounds'], [3, '10 rounds'], [4, '6 rounds']]) Comprehension_2 = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '24 ECUs'], [2, '16 ECUs'], [3, '32 ECUs'], [4, '10 ECUs']]) Comprehension_3 = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '$ 4.00'], [2, '$ 2.00'], [3, '$ 5.00'], [4, '$ 3.00']]) Belief_1 = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Males'], [2, 'Females'], [3, 'No difference']]) Belief_2a = models.IntegerField(min=0, max=200) Belief_2b = models.IntegerField(min=0, max=200) Belief_2c = models.IntegerField(min=0, max=200) Guess_1a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_1b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_1c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_2a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_2b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_2c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_3a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_3b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_3c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_4a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_4b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_4c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_5a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_5b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_5c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_6a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_6b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_6c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_7a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_7b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_7c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_8a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_8b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_8c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_9a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_9b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_9c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_10a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_10b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_10c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_11a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_11b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_11c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) Guess_12a = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely negative'], [2, '2 = Somewhat negative'], [3, '3 = Neutral, neither negative nor positive'], [4, '4 = Somewhat positive'], [5, '5 = Extremely positive']]) Guess_12b = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely unconstructive'], [2, '2 = Somewhat unconstructive'], [3, '3 = Neutral, neither constructive nor unconstructive'], [4, '4 = Somewhat constructive'], [5, '5 = Extremely constructive']]) Guess_12c = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '1 = Extremely subjective'], [2, '2 = Somewhat subjective'], [3, '3 = Neutral, neither subjective nor objective'], [4, '4 = Somewhat objective'], [5, '5 = Extremely objective']]) # PAGES class Consent(Page): form_model = 'player' form_fields = ['ProlificID', 'enroll'] class Consent_Completion(Page): @staticmethod def is_displayed(player): return player.enroll == 0 class General_Instruction(Page): @staticmethod def is_displayed(player): return player.enroll == 1 class Comprehension_test(Page): form_model = 'player' form_fields = ['Comprehension_1', 'Comprehension_2', 'Comprehension_3'] @staticmethod def is_displayed(player): return player.enroll == 1 @staticmethod def error_message(player: Player, values): solutions = dict(Comprehension_1=2, Comprehension_2=1, Comprehension_3=4) if values != solutions: player.Num_Attempts += 1 return "One or more answers were incorrect." class Attention_check(Page): form_model = 'player' form_fields = ['Attention_content'] @staticmethod def is_displayed(player): return player.enroll == 1 @staticmethod def before_next_page(player, timeout_happened): if player.Attention_content == 3: player.attention += 1 class Attention_Completion(Page): @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 0 class Task1(Page): form_model = 'player' form_fields = ['Belief_1', 'Belief_2a', 'Belief_2b', 'Belief_2c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def error_message(player, values): if values['Belief_2a'] + values['Belief_2b'] + values['Belief_2c'] != 200: return 'The total must sum up to 200 for question 2' class Task2(Page): @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def before_next_page(player, timeout_happened): player.List_number=random.randint(1,5) class Message_1(Page): form_model = 'player' form_fields = ['Guess_1a', 'Guess_1b', 'Guess_1c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[0]) elif player.List_number == 2: return dict(Message=C.Message_list2[0]) elif player.List_number == 3: return dict(Message=C.Message_list3[0]) elif player.List_number == 4: return dict(Message=C.Message_list4[0]) else: return dict(Message=C.Message_list5[0]) class Message_2(Page): form_model = 'player' form_fields = ['Guess_2a', 'Guess_2b', 'Guess_2c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[1]) elif player.List_number == 2: return dict(Message=C.Message_list2[1]) elif player.List_number == 3: return dict(Message=C.Message_list3[1]) elif player.List_number == 4: return dict(Message=C.Message_list4[1]) else: return dict(Message=C.Message_list5[1]) class Message_3(Page): form_model = 'player' form_fields = ['Guess_3a', 'Guess_3b', 'Guess_3c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[2]) elif player.List_number == 2: return dict(Message=C.Message_list2[2]) elif player.List_number == 3: return dict(Message=C.Message_list3[2]) elif player.List_number == 4: return dict(Message=C.Message_list4[2]) else: return dict(Message=C.Message_list5[2]) class Message_4(Page): form_model = 'player' form_fields = ['Guess_4a', 'Guess_4b', 'Guess_4c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[3]) elif player.List_number == 2: return dict(Message=C.Message_list2[3]) elif player.List_number == 3: return dict(Message=C.Message_list3[3]) elif player.List_number == 4: return dict(Message=C.Message_list4[3]) else: return dict(Message=C.Message_list5[3]) class Message_5(Page): form_model = 'player' form_fields = ['Guess_5a', 'Guess_5b', 'Guess_5c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[4]) elif player.List_number == 2: return dict(Message=C.Message_list2[4]) elif player.List_number == 3: return dict(Message=C.Message_list3[4]) elif player.List_number == 4: return dict(Message=C.Message_list4[4]) else: return dict(Message=C.Message_list5[4]) class Message_6(Page): form_model = 'player' form_fields = ['Guess_6a', 'Guess_6b', 'Guess_6c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[5]) elif player.List_number == 2: return dict(Message=C.Message_list2[5]) elif player.List_number == 3: return dict(Message=C.Message_list3[5]) elif player.List_number == 4: return dict(Message=C.Message_list4[5]) else: return dict(Message=C.Message_list5[5]) class Message_7(Page): form_model = 'player' form_fields = ['Guess_7a', 'Guess_7b', 'Guess_7c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message = C.Message_list1[6]) elif player.List_number == 2: return dict(Message=C.Message_list2[6]) elif player.List_number == 3: return dict(Message=C.Message_list3[6]) elif player.List_number == 4: return dict(Message=C.Message_list4[6]) else: return dict(Message=C.Message_list5[6]) class Message_8(Page): form_model = 'player' form_fields = ['Guess_8a', 'Guess_8b', 'Guess_8c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message=C.Message_list1[7]) elif player.List_number == 2: return dict(Message=C.Message_list2[7]) elif player.List_number == 3: return dict(Message=C.Message_list3[7]) elif player.List_number == 4: return dict(Message=C.Message_list4[7]) else: return dict(Message=C.Message_list5[7]) class Message_9(Page): form_model = 'player' form_fields = ['Guess_9a', 'Guess_9b', 'Guess_9c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message=C.Message_list1[8]) elif player.List_number == 2: return dict(Message=C.Message_list2[8]) elif player.List_number == 3: return dict(Message=C.Message_list3[8]) elif player.List_number == 4: return dict(Message=C.Message_list4[8]) else: return dict(Message=C.Message_list5[8]) class Message_10(Page): form_model = 'player' form_fields = ['Guess_10a', 'Guess_10b', 'Guess_10c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message=C.Message_list1[9]) elif player.List_number == 2: return dict(Message=C.Message_list2[9]) elif player.List_number == 3: return dict(Message=C.Message_list3[9]) elif player.List_number == 4: return dict(Message=C.Message_list4[9]) else: return dict(Message=C.Message_list5[9]) class Message_11(Page): form_model = 'player' form_fields = ['Guess_11a', 'Guess_11b', 'Guess_11c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message=C.Message_list1[10]) elif player.List_number == 2: return dict(Message=C.Message_list2[10]) elif player.List_number == 3: return dict(Message=C.Message_list3[10]) elif player.List_number == 4: return dict(Message=C.Message_list4[10]) else: return dict(Message=C.Message_list5[10]) class Message_12(Page): form_model = 'player' form_fields = ['Guess_12a', 'Guess_12b', 'Guess_12c'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 @staticmethod def vars_for_template(player): if player.List_number == 1: return dict(Message=C.Message_list1[11]) elif player.List_number == 2: return dict(Message=C.Message_list2[11]) elif player.List_number == 3: return dict(Message=C.Message_list3[11]) elif player.List_number == 4: return dict(Message=C.Message_list4[11]) else: return dict(Message=C.Message_list5[11]) class Survey(Page): form_model = 'player' form_fields = ['Gender', 'Race', 'YOB', 'Nationality', 'Education', 'ProlificID_2'] @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 class End_Page(Page): @staticmethod def is_displayed(player): return player.enroll == 1 and player.attention == 1 page_sequence = [Consent, Consent_Completion, General_Instruction, Comprehension_test, Attention_check, Attention_Completion, Task1, Task2, Message_1, Message_2, Message_3, Message_4, Message_5, Message_6, Message_7, Message_8, Message_9, Message_10, Message_11, Message_12, Survey, End_Page]