from otree.api import * import random cu = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'survey_production' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): your_given_more = models.IntegerField(min=0) other_given_more = models.IntegerField(min=0) your_given_more_0 = models.IntegerField(min=0) your_given_more_1 = models.IntegerField(min=0) your_given_more_2 = models.IntegerField(min=0) your_given_more_3 = models.IntegerField(min=0) your_given_more_4 = models.IntegerField(min=0) your_given_more_5 = models.IntegerField(min=0) your_given_more_6 = models.IntegerField(min=0) your_given_more_7 = models.IntegerField(min=0) your_given_more_8 = models.IntegerField(min=0) your_given_more_9 = models.IntegerField(min=0) your_given_more_10 = models.IntegerField(min=0) your_given_more_11 = models.IntegerField(min=0) your_given_more_12 = models.IntegerField(min=0) your_given_more_13 = models.IntegerField(min=0) your_given_more_14 = models.IntegerField(min=0) your_given_more_15 = models.IntegerField(min=0) your_given_more_16 = models.IntegerField(min=0) your_given_more_17 = models.IntegerField(min=0) your_given_more_18 = models.IntegerField(min=0) your_given_more_19 = models.IntegerField(min=0) your_given_more_20 = models.IntegerField(min=0) your_given_more_21 = models.IntegerField(min=0) your_given_more_22 = models.IntegerField(min=0) your_given_more_23 = models.IntegerField(min=0) your_given_more_24 = models.IntegerField(min=0) your_given_less = models.IntegerField(min=0) other_given_less = models.IntegerField(min=0) your_given_less_0 = models.IntegerField(min=0) your_given_less_1 = models.IntegerField(min=0) your_given_less_2 = models.IntegerField(min=0) your_given_less_3 = models.IntegerField(min=0) your_given_less_4 = models.IntegerField(min=0) your_given_less_5 = models.IntegerField(min=0) your_given_less_6 = models.IntegerField(min=0) your_given_less_7 = models.IntegerField(min=0) your_given_less_8 = models.IntegerField(min=0) your_given_less_9 = models.IntegerField(min=0) your_given_less_10 = models.IntegerField(min=0) your_given_less_11 = models.IntegerField(min=0) your_given_less_12 = models.IntegerField(min=0) your_given_less_13 = models.IntegerField(min=0) your_given_less_14 = models.IntegerField(min=0) your_given_less_15 = models.IntegerField(min=0) your_given_less_16 = models.IntegerField(min=0) your_given_less_17 = models.IntegerField(min=0) your_given_less_18 = models.IntegerField(min=0) your_given_less_19 = models.IntegerField(min=0) your_given_less_20 = models.IntegerField(min=0) your_given_less_21 = models.IntegerField(min=0) your_given_less_22 = models.IntegerField(min=0) your_given_less_23 = models.IntegerField(min=0) your_given_less_24 = models.IntegerField(min=0) # FUNCTIONS def your_given_more_max(player: Player): return player.session.config["init_more"] def other_given_less_max(player: Player): return player.session.config["init_more"] def other_given_more_max(player: Player): return player.session.config["init_less"] def your_given_less_max(player: Player): return player.session.config["init_less"] def your_given_more_0_max(player: Player): return player.session.config["init_more"] def your_given_more_1_max(player: Player): return player.session.config["init_more"] def your_given_more_2_max(player: Player): return player.session.config["init_more"] def your_given_more_3_max(player: Player): return player.session.config["init_more"] def your_given_more_4_max(player: Player): return player.session.config["init_more"] def your_given_more_5_max(player: Player): return player.session.config["init_more"] def your_given_more_6_max(player: Player): return player.session.config["init_more"] def your_given_more_7_max(player: Player): return player.session.config["init_more"] def your_given_more_8_max(player: Player): return player.session.config["init_more"] def your_given_more_9_max(player: Player): return player.session.config["init_more"] def your_given_more_10_max(player: Player): return player.session.config["init_more"] def your_given_more_11_max(player: Player): return player.session.config["init_more"] def your_given_more_12_max(player: Player): return player.session.config["init_more"] def your_given_more_13_max(player: Player): return player.session.config["init_more"] def your_given_more_14_max(player: Player): return player.session.config["init_more"] def your_given_more_15_max(player: Player): return player.session.config["init_more"] def your_given_more_16_max(player: Player): return player.session.config["init_more"] def your_given_more_17_max(player: Player): return player.session.config["init_more"] def your_given_more_18_max(player: Player): return player.session.config["init_more"] def your_given_more_19_max(player: Player): return player.session.config["init_more"] def your_given_more_20_max(player: Player): return player.session.config["init_more"] def your_given_more_21_max(player: Player): return player.session.config["init_more"] def your_given_more_22_max(player: Player): return player.session.config["init_more"] def your_given_more_23_max(player: Player): return player.session.config["init_more"] def your_given_more_24_max(player: Player): return player.session.config["init_more"] def your_given_less_0_max(player: Player): return player.session.config["init_less"] def your_given_less_1_max(player: Player): return player.session.config["init_less"] def your_given_less_2_max(player: Player): return player.session.config["init_less"] def your_given_less_3_max(player: Player): return player.session.config["init_less"] def your_given_less_4_max(player: Player): return player.session.config["init_less"] def your_given_less_5_max(player: Player): return player.session.config["init_less"] def your_given_less_6_max(player: Player): return player.session.config["init_less"] def your_given_less_7_max(player: Player): return player.session.config["init_less"] def your_given_less_8_max(player: Player): return player.session.config["init_less"] def your_given_less_9_max(player: Player): return player.session.config["init_less"] def your_given_less_10_max(player: Player): return player.session.config["init_less"] def your_given_less_11_max(player: Player): return player.session.config["init_less"] def your_given_less_12_max(player: Player): return player.session.config["init_less"] def your_given_less_13_max(player: Player): return player.session.config["init_less"] def your_given_less_14_max(player: Player): return player.session.config["init_less"] def your_given_less_15_max(player: Player): return player.session.config["init_less"] def your_given_less_16_max(player: Player): return player.session.config["init_less"] def your_given_less_17_max(player: Player): return player.session.config["init_less"] def your_given_less_18_max(player: Player): return player.session.config["init_less"] def your_given_less_19_max(player: Player): return player.session.config["init_less"] def your_given_less_20_max(player: Player): return player.session.config["init_less"] def your_given_less_21_max(player: Player): return player.session.config["init_less"] def your_given_less_22_max(player: Player): return player.session.config["init_less"] def your_given_less_23_max(player: Player): return player.session.config["init_less"] def your_given_less_24_max(player: Player): return player.session.config["init_less"] def end_points(player: Player): participant = player.participant # if the player is the role 1 if random.random()<=0.5: k = participant.survey_option1 # when the coplayer as player 2 contributes k survey_contribution = eval('player.your_given_more_{}'.format(k)) survey_points = player.session.config["init_more"] - survey_contribution + (k * player.session.config["unit_less"] + survey_contribution * player.session.config["unit_more"])/2 survey_points = format(survey_points, '.2f') # if the player is the role 2 else: k = participant.survey_option2 # when the coplayer as player 1 contributes k survey_contribution = eval('player.your_given_less_{}'.format(k)) survey_points = player.session.config["init_less"] - survey_contribution + (k * player.session.config["unit_more"] + survey_contribution * player.session.config["unit_less"])/2 survey_points = format(survey_points, '.2f') participant = player.participant number_points1 = participant.sum_points1 number_points2 = participant.sum_points2 total_points = participant.sum_points1 + participant.sum_points2 + survey_points result = "Your final cumulative point in Game 1 is {},
your final cumulative point in Game 2 is {}, and
you obtain {} in the survey.
Final point is {} + {} + {} = {}.
Your total income is 20 + 0.03 * {} = {}.".format( participant.sum_points1, participant.sum_points2, survey_points, number_points1, number_points2, survey_points, total_points, total_points, 20+0.03*total_points, ) return result # PAGES class Survey_role1(Page): form_model = 'player' form_fields = ['your_given_more','other_given_more','your_given_more_0','your_given_more_1','your_given_more_2','your_given_more_3','your_given_more_4', 'your_given_more_5','your_given_more_6','your_given_more_7','your_given_more_8','your_given_more_9','your_given_more_10', 'your_given_more_11','your_given_more_12','your_given_more_13','your_given_more_14','your_given_more_15','your_given_more_16', 'your_given_more_17','your_given_more_18','your_given_more_19','your_given_more_20','your_given_more_21','your_given_more_22', 'your_given_more_23','your_given_more_24' ] @staticmethod def vars_for_template(player: Player): return dict( your_given_more="Your contribution (An integer between 0-{})".format(player.session.config["init_more"]), other_given_more="Coplayer's contribution (An integer between 0-{})".format(player.session.config["init_less"]), ) class Survey_role2(Page): form_model = 'player' form_fields = ['your_given_less','other_given_less','your_given_less_0','your_given_less_1','your_given_less_2','your_given_less_3','your_given_less_4', 'your_given_less_5','your_given_less_6','your_given_less_7','your_given_less_8','your_given_less_9','your_given_less_10', 'your_given_less_11','your_given_less_12','your_given_less_13','your_given_less_14','your_given_less_15','your_given_less_16', 'your_given_less_17','your_given_less_18','your_given_less_19','your_given_less_20','your_given_less_21','your_given_less_22', 'your_given_less_23','your_given_less_24' ] @staticmethod def vars_for_template(player: Player): player.participant.survey_option1 = random.choice(range(0,24+1)) player.participant.survey_option2 = random.choice(range(0,24+1)) return dict( your_given_less="Your contribution (An integer between 0-{})".format(player.session.config["init_less"]), other_given_less="Coplayer's contribution (An integer between 0-{})".format(player.session.config["init_more"]), ) class End(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): return dict( end_points = end_points(player) ) page_sequence = [Survey_role1, Survey_role2,End]