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 = 'd_evaluation_post_questionnaire' players_per_group = None 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_random = random.randint(1, 10) print('player risk random is', player.risk_random) class Group(BaseGroup): pass class Player(BasePlayer): share = models.IntegerField(min=0, max=10) risk = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'A. Heads: 5 points, Tails: 5 points'], [2, 'B. Heads: 4 points, Tails: 8 points'], [3, 'C. Heads: 3 points, Tails: 11 points'], [4, 'D. Heads: 2 points, Tails: 14 points'], [5, 'E. Heads: 1 points, Tails: 17 points'], [6, 'F. Heads: 0 points, Tails: 20 points'], ]) risk_random = models.IntegerField() post_questinnaire_payoff = models.CurrencyField() gender = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Female'], [2, 'Male'], [3, 'Other'],]) major=models.StringField() gpa = models.FloatField(min=0, max=5) ethnicity = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'African American'], [2, 'Asian / Pacific Islander'], [3, 'Caucasian'],[4, 'Hispanic or Latino'],[5, 'Native American'],[6, 'Other'],]) parents_politics = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Multiple times per day'], [2, 'Once per day'], [3, 'Multiple times per week'], [4, 'Once per week'], [5, 'Multiple times per month'], [6, 'Once per month'], [7, 'Very Rarely'], ]) party = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Republican'], [2, 'Lean Republican'], [3, 'Independent'], [4, 'Lean Democrat'], [5, 'Democrat'],[6, 'Other'],]) ideology = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Very conservative'], [2, 'Conservative'], [3, 'Moderate'], [4, 'Liberal'], [5, 'Very liberal'],]) mother_party = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Republican'], [2, 'Lean Republican'], [3, 'Independent'], [4, 'Lean Democrat'], [5, 'Democrat'], [6, 'Other'],]) father_party = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Republican'], [2, 'Lean Republican'], [3, 'Independent'], [4, 'Lean Democrat'], [5, 'Democrat'], [6, 'Other'],]) parents_politics = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Multiple times per day'], [2, 'Once per day'], [3, 'Multiple times per week'], [4, 'Once per week'], [5, 'Multiple times per month'], [6, 'Once per month'], [7, 'Very Rarely'], ]) friend_party = models.IntegerField(widget=widgets.RadioSelect, choices=[[1, 'Republican'], [2, 'Lean Republican'], [3, 'Independent'], [4, 'Lean Democrat'], [5, 'Democrat'], [6, 'Other'],]) media = models.LongStringField() def other_player(self): return self.get_others_in_group()[0] def set_payoff(self): if self.risk == 1 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 5 if self.risk == 2 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 4 if self.risk == 3 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 3 if self.risk == 4 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 2 if self.risk == 5 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 1 if self.risk == 6 and self.risk_random <= 5: self.post_questinnaire_payoff = 10 - self.share + 0 if self.risk == 1 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 5 if self.risk == 2 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 8 if self.risk == 3 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 11 if self.risk == 4 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 14 if self.risk == 5 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 17 if self.risk == 6 and self.risk_random >= 6: self.post_questinnaire_payoff = 10 - self.share + 20 self.participant.vars['Post'] = self.post_questinnaire_payoff