from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random doc = """ このゲームは1人で行う寄付ゲームです. """ class Constants(BaseConstants): name_in_url = 'contributionB' num_rounds = 1 players_per_group = None instructions_template = 'contributionB/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(): p.matching_rate = random.choice(['25','50','75','100']) 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()) matching_rate = models.CharField() results_announce = models.CharField() future = models.CurrencyField() def set_payoff(self): """Calculate payoff, to be implemented later """ self.payoff = 0