from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) from enum import Enum import random import json author = 'FuHsuan Tsai' doc = """ 複製實驗——未來式:問卷主體 """ class WaitingPeriod(object): list = [] class GainedAmount(object): list = [] today = 100 class Treatment(object): futureTense = "將" spaces = " " def get_treatment(player): participant = player.participant # lazy loading: 若不存在就決定並起來,若已存在就直接取出 if Constants.key_method not in participant.vars: participant.vars[Constants.key_method] = random.choice(["nothing", "spaces", "spacesAndFT", "changeOrder"]) method = participant.vars[Constants.key_method] return method class Constants(BaseConstants): name_in_url = 'Exp1_questionaire' players_per_group = None gainedamount_sooner = GainedAmount.today num_rounds = 8 key_params = 'questionnaire_parameters' key_method = 'treatment_method' futureTense = Treatment.futureTense spaces = Treatment.spaces class OptionOfGetMoney(object): part1 = '於' part2 = '星期後,' part3 = '收到' def formatted_option(player, part1, part2, part3): if player.treatment_method == "nothing": return part1, part2 + part3 elif player.treatment_method == "spaces": return part1, part2 + Constants.spaces + part3 elif player.treatment_method == "spacesAndFT": return part1, part2 + Constants.spaces + Constants.futureTense + part3 elif player.treatment_method == "changeOrder": return Constants.futureTense + part1, part2 + part3 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.treatment_method = Treatment.get_treatment(p) class Group(BaseGroup): pass class Player(BasePlayer): waiting_period = models.IntegerField() treatment_method = models.StringField() sooner_period = models.StringField() switch_point = models.StringField( label = '請選擇您的轉換點', widget = widgets.RadioSelect, ) def switch_point_choices(self): options_part1, options_part2 = OptionOfGetMoney.formatted_option(self, OptionOfGetMoney.part1, OptionOfGetMoney.part2, OptionOfGetMoney.part3) options = options_part1 + str(self.waiting_period) + options_part2 return [ #['test', str(type(Constants.spaces))], ['1', options + '110'], ['2', options + '120'], ['3', options + '130'], ['4', options + '140'], ['5', options + '150'], ['6', options + '160'], ['7', options + '170'], ['8', options + '180'], ['9', options + '190'], ] is_selected = models.BooleanField(initial = False)