from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) doc = '凸性组' class Constants(BaseConstants): name_in_url = 'Decisions_Convexity' players_per_group = 6 num_rounds = 1 rate = 0.025 Standard_deviation_low = 0 Average_low = 0.025 Basic_wage = 300 Standard_deviation_high = 0.302 Average_high = 0.11 class Subsession(BaseSubsession): pass class Group(BaseGroup): median = models.FloatField(initial=0) No1 = models.FloatField() No2 = models.FloatField() No3 = models.FloatField() No4 = models.FloatField() No5 = models.FloatField() No6 = models.FloatField() def get_ranking(self): players = sorted(self.get_players(), key=lambda p:p.total, reverse=True) list = [] for (i, p) in enumerate(players, start=1): p.rank = i list.append(p.total) if p.rank == 3: self.median = 0.5 * p.total elif p.rank == 4: self.median = self.median + 0.5 * p.total self.No1 = list[0] self.No2 = list[1] self.No3 = list[2] self.No4 = list[3] self.No5 = list[4] self.No6 = list[5] class Player(BasePlayer): Risk = models.FloatField(label='', max=200, min=0) Results_high = models.FloatField() Debt = models.FloatField() a = models.FloatField() total = models.FloatField() payoffs = models.FloatField() Results_low = models.FloatField() Risk_copy = models.FloatField() Risk_free_percent = models.FloatField() b = models.FloatField() Choice1 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) Choice2 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) Choice3 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) Choice4 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) Choice5 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) Choice6 = models.BooleanField(choices=[[True, 'Accept this lottery'], [False, 'Reject this lottery']], widget=widgets.RadioSelect) n = models.IntegerField() n2 = models.IntegerField() delectedCount = models.IntegerField(label="Please write down the collected boxes number of the 'INFORMATION' boxes into the blank.") payoff_bomb = models.FloatField() payoff_decision = models.FloatField() Bomb_location = models.IntegerField() payoff_questionnaire = models.FloatField() Age = models.IntegerField(label='1. Your age', max=100, min=0) Gender = models.StringField(choices=[['Male', 'Male'], ['Female', 'Female']], label='1. Your gender', widget=widgets.RadioSelect) Annual_household_income = models.FloatField(label='3. Annual household income($)', min=0) E_mail = models.StringField(blank=True, label='5. Your e-mail address (Optional)') high1 = models.FloatField() high2 = models.FloatField() high3 = models.FloatField() high4 = models.FloatField() high5 = models.FloatField() high6 = models.FloatField() high7 = models.FloatField() high8 = models.FloatField() high9 = models.FloatField() high10 = models.FloatField() high11 = models.FloatField() high12 = models.FloatField() high13 = models.FloatField() high14 = models.FloatField() high15 = models.FloatField() high16 = models.FloatField() high17 = models.FloatField() high18 = models.FloatField() high19 = models.FloatField() high20 = models.FloatField() risk1 = models.FloatField() risk2 = models.FloatField() risk3 = models.FloatField() risk4 = models.FloatField() risk5 = models.FloatField() risk6 = models.FloatField() risk7 = models.FloatField() risk8 = models.FloatField() risk9 = models.FloatField() risk10 = models.FloatField() risk11 = models.FloatField() risk12 = models.FloatField() risk13 = models.FloatField() risk14 = models.FloatField() risk15 = models.FloatField() risk16 = models.FloatField() risk17 = models.FloatField() risk18 = models.FloatField() risk19 = models.FloatField() risk20 = models.FloatField() total1 = models.FloatField() total2 = models.FloatField() total3 = models.FloatField() total4 = models.FloatField() total5 = models.FloatField() total6 = models.FloatField() total7 = models.FloatField() total8 = models.FloatField() total9 = models.FloatField() total10 = models.FloatField() total11 = models.FloatField() total12 = models.FloatField() total13 = models.FloatField() total14 = models.FloatField() total15 = models.FloatField() total16 = models.FloatField() total17 = models.FloatField() total18 = models.FloatField() total19 = models.FloatField() total20 = models.FloatField() change1 = models.FloatField() change2 = models.FloatField() change3 = models.FloatField() change4 = models.FloatField() change5 = models.FloatField() change6 = models.FloatField() change7 = models.FloatField() change8 = models.FloatField() change9 = models.FloatField() change10 = models.FloatField() change11 = models.FloatField() change12 = models.FloatField() change13 = models.FloatField() change14 = models.FloatField() change15 = models.FloatField() change16 = models.FloatField() change17 = models.FloatField() change18 = models.FloatField() change19 = models.FloatField() change20 = models.FloatField() Education = models.StringField(choices=[['High school or below', 'High school or below'], ["Bachelor's degree", "Bachelor's degree"], ['Graduate degree', 'Graduate degree']], widget=widgets.RadioSelect) Suggestion = models.LongStringField(blank=True, label='6. Suggestions about the experiment. (Optional)') blankcount = models.IntegerField(initial=0) payoff1 = models.FloatField() rank = models.IntegerField()