from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'income_gain' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 4 #決算が好景気かどうかについて #0は好決算、1は悪決算 SETTLEMENT = [0, 1, 0, 1] #ローリスクローリターンの株式 PAYOFF_A = [3, 1] #ハイリスクハイリターンの株式 PAYOFF_B = [4, 0] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): income_stock_choice = models.IntegerField( choices=[ [4, '株式Aを4、株式Bを0購入する'], [3, '株式Aを3、株式Bを1購入する'], [2, '株式Aを2、株式Bを2購入する'], [1, '株式Aを1、株式Bを3購入する'], [0, '株式Aを0、株式Bを1購入する'] ], verbose_name='あなたが投資する株式のポートフォリオを選んでください。' ) def set_payoff(player:Player): #株式Aの保有数を取得 number_A = player.income_stock_choice #株式Bの保有数を取得 number_B = 4 - number_A #株式Aの配当 income_A = number_A * C.PAYOFF_A[C.SETTLEMENT[player.round_number - 1]] #株式Bの配当 income_B = number_B * C.PAYOFF_B[C.SETTLEMENT[player.round_number - 1]] #配当の合計金額 income_total = income_A + income_B #PAYOFFに代入 player.payoff = income_total def set_payoffs(group: Group): for p in group.get_players(): set_payoff(p) # PAGES class MyPage(Page): pass class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): pass class DecisionIncome(Page): form_model = 'player' form_fields = [ 'income_stock_choice' ] page_sequence = [DecisionIncome, ResultsWaitPage, Results]