from otree.api import * doc = """ Instruction of Decoding Task """ class C(BaseConstants): NAME_IN_URL = 'instruction_decoding' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 q1_answer = 2 q2_answer = 6 q3_answer = 500 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] あるラウンドでのあなたの正答は2桁が10個、1桁が5個の場合、このラウンドでのあなたの獲得ポイントはいくらですか?") q4 = models.IntegerField(choices = [[1, '最終ラウンドでの獲得ポイントが1ポイント5円として支払われる'], [2, '全本番ラウンドでの獲得ポイントの合計が1ポイント1円として支払われる'], [3, '全本番ラウンドから1つのラウンドが無作為に選ばれ、選ばれたラウンドでの獲得ポイントが1ポイント1円として支払われる']], widget = widgets.RadioSelect, label = "[問4] 本番ラウンドが全て終わった後、あなたの最終的な報酬額のうち、参加報酬500円に追加して支払われる部分の金額はどのように決まりますか?" ) num_failed_attempts = models.IntegerField() # PAGES class InstructionDecode(Page): pass class Quiz(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(Page): pass page_sequence = [InstructionDecode, Quiz, QuizResult]