from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Round1(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * Constants.Basic_wage self.player.payoff == float(self.player.payoff) if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * Constants.Basic_wage - Constants.Basic_wage ) self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.total = self.player.payoffs + Constants.Basic_wage self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + Constants.Basic_wage * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.total = self.player.payoffs + Constants.Basic_wage self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round2(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round3(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round4(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round5(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round6(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round7(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round8(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round9(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round10(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round11(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round12(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round13(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round14(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round15(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round16(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round17(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round18(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round19(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None class Round20(Page): form_model = 'player' form_fields = ['Risk'] timeout_seconds = 90 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, ) def before_next_page(self): import numpy as np self.player.Risk = self.player.Risk / 100 self.player.Risk_copy = self.player.Risk self.player.Results_high = np.random.normal(loc=0.11, scale=0.302) self.player.Results_low = 0.025 self.player.a = self.player.Risk * self.player.total if self.player.Risk > 1: self.player.Risk_free_percent = 0 self.player.Debt = ( self.player.Risk * self.player.total - self.player.total ) # 计算需要偿还的债务一共有多少 self.player.payoffs = ( self.player.a * self.player.Results_high + 0 * Constants.rate - self.player.Debt * Constants.rate ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) else: self.player.Risk_free_percent = 1 - self.player.Risk_copy self.player.Debt = 0 self.player.payoffs = ( self.player.Results_high * self.player.a + self.player.total * self.player.Results_low - self.player.a * self.player.Results_low ) self.player.Results_high = round(self.player.Results_high, 3) self.player.Results_low = round(self.player.Results_low, 3) self.player.total = self.player.payoffs + self.player.total self.player.total = round(self.player.total, 2) self.player.payoffs = round(self.player.payoffs, 2) self.player.Risk = None self.player.payoff_decision = 0.0025 * self.player.total class Resultpage(Page): form_model = 'player' timeout_seconds = 60 def vars_for_template(self): return dict( Results_high=self.player.Results_high * 100, Risk_copy=self.player.Risk_copy * 100, Risk_free_percent=self.player.Risk_free_percent * 100, change=self.player.total - Constants.Basic_wage, ) class Payoffs(Page): form_model = 'player' timeout_seconds = 60 def vars_for_template(self): return dict(total=self.player.total * 0.01) class Risk_Attitude_Task(Page): form_model = 'player' timeout_seconds = 60 class Bomb(Page): form_model = 'player' form_fields = ['deletedCount'] def before_next_page(self): import random self.player.Bomb_location = random.randint(1, 100) if self.player.deletedCount < self.player.Bomb_location: self.player.payoff_bomb = self.player.deletedCount * 0.1 else: self.player.payoff_bomb = 0 class Loss_aversion_task(Page): form_model = 'player' form_fields = ['Choice1', 'Choice2', 'Choice3', 'Choice4', 'Choice5', 'Choice6'] timeout_seconds = 90 def before_next_page(self): import random self.player.n = random.randint(1, 6) self.player.n2 = random.randint(1, 2) if self.player.n == 1: if self.player.Choice1 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.03 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 elif self.player.n == 2: if self.player.Choice2 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.06 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 elif self.player.n == 3: if self.player.Choice3 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.09 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 elif self.player.n == 4: if self.player.Choice4 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.12 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 elif self.player.n == 5: if self.player.Choice5 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.15 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 else: if self.player.Choice6 == True: if self.player.n2 == 1: self.player.payoff_questionnaire = -0.15 else: self.player.payoff_questionnaire = 0.15 else: self.player.payoff_questionnaire = 0 class Final_Results(Page): form_model = 'player' page_sequence = [ Round1, Round2, Round3, Round4, Round5, Round6, Round7, Round8, Round9, Round10, Round11, Round12, Round13, Round14, Round15, Round16, Round17, Round18, Round19, Round20, Resultpage, Payoffs, Risk_Attitude_Task, Bomb, Loss_aversion_task, Final_Results, ]