from otree.api import * c = cu doc = '' class Constants(BaseConstants): name_in_url = 'mindgame' players_per_group = None num_rounds = 7 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): left_side = models.IntegerField() right_side = models.IntegerField() choose_side = models.StringField(choices=[['LEFT', 'Left'], ['RIGHT', 'Right']], label='Please select side which you have chosen', widget=widgets.RadioSelect) avg_sides = models.IntegerField() choose_variant = models.StringField(choices=[['first', 'Left'], ['second', 'Right']], label='What variant you prefer?', widget=widgets.RadioSelect) payoff_first = models.IntegerField() category_person = models.IntegerField() high_number = models.IntegerField() low_number = models.IntegerField() fall_number = models.IntegerField() prob_left = models.FloatField() prob_right = models.FloatField() left_url = models.StringField() right_url = models.StringField() my_payoff = models.IntegerField() class Intro(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): import random list_possibilities = [[2,6], [2,12], [6,12], [6,2], [12,2], [12,6]] v = random.choice([0,1,2,3,4,5]) player.left_side = list_possibilities[v][0] player.right_side = list_possibilities[v][1] player.avg_sides = (player.right_side+player.left_side)//2 player.high_number = max(player.left_side, player.right_side) player.low_number = min(player.left_side, player.right_side) list_possible = [player.high_number, player.low_number] player.fall_number = random.choices(list_possible, weights=[0.67, 0.33], k=1)[0] if player.high_number == player.left_side: player.prob_left = 0.33 player.prob_right = 0.67 else: player.prob_left = 0.67 player.prob_right = 0.33 class Variants_first_game(Page): form_model = 'player' form_fields = ['choose_variant'] @staticmethod def before_next_page(player, timeout_happened): #import random if player.choose_variant == 'first': player.payoff_first = player.avg_sides player.category_person = 1 else: player.payoff_first = player.fall_number if player.payoff_first < player.avg_sides: player.category_person = 2 else: player.category_person = 3 class Result_first(Page): form_model = 'player' class Choose_side(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.left_url = f"https://raw.githubusercontent.com/myupeshkov/Behavioural_economics/main/{player.left_side}.png" player.right_url = f"https://raw.githubusercontent.com/myupeshkov/Behavioural_economics/main/{player.right_side}.png" #import random #list_possibilities = [[2,4], [2,10], [2,20], [4,10], [4,20], [10,20],[4,2], [10,2], [20,2], [10,4], [20,4], [20,10]] #v = random.choice([0,1,2,3,4,5,6,7,8,9,10,11]) #player.left_side = list_possibilities[v][0] #player.right_side = list_possibilities[v][1] class Numbers(Page): form_model = 'player' form_fields = ['choose_side'] @staticmethod def before_next_page(player, timeout_happened): if player.choose_side == 'LEFT': player.my_payoff = player.left_side+player.payoff_first else: player.my_payoff = player.right_side+player.payoff_first class Results(Page): form_model = 'player' class Final_page(Page): form_model = 'player' @staticmethod def is_displayed(player): if player.round_number == Constants.num_rounds: return True page_sequence = [Intro, Variants_first_game, Result_first, Choose_side, Numbers, Results, Final_page]