from otree.api import * doc = """ Your app description """ #定数を定義 class C(BaseConstants): NAME_IN_URL = 'my_trust' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 ENDOWMENT = cu(10) MULTIPLIER = 3 #集計する変数をクラス毎に定義 class Subsession(BaseSubsession): pass #役割が分かれている場合グループで定義 class Group(BaseGroup): sent_amount = models.CurrencyField( label="How much do you want to send to participant B?" ) sent_back_amount = models.CurrencyField( label="How much do you want to send back?" ) class Player(BasePlayer): pass #Function(はどこにでも書いて良い) """ def unknouwn(class): class.variable 定義された変数 get_player_by_id 既にある関数 import pythonの関数 などで対応 関数の実行は?→ returnがないものは宣言しなきゃ実行されない """ # 独特な関数_でつなぐ{field_name}_choices def sent_back_amount_choices(group): return currency_range( 0,group.sent_amount * C.MULTIPLIER,1 ) def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.payoff = C.ENDOWMENT - group.sent_amount + group.sent_back_amount p2.payoff = group.sent_amount * C.MULTIPLIER - group.sent_back_amount # PAGES 独特の関数を使える class Send(Page): form_model = 'group' form_fields = ['sent_amount'] @staticmethod def is_displayed(player): return player.id_in_group == 1 class WaitForP1(WaitPage): pass class SendBack(Page): form_model = 'group' form_fields = ['sent_back_amount'] @staticmethod def is_displayed(player): return player.id_in_group == 2 # player から始まりgroupを遡って関数内で定義これも独特 @staticmethod def vars_for_template(player): group = player.group return dict( tripled_amount=group.sent_amount * C.MULTIPLIER ) class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs # ここで関数使用 class Results(Page): pass page_sequence = [Send, WaitForP1, SendBack, ResultsWaitPage, Results]