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_welcome' players_per_group = 2 num_rounds = 1 showupfee = c(3) class Subsession (BaseSubsession): 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_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): 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() class Player (BasePlayer): ComputerTerminal = models.IntegerField (min=1, max=20) Gender1 = models.IntegerField ( choices=[ [1, 'Male'], [2, 'Female'],] ) def set_gender(self): self.participant.vars['gender1'] = self.Gender1 Age = models.IntegerField (min=18, max=99) def set_age(self): self.participant.vars['age'] = self.Age Education1 = models.IntegerField ( choices=[ [1, 'Sociology'], [2, 'Commerce'], [3, 'Geography'], [4, 'Economics'], [5, 'Other'],] ) Education2 = models.IntegerField ( choices=[ [1, 'MA year 1'], [2, 'MA year 2'], [3, 'Mphil'], [4, 'PhD'], [5, 'Other'],] ) Country = models.TextField ( widget=widgets.Textarea (attrs={'rows': 1, 'cols': 8}) ) State = models.TextField ( widget=widgets.Textarea (attrs={'rows': 1, 'cols': 8}) ) Language = models.IntegerField ( choices=[ [1, 'Yes'], [2, 'No'], ] ) Religion = models.IntegerField( choices=[ [1, 'Muslim'], [2, 'Hindu'], [3, 'Sikh'], [4, 'Christian'], [5, 'Buddhist'], [6, 'Parsi'], [7, 'Other'], [8, 'Prefer not say'], ] ) Caste = models.IntegerField( choices=[ [1, 'Scheduled Caste'], [2, 'Scheduled Tribe'], [3, 'Other backward castes'], [4, 'General'], [5, 'Other'], [6, 'Prefer not to say'], ] ) def role(self): if self.id_in_group == 1: return 'Decider' if self.id_in_group == 2: return 'Performer'