from otree.api import * doc = """ Instruction of Estimation Task """ class C(BaseConstants): NAME_IN_URL = 'instruction_estimation' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 q1_answer = 3 q2_answer = 1 q3_answer = 2 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): q1 = models.IntegerField(choices = [[1, 'タスク1の全ラウンドにおける自分の合計獲得ポイントを予測する'], [2, 'タスク1の本番ラウンドにおける自分の合計獲得ポイントを予測する'], [3, 'タスク1の本番ラウンドにおける自分の平均獲得ポイントを予測する']], widget=widgets.RadioSelect, label = "[問1] タスク2の内容に関する説明として正しいものはどれですか?") q2 = models.IntegerField(choices = [[1, '回答した予測値と本当の値の差が小さいほど獲得ポイントが高くなる'], [2, '回答した予測値と本当の値の差が大きいほど獲得ポイントが高くなる']], widget=widgets.RadioSelect, label = "[問2] 各質問の獲得ポイントはどのように決まりますか?") q3 = models.IntegerField(choices = [[1, '全質問での総獲得ポイントが支払対象獲得ポイントとなる'], [2, '全質問から1つの質問が無作為に選ばれる。選ばれた質問における獲得ポイントが支払対象獲得ポイントとなる。']], widget = widgets.RadioSelect, label = "[問3] タスク2が支払対象タスクに選ばれた場合、支払対象獲得ポイントはどのように決まりますか?" ) # PAGES class Instruction_Estimation(Page): pass class Quiz_Estimation(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3'] @staticmethod def error_message(player: Player, values): solutions = dict(q1 = C.q1_answer, q2 = C.q2_answer, q3 = C.q3_answer) errors = {f: '回答が間違っています' for f in solutions if values[f] != solutions[f]} return errors class QuizResult_Estimation(Page): pass page_sequence = [Instruction_Estimation, Quiz_Estimation, QuizResult_Estimation]