from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = '_Consent_Form' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): import itertools if subsession.round_number == 1: treatments = itertools.cycle(['Assignment', 'Transparency', 'SelfSelection']) for player in subsession.get_players(): treatment_group = next(treatments) player.participant.vars['treatment'] = treatment_group player.treatment_group = treatment_group class Group(BaseGroup): pass class Player(BasePlayer): treatment_group = models.StringField() Consent_1 = models.BooleanField(label='I have read and understood this consent form.', choices=[[True, 'Yes'], [False, 'No']], widget=widgets.RadioSelectHorizontal) Consent_2 = models.BooleanField(label='I agree to participate in this study.', choices=[[True, 'Yes'], [False, 'No']], widget=widgets.RadioSelectHorizontal) result = models.BooleanField() AnswerNumber_1 = models.IntegerField(min=0, max=12, label='', blank=True) AnswerNumber_2 = models.IntegerField(min=0, max=12, label='', blank=True) sum_of_numbers_1 = models.IntegerField() sum_of_numbers_2 = models.IntegerField() incorrect_AnswerNumber_1 = models.IntegerField(initial=0) incorrect_AnswerNumber_2 = models.IntegerField(initial=0) Prolific_Number = models.StringField(label='Please enter your Prolific ID') class ConsentForm(Page): form_model = 'player' form_fields = ['Consent_1', 'Consent_2'] def before_next_page(player, timeout_happened): player.result = player.Consent_1 and player.Consent_2 class NoConsent(Page): def is_displayed(player): return not player.result class Prolific(Page): form_model = 'player' form_fields = ['Prolific_Number'] class Task(Page): form_model = 'player' form_fields = ['AnswerNumber_1', 'AnswerNumber_2'] def vars_for_template(player: Player): random.seed(10) numbers = [random.randint(0, 1) for _ in range(30)] # Easy _Task player.sum_of_numbers_1 = sum(numbers[0:9]) # Difficult _Task player.sum_of_numbers_2 = sum(numbers[12:30]) data = {f"number_{i + 1}": num for i, num in enumerate(numbers)} return data def AnswerNumber_1_error_message(player, value): if value != player.sum_of_numbers_1: player.incorrect_AnswerNumber_1 += 1 return ('Your answer is not correct, please count again
' '(This hint will not be shown in the real experiment)') def AnswerNumber_2_error_message(player, value): if value != player.sum_of_numbers_2: player.incorrect_AnswerNumber_2 += 1 return ('Your answer is not correct, please count again
' '(This hint will not be shown in the real experiment)') # PAGES class MyPage(Page): pass class ResultsWaitPage(WaitPage): pass class Results(Page): pass page_sequence = [ConsentForm, NoConsent, Prolific, Task]