from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) doc = """ This is a one-period public goods game with 3 players. """ class Constants(BaseConstants): name_in_url = 'contribution' num_rounds = 1 players_per_group = None instructions_template = 'contribution/instructions.html' # """Amount allocated to each player""" endowment = c(1000) class Group(BaseGroup): pass class Subsession(BaseSubsession): def vars_for_admin_report(self): contributions = [ p.contribution for p in self.get_players() if p.contribution != None ] if contributions: return dict( avg_contribution=sum(contributions) / len(contributions), min_contribution=min(contributions), max_contribution=max(contributions), ) else: return dict( avg_contribution='(no data)', min_contribution='(no data)', max_contribution='(no data)', ) p.payoff = (Constants.endowment - self.total_contribution) class Player(BasePlayer): contribution = models.CurrencyField( min=0, max=Constants.endowment, doc="""The amount contributed by the player""" )