from otree.api import * doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'part_4' players_per_group = None num_rounds = 1 left_side_amounts = [18, 16, 12, 8, 4, 2] right_side_amounts = [18, 26, 34, 40, 48, 50] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): gamble_selection = models.IntegerField(widget=widgets.RadioSelect, choices=[['1', 'Option 1- Event A: 18 Event B: 18'], ['2', 'Option 2- Event A: 16 Event B: 26'], ['3', 'Option 3- Event A: 12 Event B: 34'], ['4', 'Option 4- Event A: 8 Event B: 40'], ['5', 'Option 5- Event A: 4 Event B: 48'], ['6', 'Option 6- Event A: 2 Event B: 50']]) realized_event = models.IntegerField(choices=[['1,' 'Event A'], ['2', 'Event B']]) gamble_selection_string = models.StringField() part_4_earnings = models.IntegerField() # Functions def set_payoffs(subsession: Subsession): players = subsession.get_players() import random for p in players: if p.gamble_selection == 1: p.gamble_selection_string = 'Option 1- Event A: 18 Event B: 18' elif p.gamble_selection == 2: p.gamble_selection_string = 'Option 2- Event A: 16 Event B: 26' elif p.gamble_selection == 3: p.gamble_selection_string = 'Option 3- Event A: 12 Event B: 34' elif p.gamble_selection == 4: p.gamble_selection_string = 'Option 4- Event A: 8 Event B: 40' elif p.gamble_selection == 5: p.gamble_selection_string = 'Option 5- Event A: 4 Event B: 48' else: p.gamble_selection_string = 'Option 6- Event A: 2 Event B: 50' draw_event = random.uniform(1, 2) # Randomly choosing up or down p.realized_event = int(round(draw_event, 0)) if p.realized_event == 1: if p.gamble_selection == 1: p.part_4_earnings = Constants.left_side_amounts[0] elif p.gamble_selection == 2: p.part_4_earnings = Constants.left_side_amounts[1] elif p.gamble_selection == 3: p.part_4_earnings = Constants.left_side_amounts[2] elif p.gamble_selection == 4: p.part_4_earnings = Constants.left_side_amounts[3] elif p.gamble_selection == 5: p.part_4_earnings = Constants.left_side_amounts[4] else: p.part_4_earnings = Constants.left_side_amounts[5] else: if p.gamble_selection == 1: p.part_4_earnings = Constants.right_side_amounts[0] elif p.gamble_selection == 2: p.part_4_earnings = Constants.right_side_amounts[1] elif p.gamble_selection == 3: p.part_4_earnings = Constants.right_side_amounts[2] elif p.gamble_selection == 4: p.part_4_earnings = Constants.right_side_amounts[3] elif p.gamble_selection == 5: p.part_4_earnings = Constants.right_side_amounts[4] else: p.part_4_earnings = Constants.right_side_amounts[5] # PAGES class IntroWaitPage(WaitPage): pass class Instructions(Page): pass class InstructionsWaitPage(WaitPage): pass class Decision(Page): form_model = 'player' form_fields = ['gamble_selection'] @staticmethod def vars_for_template(group: Group): return dict(num_choices=(1, 2, 3, 4, 5, 6), left_side_amounts=(18, 20, 22, 24, 28, 31, 35)) class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' class Results(Page): @staticmethod def before_next_page(player: Player, timeout_happened): participant = player.participant participant.part_4_earnings = player.part_4_earnings print('Risk Aversion Earnings', player.part_4_earnings) page_sequence = [IntroWaitPage, Instructions, InstructionsWaitPage, Decision, ResultsWaitPage, Results]