from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'representativeness' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): #リンダ問題Aを選んだ人数 linda_number_a = models.IntegerField(initial=0) #リンダ問題Bを選んだ人数 linda_number_b = models.IntegerField(initial=0) #リンダ問題Aを選んだ人の割合 linda_number_a_per = models.FloatField() #リンダ問題Bを選んだ人数の割合 linda_number_b_per = models.FloatField() #コイン投げ問題Aを選んだ人数 coin_number_a = models.IntegerField(initial=0) #コイン投げ問題Bを選んだ人数 coin_number_b = models.IntegerField(initial=0) #コイン投げ問題Cを選んだ人数 coin_number_c = models.IntegerField(initial=0) #コイン投げ問題Aを選んだ人の割合 coin_number_a_per = models.FloatField() #コイン投げ問題Bを選んだ人の割合 coin_number_b_per = models.FloatField() #コイン投げ問題Cを選んだ人の割合 coin_number_c_per = models.FloatField() class Group(BaseGroup): pass class Player(BasePlayer): selection_linda = models.IntegerField( label="あなたの選択:", widget=widgets.RadioSelect, initial=0, choices=[ [1,'リンダは銀行員である。'], [2,'リンダはフェミニズム運動に参加している銀行員である。'] ] ) selection_coin = models.IntegerField( label="あなたの選択:", widget=widgets.RadioSelect, initial=0, choices=[ [1,'次に表が出る可能性が大きい。'], [2,'次に裏が出る可能性が大きい。'], [3,'次に表が出る可能性と裏が出る可能性と同じ。'] ] ) # PAGES class Wait_for_attend(Page): pass class Linda(Page): form_model = "player" form_fields=["selection_linda"] class Coin(Page): form_model = "player" form_fields=["selection_coin"] class ResultsWaitPage(WaitPage): def after_all_players_arrive(group: Group): subsession_infor = group.subsession player_infor = subsession_infor.get_players() for p in player_infor: if p.selection_linda == 1: subsession_infor.linda_number_a = subsession_infor.linda_number_a + 1 elif p.selection_linda == 2: subsession_infor.linda_number_b = subsession_infor.linda_number_b + 1 subsession_infor.linda_number_a_per = subsession_infor.linda_number_a / ( subsession_infor.linda_number_a + subsession_infor.linda_number_b ) subsession_infor.linda_number_b_per = subsession_infor.linda_number_b / ( subsession_infor.linda_number_a + subsession_infor.linda_number_b ) for p in player_infor: if p.selection_coin == 1: subsession_infor.coin_number_a = subsession_infor.coin_number_a + 1 elif p.selection_coin == 2: subsession_infor.coin_number_b = subsession_infor.coin_number_b + 1 elif p.selection_coin == 3: subsession_infor.coin_number_c = subsession_infor.coin_number_c + 1 subsession_infor.coin_number_a_per = subsession_infor.coin_number_a / ( subsession_infor.coin_number_a + subsession_infor.coin_number_b + subsession_infor.coin_number_c ) subsession_infor.coin_number_b_per = subsession_infor.coin_number_b / ( subsession_infor.coin_number_a + subsession_infor.coin_number_b + subsession_infor.coin_number_c ) subsession_infor.coin_number_c_per = subsession_infor.coin_number_c / ( subsession_infor.coin_number_a + subsession_infor.coin_number_b + subsession_infor.coin_number_c ) #groupを超えてAを選んだ人の数を統計したい場合 # subsession_A = group.subsession # player_id_se = subsession_A.get_players() # for p in player_id_se: # if p.selection_a == 1: # group.alive_number_cho_a = group.alive_number_cho_a + 1 # elif p.selection_a == 2: # group.alive_number_cho_b = group.alive_number_cho_b + 1 class Results(Page): #@staticmethod def js_vars(player): subsession_infor = player.subsession#該当playerがいるsubsessionデータを抽出 return dict( linda_a_per = subsession_infor.linda_number_a_per, linda_b_per = subsession_infor.linda_number_b_per, coin_a_per = subsession_infor.coin_number_a_per, coin_b_per = subsession_infor.coin_number_b_per, coin_c_per = subsession_infor.coin_number_c_per # alive_a = [group.alive_number_cho_a, group.alive_number_cho_b], # die_a = [group.die_number_cho_a, group.die_number_cho_b] #あるいは、testlist = [ player.alive_number_cho_a_player, player.alive_number_cho_b_player ] ) page_sequence = [ Wait_for_attend, Linda, Coin, ResultsWaitPage, Results ]