from otree.api import * doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'survey_c' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # Q1 = models.IntegerField( # label= "1. 您是否修過賽局理論或是實驗經濟相關課程:", # choices=[ # [0, '是'],[1, '否'],], # widget=widgets.RadioSelect,) name=models.StringField(label="您的姓名 (請務必填寫正確)") student_id = models.StringField(label="您的學號 (學號第 1 碼應大寫)") id_number= models.StringField(label="您的身份證字號 (請務必填寫正確)") address=models.StringField(label="您的戶籍地址 ( 鄰里也需要填,請確保每一字都與身分證上的地址完全一致 )",) address_code=models.StringField(label="戶籍地址郵遞區號(3碼即可) ,若需查詢,填答表格下方網址為郵遞區號查詢網站。",) gender = models.IntegerField( label= "您的性別", choices=[ [0, '男'],[1, '女'],], widget=widgets.RadioSelect,) age = models.IntegerField(label='您的年齡是:', min=17, max=99, required = True) major = models.IntegerField( choices=[['0', '是'], ['1', '否'],], label='您是否是經濟系、農經系、或管理學院的學生', widget=widgets.RadioSelect,) grade = models.IntegerField( choices=[['0', '大學部 1 年級'], ['1', '大學部 2 年級'],['2', '大學部 3 年級'], ['3', '大學部 4 年級'],['4', '大學部 5 年級以上'], ['5', '碩士班學生'],['6', '博士班學生'], ], label='您的系級', widget=widgets.RadioSelect,) Q1 = models.IntegerField( label= "下列哪個選項,最符合您選擇回合決策思考過程", choices=[ [0, '隨機選擇某一個方案'],[1, '固定選擇 X 方案 '],[2, '固定選擇 Y 方案 '],[3, '在 X 方案和 Y 方案之間策略性選擇'],], widget=widgets.RadioSelect,) Q2 = models.LongStringField( label= "承上題,您為何做這樣的決策") Q3 = models.IntegerField( label= "在選擇回合,您是否有被另外一組大組所做的決策或被選中的人數影響到自己的決策?", choices=[ [0, '是'],[1, '否 '],], widget=widgets.RadioSelect,) Q4 = models.IntegerField( label= "在遊戲回合,您採用什麼樣的策略來極大化整組的報酬", choices=[ [0, '記固定位置的數字'],[1, '記固定數字 '],[2, '全部都記住 '],], widget=widgets.RadioSelect,) principle = models.BooleanField( choices=[['True', '是'], ['False', '否']], label='您是否修過個體經濟學原理 ( 經濟學原理與實習上 )?', widget=widgets.RadioSelect, required = True ) intermediate = models.BooleanField( choices=[['True', '是'], ['False', '否']], label='您是否修過個體經濟學 ( 任何標題為此的課程皆算 )?', widget=widgets.RadioSelect, required = True ) game = models.BooleanField( choices=[['True', '是'], ['False', '否']], label='您是否修過賽局相關課程 ( 如:賽局論或其他完整一學期皆在學習賽局的課程 )?', widget=widgets.RadioSelect, required = True ) theory = models.BooleanField( choices=[['True', '是'], ['False', '否']], label='您是否修過個體經濟理論 ( 碩博士班必修 )?', widget=widgets.RadioSelect, required = True ) exp = models.BooleanField( choices=[['True', '是'], ['False', '否']], label='您是否修過實驗經濟學 ( 如行為賽局論 )?', widget=widgets.RadioSelect, required = True ) # PAGES class Page1(Page): form_model = 'player' form_fields = ['gender','age','major','grade','Q1','Q2','Q3','Q4'] class Page2(Page): form_model = 'player' form_fields = ['principle', 'intermediate', 'exp', 'theory', 'game'] class BasicInfo(Page): form_model = 'player' form_fields = ['name','student_id', 'id_number','address','address_code'] @staticmethod def error_message(player: Player, values): print('value is', values) if len(values['student_id']) != 9: return '學號長度不正確' elif not values['student_id'][0].isalpha(): return '學號第 1 碼應為英文字母' elif not values['student_id'][0].isupper(): return '學號第 1 碼應大寫' elif not values['student_id'][1:2].isnumeric(): return '學號格式不正確' elif not values['student_id'][4:9].isnumeric(): return '學號格式不正確' if len(values['id_number']) != 10: return '身份證字號長度不正確' elif not values['id_number'][0].isupper(): return '身份證字號第 1 碼應大寫' elif not values['id_number'][0].isalpha(): return '身份證字號第 1 碼應為英文字母' elif not values['id_number'][1:10].isnumeric(): return '身份證字號格式不正確' if len(values['address_code']) != 3: return '戶籍地址郵遞區號長度不正確' class bye(Page): pass page_sequence = [BasicInfo,Page1,Page2,bye]