from pyexpat import model from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'anchoring' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): #10を観測した被験者の数 anchor_10_number = models.FloatField(initial=0) #65を観測した被験者の数 anchor_65_number = models.FloatField(initial=0) #10を観測した被験者回答の足し anchor_10_total = models.FloatField(initial=0) #65を観測した被験者回答の足し anchor_65_total = models.FloatField(initial=0) #10を観測した被験者回答の平均値 anchor_10_ave = models.FloatField(initial=0) #65を観測した被験者回答の平均値 anchor_65_ave = models.FloatField(initial=0) def creating_session(Subsession): for player in Subsession.get_players(): player.ro_result = random.choice([10, 65]) class Group(BaseGroup): pass class Player(BasePlayer): ro_result = models.IntegerField() selection_ro_comp = models.IntegerField( label="あなたの選択:", widget=widgets.RadioSelect, initial=0, choices=[ [1,'ルーレットの出目より大きい'], [2,'ルーレットの出目より小さい'] ] ) selection_anchoring = models.IntegerField( label="あなたの回答:", initial=-1, min = 0, max = 100 ) # PAGES class Ro(Page): pass class Ro_results_afcom(Page): form_model = "player" form_fields=["selection_ro_comp"] class Anchoring(Page): form_model = "player" form_fields=["selection_anchoring"] 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.ro_result == 10 and p.selection_anchoring>0: subsession_infor.anchor_10_number = subsession_infor.anchor_10_number + 1 subsession_infor.anchor_10_total = subsession_infor.anchor_10_total + p.selection_anchoring elif p.ro_result == 65 and p.selection_anchoring>0: subsession_infor.anchor_65_number = subsession_infor.anchor_65_number + 1 subsession_infor.anchor_65_total = subsession_infor.anchor_65_total + p.selection_anchoring if subsession_infor.anchor_10_number>0: subsession_infor.anchor_10_ave = subsession_infor.anchor_10_total / subsession_infor.anchor_10_number else: subsession_infor.anchor_10_ave = 0 if subsession_infor.anchor_65_number>0: subsession_infor.anchor_65_ave = subsession_infor.anchor_65_total / subsession_infor.anchor_65_number else: subsession_infor.anchor_65_ave = 0 #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( anchor_10_ave = subsession_infor.anchor_10_ave, anchor_65_ave = subsession_infor.anchor_65_ave # 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 = [ Ro, Ro_results_afcom, Anchoring, ResultsWaitPage, Results ]