from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Instruction(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.wealth=Constants.endowment self.group.treatment() self.player.p1=self.participant.vars['p1'] class Example(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class FirstStage(Page): form_model = 'player' form_fields = ['initial'] def before_next_page(self): if self.round_number==1: self.player.wealth=Constants.endowment else: self.player.wealth=self.player.in_round(self.round_number - 1).wealth if self.player.initial==0: self.player.fail1=False else: import random rand1=random.random() self.player.fail1=rand1>=self.participant.vars['p1'] if self.player.fail1==False: self.player.wealth=(self.player.wealth-self.player.initial)*(1+Constants.r)+Constants.multi*self.player.initial if self.round_number==Constants.num_rounds: self.participant.payoff=self.player.wealth class SecondStage(Page): form_model = 'player' form_fields = ['complementary'] def is_displayed(self): return self.player.fail1 def before_next_page(self): self.player.p2=max(0,min(float(Constants.a*self.player.complementary/self.player.initial),1)) import random rand2=random.random() self.player.fail2=rand2>=self.player.p2 if self.player.fail2==True: self.player.wealth=(self.player.wealth-self.player.initial-self.player.complementary)*(1+Constants.r) else: self.player.wealth=(self.player.wealth-self.player.initial-self.player.complementary)*(1+Constants.r)+self.player.initial*Constants.multi if self.round_number==Constants.num_rounds: self.participant.payoff=self.player.wealth class EndofRound(Page): form_model = 'player' def is_displayed(self): return self.round_number != Constants.num_rounds class EndofGame(Page): form_model = 'player' form_fields = ['gender', 'email'] def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [Instruction, Example, FirstStage, SecondStage, EndofRound, EndofGame]