from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random from random import randrange author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'ambiguity' players_per_group = None num_rounds = 1 winner_prize = c(100) loser_prize = c(0) class Subsession(BaseSubsession): def creating_session(self): # randomize to treatments for player in self.get_players(): player.random_choice = randrange(0, 10) player.random_draw_a = randrange(0, 10) player.random_10 = randrange(1, 10) class Group(BaseGroup): pass class Player(BasePlayer): a_payoff = models.IntegerField() choice_0 = models.IntegerField() choice_1 = models.IntegerField() choice_2 = models.IntegerField() choice_3 = models.IntegerField() choice_4 = models.IntegerField() choice_5 = models.IntegerField() choice_6 = models.IntegerField() choice_7 = models.IntegerField() choice_8 = models.IntegerField() choice_9 = models.IntegerField() choice_10 = models.IntegerField() # number to determine ambiguous urn composition: 0 is 0 white balls random_draw_a = models.IntegerField() # number to determine the choice to be drawn random_choice = models.IntegerField() # player's pick: if this is <= than reference (self.random_choice if risky or self.random_draw_a if ambiguous), then he/she wins random_10 = models.IntegerField() # For the choice drawn, what was seleced by the player choice_drawn = models.IntegerField() # set player's payoff def set_payoffs(self): # this is to get the choice of the player: 1 urn A, 2 urn B self.choice_drawn = getattr(self, 'choice_{}'.format(int(self.random_choice))) # set player's payoff if self.choice_drawn == 1: if self.random_10 <= self.random_choice : self.payoff = Constants.winner_prize else: self.payoff = Constants.loser_prize else: if self.random_10 <= self.random_draw_a : self.payoff = Constants.winner_prize else: self.payoff = Constants.loser_prize # set payoff as global variable # ------------------------------------------------------------------------------------------------------------