from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random from random import randint author = 'Castagnetti_Sharma' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'Ex_mainexperiment_B10' players_per_group = 2 num_rounds = 1 pot = c(350) highpayoff = c(550) lowpayoff = c(0) beliefpayoff = c(50) probability_c0 = 5 probability_c0com = 95 probability_c1 = 30 probability_c1com = 70 probability_c2 = 45 probability_c2com = 55 probability_c3 = 55 probability_c3com = 45 correct_Puzzles1 = c(1) correct_Puzzles2 = c(8) correct_Puzzles3 = c(5) randomnumber_names = random.randint(0,14) randomnumber_lottery = random.randint(0,100) showupfee = c(250) roundnumber = 10 tasknumber = 1 class Subsession(BaseSubsession): def before_session_starts(self): if self.round_number ==1: for p in self.get_players(): p.randomnumber_names = random.randint(0, 14) if self.round_number ==1: for p in self.get_players(): p.randomnumber_lottery = random.randint(0, 100) def set_rand_agent(self): players = self.get_players() return [p.participant.id_in_session for p in players if p.id_in_group==2] def set_gender(self): self.Gender1 = self.participant.vars['gender1'] def set_age(self): self.Age = self.participant.vars['age'] #def set_rand_agent_new(self): #players = self.set_rand_agent() # p2 = self.get_player_by_id(2) #return [p for p in players if not p == self.p2.participant.id_in_session] def creating_session(self): self.group_randomly (fixed_id_in_group=True) for g in self.get_groups(): p2 = g.get_player_by_id(2) others = [x for x in self.set_rand_agent() if p2.participant.id_in_session!=x] g.rand_agent = random.choice(others) def rand_payoff_agent1(self): p2 = [p for p in self.get_players() if p.id_in_group == 2 ] for x in p2: all_groups = self.get_groups() match = [g for g in all_groups if x.participant.id_in_session==g.rand_agent] x.final_pay_ran = sum([g.random_payoff for g in match]) or 0 class Group(BaseGroup): def set_payoff(self): if self.round_number == 1: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff = p2.profitP p2.payoff = p1.Decider_pay1 def set_beliefs(self): if self.round_number == 1: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.correctQ = p2.total def ran_pay(self): p1 = self.get_player_by_id(1) return p1.Decider_pay2 def ran_pay_final(self): if self.round_number == 1: self.random_payoff=self.ran_pay() random_payoff = models.CurrencyField() rand_agent = models.IntegerField() class Player (BasePlayer): randomnumber_names = models.IntegerField () randomnumber_lottery = models.IntegerField () genderap = models.IntegerField() ageap = models.IntegerField () ageother = models.IntegerField () def genderapp(self): self.genderap = self.participant.vars['gender1'] def ageapp(self): self.ageap = self.participant.vars['age'] def age_other(self): self.ageother = self.get_partner().ageap def role(self): if self.id_in_group == 1: return 'Decider' if self.id_in_group == 2: return 'Performer' def get_partner(self): return self.get_others_in_group()[0] def name(self): if self.get_partner().genderap == 1: return ['Mayank', 'Aaditya', 'Deepak', 'Vaibhav', 'Prateek', 'Ankit', 'Raghav', 'Rishabh', 'Akash', 'Kunal', 'Nitin', 'Ashish', 'Manish', 'Rohan', 'Amit'][self.randomnumber_names] if self.get_partner().genderap == 2: return ['Priya', 'Sakshi', 'Simran', 'Tanvi', 'Anjali', 'Tanu', 'Ishita', 'Seema', 'Akansha', 'Krithika', 'Neha', 'Priyanka', 'Aastha', 'Nishi', 'Sneha'][self.randomnumber_names] def pronoun(self): if self.get_partner().genderap == 1: return ['he'][0] if self.get_partner().genderap == 2: return ['she'][0] def Pronoun(self): if self.get_partner().genderap == 1: return ['him'][0] if self.get_partner().genderap == 2: return ['her'][0] Puzzles1 = models.IntegerField ( choices=[1, 2, 3, 4, 5, 6, 7,8], blank=True ) Puzzles2 = models.IntegerField ( choices=[1, 2, 3, 4, 5, 6, 7,8], blank = True ) Puzzles3 = models.IntegerField ( choices=[1, 2, 3, 4, 5, 6, 7,8], blank = True ) Puzzles_Q1_correct = models.IntegerField() Puzzles_Q2_correct = models.IntegerField() Puzzles_Q3_correct = models.IntegerField() # defining the number of correct answers given by the performer Belief1 = models.CurrencyField ( choices=[0, 1, 2, 3] ) Belief2 = models.IntegerField ( choices = [ [1, 'Yes'], [2, 'No'], ] ) Belief3 = models.IntegerField ( choices=[0, 1, 2, 3] ) # Decider_pay2 = models.FloatField (min=0, max=10) SelfBelief1 = models.IntegerField ( choices=[0, 1, 2, 3] ) SelfBelief2 = models.IntegerField ( choices=[ [1, Constants.lowpayoff], [2, Constants.highpayoff], ], widget=widgets.RadioSelectHorizontal ) SelfBelief3 = models.FloatField (min=0, max=100) Decider_pay1 = models.CurrencyField() Decider_pay2 = models.CurrencyField() total = models.IntegerField () problottery = models.IntegerField () profitP = models.CurrencyField () correctQ = models.CurrencyField() final_pay_ran = models.CurrencyField () profitB = models.CurrencyField () final_payoff = models.CurrencyField() def set_payoff1(self): if Constants.correct_Puzzles1 == self.Puzzles1: self.Puzzles_Q1_correct = 1 * 1 if not Constants.correct_Puzzles1 == self.Puzzles1: self.Puzzles_Q1_correct = 0 * 0 def set_payoff2(self): if Constants.correct_Puzzles2 == self.Puzzles2: self.Puzzles_Q2_correct = 1 * 1 if not Constants.correct_Puzzles2 == self.Puzzles2: self.Puzzles_Q2_correct = 0 * 0 def set_payoff3(self): if Constants.correct_Puzzles3 == self.Puzzles3: self.Puzzles_Q3_correct = 1 * 1 if not Constants.correct_Puzzles3 == self.Puzzles3: self.Puzzles_Q3_correct = 0 * 0 def set_payoff_total(self): if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct == 3: self.total = 3 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct == 2: self.total = 2 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct == 1: self.total = 1 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct == 0: self.total = 0 def set_lottery(self): if self.total == 3: self.problottery = Constants.probability_c3 if self.total == 2: self.problottery = Constants.probability_c2 if self.total == 1: self.problottery = Constants.probability_c1 if self.total == 0: self.problottery = Constants.probability_c0 if self.total == None: self.problottery = Constants.probability_c0 def set_profitp1(self): if self.problottery >= self.randomnumber_lottery: self.profitP = Constants.highpayoff if not self.problottery >= self.randomnumber_lottery: self.profitP = Constants.lowpayoff def set_profitbeliefs(self): if self.id_in_group==1: if self.Belief1 == self.correctQ: self.profitB = Constants.beliefpayoff if not self.Belief1 == self.correctQ: self.profitB = 0 def final_pay_round(self): if self.id_in_group == 1: self.final_payoff = self.payoff + self.profitB + 250 if self.id_in_group == 2: self.final_payoff = self.payoff + self.final_pay_ran + 250