from otree.api import * import random author = 'Lingguo XU' doc = """ Prolific Pilot--Part 2 """ class Constants(BaseConstants): name_in_url = 'Part2_Prolific' players_per_group = None num_rounds = 1 WTP_endowment = 200 ECUpercorrect = 10 ECUpercorrectPart2 = 25 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): #Part2_0 Question1 = models.IntegerField(min=0, max=30, label="Please fill in a number between 0 and 30.") Question2 = models.IntegerField(min=0, max=30, label="Please fill in a number between 0 and 30.") Hypo4 = models.IntegerField(min=0, max=30, label="Please fill in a number between 0 and 30.") #Part2_0_1 Survey5 = models.IntegerField(min=0, max=100, label="Please fill in a number between 0 and 100.") Survey6 = models.IntegerField(label="", choices=[[1, 'Over-estimated'], [2, 'Under-estimated']], widget=widgets.RadioSelect ) #Part2_1 def make_field_bef_rel(): return models.IntegerField(initial=0, min=0, max=100, label="Please fill in a number between 0-100") #bef_rel1-5 bef_rel_1 = make_field_bef_rel() bef_rel_2 = make_field_bef_rel() bef_rel_3 = make_field_bef_rel() bef_rel_4 = make_field_bef_rel() bef_rel_5 = make_field_bef_rel() #Payoff for Part 1 and 2 payoff_part1 = models.IntegerField() payoff_part2 = models.IntegerField() # FUNCTIONS # PAGES class StartPage(Page): pass class Part2_0(Page): form_model = 'player' form_fields = ['Question1', 'Question2', 'Hypo4'] class Part2_0_1(Page): form_model = 'player' form_fields = ['Survey5', 'Survey6'] class Part2_1(Page): form_model = 'player' form_fields = ['bef_rel_1','bef_rel_2','bef_rel_3','bef_rel_4','bef_rel_5'] def before_next_page(player, timeout_happened): # Compute player payoff in Part 1 player.payoff_part1 = Constants.ECUpercorrect * player.participant.correctanswer_R1 # Compute player payoff in Part 2: check if the guess for absolute, average and relative performance is correct but can only check # absolute in prolific exp if player.Question1 == player.participant.questionsattempted_R1 and player.Question2 == player.participant.correctanswer_R1: player.payoff_part2 = 2*Constants.ECUpercorrectPart2 elif player.Question1 == player.participant.questionsattempted_R1 or player.Question2 == player.participant.correctanswer_R1: player.payoff_part2 = Constants.ECUpercorrectPart2 else: player.payoff_part2 = 0 player.participant.part1payoff = player.payoff_part1 player.participant.part2payoff = player.payoff_part2 # player.participant.relativebelief = player.Question3 player.participant.absolutebelief = player.Question2 page_sequence = [StartPage, Part2_0, Part2_0_1, Part2_1] #Eessential part for testing # page_sequence = [Part2_1]