from otree.api import * doc = """ Instruction of Summation Task with Goal """ class C(BaseConstants): NAME_IN_URL = 'instruction_summation_withgoal' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 q1_answer = 2 q2_answer = 0 q3_answer = 540 q4_answer = 3 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): q1 = models.IntegerField(label = "[問1] 1ラウンドの制限時間は何分ですか?") q2 = models.IntegerField(label = "[問2] 練習ラウンドは何ラウンド行われますか?") q3 = models.IntegerField(label = "[問3] あるラウンドでのあなたの正答数が27、目標が550だった場合、このラウンドでのあなたの獲得ポイントはいくらですか?") q4 = models.IntegerField(choices = [[1, '全本番ラウンドでの総獲得ポイントが支払対象獲得ポイントとなる。'], [2, '練習ラウンドと本番ラウンドの全てから1つのラウンドが無作為に選ばれる。選ばれたラウンドでの獲得ポイントが支払対象獲得ポイントとなる。'], [3, '全本番ラウンドから1つのラウンドが無作為に選ばれる。選ばれたラウンドでの獲得ポイントが支払対象獲得ポイントとなる。']], widget = widgets.RadioSelect, label = "[問4] タスク3が支払対象タスクに選ばれた場合、支払対象獲得ポイントはどのように決まりますか?" ) # PAGES class InstructionSummation_Withgoal(Page): pass class Quiz_Withgoal(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4'] @staticmethod def error_message(player: Player, values): solutions = dict(q1 = C.q1_answer, q2 = C.q2_answer, q3 = C.q3_answer, q4 = C.q4_answer) errors = {f: '回答が間違っています' for f in solutions if values[f] != solutions[f]} return errors class QuizResult_Withgoal(Page): pass page_sequence = [InstructionSummation_Withgoal, Quiz_Withgoal, QuizResult_Withgoal]