from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'CPR_AM_Maj_Min_New' players_per_group = 4 num_rounds = 1 group_endowment = c(40) multiplier = 2 class Subsession(BaseSubsession): pass class Group(BaseGroup): total_extraction = models.CurrencyField() individual_share= models.CurrencyField() extractions = list def set_extractions(self): players = self.get_players() extractions = [p.extraction for p in players] print('extractions:', extractions) def set_payoffs(self): players = self.get_players() extractions = [p.extraction for p in players] print('first players extraction', extractions[0]) votes = [p.vote for p in players] print('votes:', votes) count=votes.count(True) print(count) if count<=2: self.total_extraction = 0 print('group total extraction if no agreement:', self.total_extraction) elif count >2: self.total_extraction = sum(extractions) print('group total extraction if agreement:', self.total_extraction) self.individual_share = ( Constants.multiplier * (Constants.group_endowment-self.total_extraction) / Constants.players_per_group ) for p in players: if count <= 2: p.payoff = self.individual_share print('extractions after desagree', 0) elif count > 2: p.payoff = p.extraction + self.individual_share print('payoffs:', p.payoff) # class Group(BaseGroup): # total_extraction = models.CurrencyField() # individual_share= models.CurrencyField() # # # def set_payoffs(self): # players = self.get_players() # extractions = [p.extraction for p in players] # print('extractions:', extractions) # self.total_extraction = sum(extractions) # self.individual_share = ( # Constants.multiplier * (Constants.group_endowment-self.total_extraction) / Constants.players_per_group # ) # for p in players: # p.payoff = p.extraction + self.individual_share # print('payoffs:', p.payoff) class Player(BasePlayer): extraction = models.CurrencyField( min=0, max= Constants.group_endowment/Constants.players_per_group, label='' ) # proposal = models.CurrencyField( # min=0, # max= Constants.group_endowment/Constants.players_per_group, # label='how much do you want to propose?' # ) vote = models.BooleanField( label='' )