from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Introduction(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class First(Page): form_model = 'player' form_fields = ['Invest', 'sell', 'Guess'] def is_displayed(self): return self.round_number == 1 def error_message(self, values): pass if values['sell'] != 0: return '您手上还没有股票,不能出售' if values['Invest'] > 10: return '您没有足够的现金购买如此多的股票' class Follow(Page): form_model = 'player' form_fields = ['Invest', 'sell', 'Guess'] def is_displayed(self): return self.round_number > 1 def vars_for_template(self): import random if self.player.round_number ==1: self.player.price=10 #return [self.in_round(self.round_number).price] if self.player.round_number >= 2: p=random.randint(0,100) if p>=40: print("1", self.player.in_round(self.round_number-1).price) print("2",self.player.price) self.player.price=self.player.in_round(self.round_number-1).price*(1.05) #return self.price if p<40: print("1", self.player.in_round(self.round_number-1).price) print("2",self.player.price) self.player.price=self.player.in_round(self.round_number-1).price * 0.95 if self.player.round_number ==1 : print("3",self.player.Cash) self.player.Cash = 100 #return [self.in_round(self.round_number).Cash] if self.player.round_number >= 2: self.player.Cash = self.player.in_round(self.round_number-1).Cash - self.player.in_round(self.round_number-1).price * self.player.in_round(self.round_number-1).Invest + self.player.in_round(self.round_number-1).price * self.player.in_round(self.round_number-1).sell #return [self.in_round(self.round_number).Cash] if self.player.round_number ==1 : self.player.Stock=0 #return [self.in_round(self.round_number).Stock] if self.player.round_number >= 2: self.player.Stock=self.player.in_round(self.round_number-1).Stock-self.player.in_round(self.round_number-1).sell+self.player.in_round(self.round_number-1).Invest #return [self.in_round(self.round_number).Stock] if self.player.round_number ==1 : self.player.Total=1000 #return [self.in_round(self.round_number).Stock] if self.player.round_number >= 2: self.player.Total=self.player.Stock * self.player.price +self.player.Cash #return [self.in_round(self.round_number).Stock] return dict() def error_message(self, values): pass if values['sell'] >self.player.Stock: return '您没有这么多股票可供出售' if values['Invest'] > (self.player.Cash / self.player.price): return '您没有足够现金购买如此多数量股票' class Results(Page): form_model = 'player' def is_displayed(self): return self.round_number >= 40 def vars_for_template(self): a=self.player.in_round(self.round_number-15).Guess self.player.payoff=self.player.total // 10 if a >= a and a <= 50: self.player.Right=10 if a>50: self.player.Right=0 if a<30: self.player.Right=0 return dict( a=a, tt=self.player.payoff+self.player.Right) page_sequence = [Introduction, First, Follow, Results]