from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'quiz' PLAYERS_PER_GROUP = None NUM_ROUNDS = 3 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): round = subsession.round_number if round == 1: for p in subsession.get_players(): p.participant.quizDone = False class Group(BaseGroup): pass class Player(BasePlayer): participant_label = models.StringField(initial="0") failed = models.BooleanField(initial=False) q1 = models.StringField(widget=widgets.RadioSelect, choices=["£X", "£Y", "They are equally likely", "Not enough information"]) q2 = models.StringField(widget=widgets.RadioSelect, choices=["USA", "France", "Sweden", "Canada", "United Kingdom", "Germany"]) q3 = models.StringField(widget=widgets.RadioSelect, choices=["True", "False", "I don't know", "Not enough information"]) q4 = models.StringField(widget=widgets.RadioSelect, choices=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]) # PAGES class Quiz(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4'] @staticmethod def is_displayed(player): return player.participant.quizDone == False @staticmethod def before_next_page(player, timeout_happened): player.participant_label = player.participant.label ## You write the correct answers here if (player.q1 == "£X") and (player.q2 == "United Kingdom") and (player.q3 == "True") and (player.q4 == "December"): player.participant.quizDone = True else: player.participant.quizDone = False if player.round_number == C.NUM_ROUNDS: player.failed = True player.participant.vars['failed'] = True class FailPage(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4'] @staticmethod def is_displayed(player): return player.failed == True page_sequence = [Quiz, FailPage]