from otree.api import * doc = """ Instruction of Entire Experiment """ class C(BaseConstants): NAME_IN_URL = 'instruction_entire' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 q1_answer = 3 q2_answer = 3 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): q1 = models.IntegerField(label = "[問1] この実験で行うタスクはいくつありますか?") q2 = models.IntegerField(choices = [[1, '全タスクでの総獲得ポイントが1ポイント5円として支払われる'], [2, '全タスクでの総獲得ポイントが1ポイント1円として支払われる'], [3, '全タスクから1つのタスクが無作為に選ばれる。選ばれたタスクにおける支払対象獲得ポイントが1ポイント1円として支払われる。'], [4, '全タスクから1つのタスクが無作為に選ばれる。選ばれたタスクにおける総獲得ポイントが1ポイント1円として支払われる。']], widget = widgets.RadioSelect, label = "[問2] 実験が全て終わった後、あなたの獲得報酬額のうち、参加報酬500円に追加して支払われる部分の金額はどのように決まりますか?" ) num_failed_attempts = models.IntegerField() # PAGES class Instruction_Entire(Page): pass class Quiz_Entire(Page): form_model = 'player' form_fields = ['q1', 'q2'] @staticmethod def error_message(player: Player, values): solutions = dict(q1 = C.q1_answer, q2 = C.q2_answer) errors = {f: '回答が間違っています' for f in solutions if values[f] != solutions[f]} return errors class QuizResult_Entire(Page): pass page_sequence = [Instruction_Entire, Quiz_Entire, QuizResult_Entire]