from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) doc = """ このゲームは1人で行う寄付ゲームです. """ 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 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)', ) def creating_session(self): import random for p in self.get_players(): w = [1, 12] choice_name = ['当選', '落選'] mirai = random.choices(choice_name, k=1, weights=w ) p.results_announce = mirai[0] class Group(BaseGroup): pass class Player(BasePlayer): contribution = models.CurrencyField( min=0, max=Constants.endowment, doc="""The amount contributed by the player""" ) donate = models.CharField(initial=None, choices=['寄付する', '寄付しない'], verbose_name='寄付を行いますか?', widget=widgets.RadioSelect()) results_announce = models.CharField() def set_payoff(self): """Calculate payoff, to be implemented later """ self.payoff = 0