from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random class Constants(BaseConstants): name_in_url = 'gamble' players_per_group = None num_rounds = 5 initial_amount = 6 class Subsession(BaseSubsession): hello = models.FloatField() def creating_session(self): self.hello = 1.0 # w0 = models.FloatField() # w1 = models.FloatField() # min_g1 = models.FloatField() # max_g1 = models.FloatField() # C = models.FloatField() # C2 = models.FloatField() # final = models.FloatField() # w2 = models.FloatField() # def one_round(self): # random.seed(self.round_number) # self.w0 = Constants.initial_amount # self.C = round(random.uniform(0.9*self.w0, 1.05*self.w0), 1) # self.min_g1 = round(random.uniform(0.9*self.w0, self.w0), 1) # self.max_g1 = round(random.uniform(self.w0, 1.1*self.w0), 1) # self.w1 = round(random.uniform(self.min_g1, self.max_g1), 1) # self.w2 = 9999 # self.C2 = 1000 # self.final = 333.333 class Group(BaseGroup): pass class Player(BasePlayer): option_choice_1 = models.BooleanField(initial = False) option_choice_2 = models.BooleanField(initial = False) #final = models.FloatField() C = models.FloatField() w0 = models.FloatField() w1 = models.FloatField() min_g1 = models.FloatField() max_g1 = models.FloatField() C2 = models.FloatField() w2 = models.FloatField() min_g2 = models.FloatField() max_g2 = models.FloatField() final = models.FloatField() def stage_1(self): ### define first round self.w0 = Constants.initial_amount self.C = round(random.uniform(0.9*self.w0, 1.05*self.w0), 1) self.min_g1 = round(random.uniform(0.9*self.w0, 0.99*self.w0), 1) self.max_g1 = round(random.uniform(1.01*self.w0, 1.1*self.w0), 1) ### define first lottery winnings self.w1 = round(random.uniform(self.min_g1, self.max_g1), 1) def stage_2(self): ### define second round self.C2 = round(random.uniform(0.9*self.w1, 1.05*self.w1), 1) self.min_g2 = round(random.uniform(0.9*self.w1, 0.99*self.w1), 1) self.max_g2 = round(random.uniform(1.01*self.w1, 1.1*self.w1), 1) self.w2 = round(random.uniform(self.min_g2, self.max_g2), 1) def final_result(self): if (self.option_choice_1): if (self.option_choice_2): self.final = self.w2 else: self.final = self.C2 else: self.final = self.C # w0 = models.FloatField() # w1 = models.FloatField() # min_g1 = models.FloatField() # max_g1 = models.FloatField() # C = models.FloatField() # option_choice_1 = models.BooleanField(initial = False) # C2 = models.FloatField() # final = models.FloatField() # w2 = models.FloatField() # option_choice_2 = models.BooleanField(initial = False) # def one_round(self): # self.w0 = Constants.initial_amount # self.C = round(random.uniform(0.9*self.w0, 1.05*self.w0), 1) # self.min_g1 = round(random.uniform(0.9*self.w0, self.w0), 1) # self.max_g1 = round(random.uniform(self.w0, 1.1*self.w0), 1) # self.w1 = round(random.uniform(self.min_g1, self.max_g1), 1) # self.w2 = 9999 # self.C2 = 1000 # if (self.option_choice_1): # if (self.option_choice_2): # self.final = self.w2 # else: # self.final = self.C2 # else: # self.final = self.C