from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Siyu' doc = """ post-questionnaire """ class Constants(BaseConstants): name_in_url = 'c_post_questionnaire_CH' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): def do_my_shuffle(self): self.group_randomly() def creating_session(self): for player in self.get_players(): player.risk_task = random.randint(1, 10) print('player risk task is', player.risk_task) player.risk_random = random.randint(1, 10) print('player risk random is', player.risk_random) class Group(BaseGroup): pass class Player(BasePlayer): risk_random = models.IntegerField() risk_task = models.IntegerField() risk_choice = models.IntegerField() post_questinnaire_payoff = models.CurrencyField() r1 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 10%的可能得20个实验点,90%的可能得16个实验点'], [2, 'B) 10%的可能得38.5个实验点,90%的可能得1个实验点'], ]) r2 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 20%的可能得20个实验点,80%的可能得16个实验点'], [2, 'B) 20%的可能得38.5个实验点,80%的可能得1个实验点'], ]) r3 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 30%的可能得20个实验点,70%的可能得16个实验点'], [2, 'B) 30%的可能得38.5个实验点,70%的可能得1个实验点'], ]) r4 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 40%的可能得20个实验点,60%的可能得16个实验点'], [2, 'B) 40%的可能得38.5个实验点,60%的可能得1个实验点'], ]) r5 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 50%的可能得20个实验点,50%的可能得16个实验点'], [2, 'B) 50%的可能得38.5个实验点,50%的可能得1个实验点'], ]) r6 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 60%的可能得20个实验点,40%的可能得16个实验点'], [2, 'B) 60%的可能得38.5个实验点,40%的可能得1个实验点'], ]) r7 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 70%的可能得20个实验点,30%的可能得16个实验点'], [2, 'B) 70%的可能得38.5个实验点,30%的可能得1个实验点'], ]) r8 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 80%的可能得20个实验点,20%的可能得16个实验点'], [2, 'B) 80%的可能得38.5个实验点,20%的可能得1个实验点'], ]) r9 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 90%的可能得20个实验点,10%的可能得16个实验点'], [2, 'B) 90%的可能得38.5个实验点,10%的可能得1个实验点'], ]) r10 = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[[1, 'A) 100%的可能得20个实验点,0%的可能得16个实验点'], [2, 'B) 100%的可能得38.5个实验点,0%的可能得1个实验点'], ]) gender = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '女性'], [2, '男性'], ]) year = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, '大一'], [2, '大二'], [3, '大三'], [4, '大四'],[5, '其它'], ]) major=models.StringField() gpa = models.FloatField(min=0, max=5) comment = models.LongStringField() def other_player(self): return self.get_others_in_group()[0] def set_payoff(self): if self.risk_task == 1: self.risk_choice = self.r1 if self.risk_choice == 1 and self.risk_random <= 1: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 2: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 1: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 2: self.post_questinnaire_payoff = 1 elif self.risk_task == 2: self.risk_choice = self.r2 if self.risk_choice == 1 and self.risk_random <= 2: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 3: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 2: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 3: self.post_questinnaire_payoff = 1 elif self.risk_task == 3: self.risk_choice = self.r3 if self.risk_choice == 1 and self.risk_random <= 3: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 4: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 3: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 4: self.post_questinnaire_payoff = 1 elif self.risk_task == 4: self.risk_choice = self.r4 if self.risk_choice == 1 and self.risk_random <= 4: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 5: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 4: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 5: self.post_questinnaire_payoff = 1 elif self.risk_task == 5: self.risk_choice = self.r5 if self.risk_choice == 1 and self.risk_random <= 5: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 6: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 5: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 6: self.post_questinnaire_payoff = 1 elif self.risk_task == 6: self.risk_choice = self.r6 if self.risk_choice == 1 and self.risk_random <= 6: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 7: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 6: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 7: self.post_questinnaire_payoff = 1 elif self.risk_task == 7: self.risk_choice = self.r7 if self.risk_choice == 1 and self.risk_random <= 7: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 8: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 7: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 8: self.post_questinnaire_payoff = 1 elif self.risk_task == 8: self.risk_choice = self.r8 if self.risk_choice == 1 and self.risk_random <= 8: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 9: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 8: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 9: self.post_questinnaire_payoff = 1 elif self.risk_task == 9: self.risk_choice = self.r9 if self.risk_choice == 1 and self.risk_random <= 9: self.post_questinnaire_payoff = 20 elif self.risk_choice == 1 and self.risk_random >= 10: self.post_questinnaire_payoff = 16 elif self.risk_choice == 2 and self.risk_random <= 9: self.post_questinnaire_payoff = 38.5 elif self.risk_choice == 2 and self.risk_random >= 10: self.post_questinnaire_payoff = 1 elif self.risk_task == 10: self.risk_choice = self.r10 if self.risk_choice == 1: self.post_questinnaire_payoff = 20 elif self.risk_choice == 2: self.post_questinnaire_payoff = 38.5 self.participant.vars['Post'] = self.post_questinnaire_payoff self.participant.vars['Dice_risk'] = self.risk_task self.participant.vars['Choice_risk'] = self.risk_choice