from otree.api import * doc = """ Question that lets you select multiple options (multi-select, multiple choice / multiple answer) """ class C(BaseConstants): NAME_IN_URL = 'Survey2' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 Q5 = [ dict(name='C5_1', label='固定選擇報酬為 12 的選項'), dict(name='C5_2', label='固定選擇報酬為 9 的選項'), dict(name='C5_3', label='固定選擇報酬為 2 的選項'), dict(name='C5_4', label='固定在報酬 12 與報酬 9 之間隨機選擇'), dict(name='C5_5', label='固定在報酬 12 與報酬 2 之間隨機選擇'), dict(name='C5_6', label='固定在報酬 9 與報酬 2 之間隨機選擇'), dict(name='C5_7', label='在報酬 12、9、2 三個選項之間隨機選擇'),] Q6 = [ dict(name='C6_1', label='選擇報酬為 12 的選項'), dict(name='C6_2', label='選擇報酬為 9 的選項'), dict(name='C6_3', label='選擇報酬為 2 的選項'), dict(name='C6_4', label='若報酬 12 與其他選項並列最多人選,還是選擇報酬為 12 的選項'), dict(name='C6_5', label='若報酬 12 與其他選項並列最多人選,則選擇報酬為 9 的選項'), dict(name='C6_6', label='若報酬 12 與其他選項並列最多人選,則選擇報酬為 2 的選項'), dict(name='C6_7', label='在報酬 12、9、2 三個選項之間隨機選擇'), ] Q7 = [ dict(name='C7_1', label='不論如何,選擇報酬為 12 的選項'), dict(name='C7_2', label='不論如何,選擇報酬為 9 的選項'), dict(name='C7_3', label='不論如何,選擇報酬為 2 的選項'), dict(name='C7_4', label='不論報酬的高低,選擇「 第一階段最多人選 」的選項'), dict(name='C7_5', label='若報酬 12 與其他選項並列最少人選,還是選擇報酬為 12 的選項'), dict(name='C7_6', label='若報酬 12 與其他選項並列最少人選,則選擇報酬為 9 的選項'), dict(name='C7_7', label='若報酬 12 與其他選項並列最少人選,則選擇報酬為 2 的選項'), dict(name='C7_8', label='若報酬 12 是唯一最少人選,還是選擇報酬為 12 的選項'), dict(name='C7_9', label='若報酬 12 是唯一最少人選,則選擇報酬為 9 的選項'), dict(name='C7_10', label='若報酬 12 是唯一最少人選,則選擇報酬為 2 的選項'), dict(name='C7_11', label='在報酬 12、9、2 三個選項之間隨機選擇'), ] Q8 = [ dict(name='C8_1', label='固定選擇報酬為 12 的選項'), dict(name='C8_2', label='固定選擇報酬為 9 的選項'), dict(name='C8_3', label='固定選擇報酬為 2 的選項'), dict(name='C8_4', label='固定在 12 與 9 之間交替選擇 ( 上一回合選擇報酬 12 的選項,則本回合選擇報酬 9 的選項,再下一回合又選擇報酬 12 的選項 )'), dict(name='C8_5', label='固定在 12 與 2 之間交替選擇 ( 上一回合選擇報酬 12 的選項,則本回合選擇報酬 2 的選項,再下一回合又選擇報酬 12 的選項'), dict(name='C8_6', label='固定在 9 與 2 之間交替選擇 ( 上一回合選擇報酬 9 的選項,則本回合選擇報酬 2 的選項,再下一回合又選擇報酬 9 的選項 )'), dict(name='C8_7', label='固定在報酬 12 與 9 之間隨機選擇'), dict(name='C8_8', label='固定在報酬 12 與 2 之間隨機選擇'), dict(name='C8_9', label='固定在報酬 9 與 2 之間隨機選擇'), dict(name='C8_10', label='在報酬 12、9、2 三個選項之間隨機選擇'), ] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): C5_1 = models.BooleanField(blank=True) C5_2 = models.BooleanField(blank=True) C5_3 = models.BooleanField(blank=True) C5_4 = models.BooleanField(blank=True) C5_5 = models.BooleanField(blank=True) C5_6 = models.BooleanField(blank=True) C5_7 = models.BooleanField(blank=True) Q5_1 = models.LongStringField( label='承上題,請簡述您採取甚麼樣的選擇策略?',) C6_1 = models.BooleanField(blank=True) C6_2 = models.BooleanField(blank=True) C6_3 = models.BooleanField(blank=True) C6_4 = models.BooleanField(blank=True) C6_5 = models.BooleanField(blank=True) C6_6 = models.BooleanField(blank=True) C6_7 = models.BooleanField(blank=True) C7_1 = models.BooleanField(blank=True) C7_2 = models.BooleanField(blank=True) C7_3 = models.BooleanField(blank=True) C7_4 = models.BooleanField(blank=True) C7_5 = models.BooleanField(blank=True) C7_6 = models.BooleanField(blank=True) C7_7 = models.BooleanField(blank=True) C7_8 = models.BooleanField(blank=True) C7_9 = models.BooleanField(blank=True) C7_10 = models.BooleanField(blank=True) C7_11 = models.BooleanField(blank=True) C8_1 = models.BooleanField(blank=True) C8_2 = models.BooleanField(blank=True) C8_3 = models.BooleanField(blank=True) C8_4 = models.BooleanField(blank=True) C8_5 = models.BooleanField(blank=True) C8_6 = models.BooleanField(blank=True) C8_7 = models.BooleanField(blank=True) C8_8 = models.BooleanField(blank=True) C8_9 = models.BooleanField(blank=True) C8_10 = models.BooleanField(blank=True) # PAGES class Page1(Page): form_model = 'player' form_fields = ['Q5_1'] @staticmethod def get_form_fields(player: Player): return [lang['name'] for lang in C.Q5+C.Q6+C.Q7+C.Q8] @staticmethod def error_message(player: Player, values): # print('values is', values) num_selected = 0 for lang in C.Q5: if values[lang['name']]: num_selected += 1 if num_selected < 1: return "請從第 5 題中選擇一種策略" for lang in C.Q6: if values[lang['name']]: num_selected += 1 if num_selected < 1: return "請從第 6 題中選擇一種策略" for lang in C.Q7: if values[lang['name']]: num_selected += 1 if num_selected < 1: return "請從第 7 題中選擇一種策略" for lang in C.Q8: if values[lang['name']]: num_selected += 1 if num_selected < 1: return "請從第 8 題中選擇一種策略" class Bye(Page): pass page_sequence = [Page1, Bye]