from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Your name here' doc = """ Your app description """ def make_asset_choice_field(pb1): pb2 = 100 - pb1 return models.StringField( choices=[ ["S", "商品 A: 您有" + str(pb1) + "% 機率得到 " + str(Constants.s_goodtime) + " 萬, " + str(pb2) + "% 機率得到 " + str(Constants.s_badtime) + " 萬"], ["R", "商品 B: 您有" + str(pb1) + "% 機率得到 " + str(Constants.r_goodtime) + " 萬, " + str(pb2) + "% 機率得到 " + str(Constants.r_badtime) + " 萬"] ], label = "您要將您的 " + str(Constants.principal) + " 萬投資於下列哪個商品", widget = widgets.RadioSelect(), ) def draw_chips(mychoice, pb): draw_num = random.randint(1,100) if mychoice == "S": if draw_num <= pb: chips = Constants.s_goodtime else: chips = Constants.s_badtime if mychoice == "R": if draw_num <= pb: chips = Constants.r_goodtime else: chips = Constants.r_badtime return chips class Constants(BaseConstants): name_in_url = 'holtlaury' players_per_group = None num_rounds = 1 principal = 180 prob0 = 30 prob1 = 40 prob2 = 50 prob3 = 60 prob4 = 70 chance = 5 s_goodtime = 200 s_badtime = 160 r_goodtime = 385 r_badtime = 10 lineratio = 25 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: for p in self.get_players(): p.participant.vars["cum_chip"] = 0 class Group(BaseGroup): pass class Player(BasePlayer): asset_choice0 = make_asset_choice_field(Constants.prob0) asset_choice1 = make_asset_choice_field(Constants.prob1) asset_choice2 = make_asset_choice_field(Constants.prob2) asset_choice3 = make_asset_choice_field(Constants.prob3) asset_choice4 = make_asset_choice_field(Constants.prob4) chip0 = models.IntegerField() chip1 = models.IntegerField() chip2 = models.IntegerField() chip3 = models.IntegerField() chip4 = models.IntegerField() sumchip = models.IntegerField() def pass_cumchip(self): self.participant.vars["cum_chip"] = self.participant.vars["cum_chip"] + self.sumchip def draw(self): self.chip0 = draw_chips(self.asset_choice0, Constants.prob0) self.chip1 = draw_chips(self.asset_choice1, Constants.prob1) self.chip2 = draw_chips(self.asset_choice2, Constants.prob2) self.chip3 = draw_chips(self.asset_choice3, Constants.prob3) self.chip4 = draw_chips(self.asset_choice4, Constants.prob4) self.sumchip = self.chip0 + self.chip1 + self.chip2 + self.chip3 + self.chip4