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]