from otree.api import * import random cu = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'survey_control' 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_0 = models.IntegerField(min=0) your_given_1 = models.IntegerField(min=0) your_given_2 = models.IntegerField(min=0) your_given_3 = models.IntegerField(min=0) your_given_4 = models.IntegerField(min=0) your_given_5 = models.IntegerField(min=0) your_given_6 = models.IntegerField(min=0) your_given_7 = models.IntegerField(min=0) your_given_8 = models.IntegerField(min=0) your_given_9 = models.IntegerField(min=0) your_given_10 = models.IntegerField(min=0) your_given_11 = models.IntegerField(min=0) your_given_12 = models.IntegerField(min=0) your_given_13 = models.IntegerField(min=0) your_given_14 = models.IntegerField(min=0) your_given_15 = models.IntegerField(min=0) your_given_16 = models.IntegerField(min=0) your_given_17 = models.IntegerField(min=0) your_given_18 = models.IntegerField(min=0) your_given_19 = models.IntegerField(min=0) your_given_20 = models.IntegerField(min=0) your_given_21 = models.IntegerField(min=0) your_given_22 = models.IntegerField(min=0) your_given_23 = models.IntegerField(min=0) your_given_24 = models.IntegerField(min=0) # FUNCTIONS def your_given_more_max(player: Player): return player.session.config["init_more"] def other_given_more_max(player: Player): return player.session.config["init_more"] def your_given_0_max(player: Player): return player.session.config["init_more"] def your_given_1_max(player: Player): return player.session.config["init_more"] def your_given_2_max(player: Player): return player.session.config["init_more"] def your_given_3_max(player: Player): return player.session.config["init_more"] def your_given_4_max(player: Player): return player.session.config["init_more"] def your_given_5_max(player: Player): return player.session.config["init_more"] def your_given_6_max(player: Player): return player.session.config["init_more"] def your_given_7_max(player: Player): return player.session.config["init_more"] def your_given_8_max(player: Player): return player.session.config["init_more"] def your_given_9_max(player: Player): return player.session.config["init_more"] def your_given_10_max(player: Player): return player.session.config["init_more"] def your_given_11_max(player: Player): return player.session.config["init_more"] def your_given_12_max(player: Player): return player.session.config["init_more"] def your_given_13_max(player: Player): return player.session.config["init_more"] def your_given_14_max(player: Player): return player.session.config["init_more"] def your_given_15_max(player: Player): return player.session.config["init_more"] def your_given_16_max(player: Player): return player.session.config["init_more"] def your_given_17_max(player: Player): return player.session.config["init_more"] def your_given_18_max(player: Player): return player.session.config["init_more"] def your_given_19_max(player: Player): return player.session.config["init_more"] def your_given_20_max(player: Player): return player.session.config["init_more"] def your_given_21_max(player: Player): return player.session.config["init_more"] def your_given_22_max(player: Player): return player.session.config["init_more"] def your_given_23_max(player: Player): return player.session.config["init_more"] def your_given_24_max(player: Player): return player.session.config["init_more"] def end_points(player: Player): participant = player.participant k = participant.survey_option1 # when the coplayer contributes k survey_contribution = eval('player.your_given_{}'.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') 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(Page): form_model = 'player' form_fields = ['your_given_more', 'other_given_more','your_given_0','your_given_1','your_given_2','your_given_3','your_given_4', 'your_given_5','your_given_6','your_given_7','your_given_8','your_given_9','your_given_10', 'your_given_11','your_given_12','your_given_13','your_given_14','your_given_15','your_given_16', 'your_given_17','your_given_18','your_given_19','your_given_20','your_given_21','your_given_22', 'your_given_23','your_given_24'] @staticmethod def vars_for_template(player: Player): player.participant.survey_option1 = random.choice(range(0,24+1)) 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 End(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): return dict( end_points = end_points(player) ) page_sequence = [Survey, End]