from otree.api import * doc = """ K.Yakushiji """ class Constants(BaseConstants): name_in_url = 'Decision1' players_per_group = None num_rounds = 6 time = 15 time_decision = 30 c = 5 n = 0 dice= [1,2,3,4,5,6] TableContents = dict( Basic_treatment =list(zip(["a","b","c","d"],[200,630,810,100],[300,770,990,110],[100,700,900, 90])), Basic_control = list(zip(["a","b","c","d"],[1000,630,810,100],[1100,770,990,110],[900,700,900,90])), High_treatment =list(zip(["a","b","c","d"],[1000,4320,1200,3510],[1500,5280,1320,4290],[500,4800,1080,3900])), High_control = list(zip(["a","b","c","d"],[1200,4320,5000,3510],[1320,5280,5500,4290],[1080,4800,4580,3900])), Zero_treatment =list(zip(["a","b","c","d"],[150,450,1200,800],[450,550,1320,880],[300,500,1080,720])), Zero_control = list(zip(["a","b","c","d"],[1350,450,1200,800],[1650,550,1320,880],[1500,500,1080,720],)), ) TreatmentNames = ["Basic_treatment","Basic_control","High_treatment","High_control","Zero_treatment","Zero_control"] TableHeaders = dict( AB = ["商品","A店","参考価格","B店"], CD = ["商品","C店","参考価格","D店"], EF = ["商品","E店","参考価格","F店"], GH = ["商品","G店","参考価格","H店"], IJ = ["商品","I店","参考価格","J店"], KL = ["商品","K店","参考価格","L店"], ) HeaderNames = ["AB","CD","EF","GH","IJ","KL"] class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): import random for p in subsession.get_players(): treatment_vector = Constants.TreatmentNames.copy() HeaderNames_vector = Constants.HeaderNames.copy() dice_vector = Constants.dice.copy() random.shuffle(dice_vector) random.shuffle(treatment_vector) random.shuffle(HeaderNames_vector) p.participant.vars["treatment_vector"] = treatment_vector p.participant.vars["table_contents"] = Constants.TableContents.copy() p.participant.vars["headernames_vector"] = HeaderNames_vector p.participant.vars["tableheaders"] = Constants.TableHeaders.copy() p.participant.vars["dice"] = dice_vector class Group(BaseGroup): pass class Player(BasePlayer): current_treatment = models.StringField() dice = models.IntegerField() decision = models.StringField() point = models.IntegerField() totalpoints = models.IntegerField() # PAGES class Treatment1(Page): timeout_seconds = Constants.time @staticmethod def is_displayed(player: Player): player.current_treatment = player.participant.vars["treatment_vector"][player.round_number-1] return True @staticmethod def vars_for_template(player: Player): player.participant.vars["table_header"] = player.participant.vars["headernames_vector"][player.round_number -1] player.participant.vars["table_info"] = player.participant.vars["table_contents"][player.current_treatment] player.dice = player.participant.vars["dice"][player.round_number-1] return dict( dice = player.participant.vars["dice"][player.round_number-1], table_header = player.participant.vars["tableheaders"][player.participant.vars["table_header"]], table_info = player.participant.vars["table_info"] ) @staticmethod def before_next_page(player:Player,timeout_happened): if player.round_number == 1: player.participant.vars["point"] = 0 player.participant.vars["current_treatment"] = player.current_treatment class Decision(Page): timeout_seconds = Constants.time_decision form_model="player" form_fields=["decision"] @staticmethod def before_next_page(player: Player,timeout_happened): if timeout_happened: player.decision = "timeout" if player.participant.vars["current_treatment"] == "Zero_treatment" or player.participant.vars["current_treatment"] == "Zero_control": if player.dice == 1 or player.dice == 2 or player.dice == 3: if player.participant.vars["table_header"] =="AB" : exp= dict(A=Constants.c,B = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="CD" : exp= dict(C=Constants.c,D = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="EF": exp= dict(E=Constants.c,F= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="GH" : exp= dict(G=Constants.c,H = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="IJ": exp= dict(I=Constants.c,J= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="KL": exp= dict(K=Constants.c,L= Constants.c,timeout = Constants.n) else: pass elif player.dice == 4 or player.dice == 5 or player.dice == 6: if player.participant.vars["table_header"] =="AB" : exp= dict(A=Constants.c,B = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="CD" : exp= dict(C=Constants.c,D = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="EF": exp= dict(E=Constants.c,F= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="GH" : exp= dict(G=Constants.c,H = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="IJ": exp= dict(I=Constants.c,J= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="KL": exp= dict(K=Constants.c,L= Constants.c,timeout = Constants.n) else: pass else: pass else: if player.dice == 1 or player.dice == 2 or player.dice == 3: if player.participant.vars["table_header"] =="AB" : exp= dict(A=Constants.c,B = Constants.n,timeout = Constants.n) elif player.participant.vars["table_header"] =="CD" : exp= dict(C=Constants.c,D = Constants.n,timeout = Constants.n) elif player.participant.vars["table_header"] =="EF": exp= dict(E=Constants.c,F= Constants.n,timeout = Constants.n) elif player.participant.vars["table_header"] =="GH" : exp= dict(G=Constants.c,H = Constants.n,timeout = Constants.n) elif player.participant.vars["table_header"] =="IJ": exp= dict(I=Constants.c,J= Constants.n,timeout = Constants.n) elif player.participant.vars["table_header"] =="KL": exp= dict(K=Constants.c,L= Constants.n,timeout = Constants.n) else: pass elif player.dice == 4 or player.dice == 5 or player.dice == 6: if player.participant.vars["table_header"] =="AB" : exp= dict(A=Constants.n,B = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="CD" : exp= dict(C=Constants.n,D = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="EF": exp= dict(E=Constants.n,F= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="GH" : exp= dict(G=Constants.n,H = Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="IJ": exp= dict(I=Constants.n,J= Constants.c,timeout = Constants.n) elif player.participant.vars["table_header"] =="KL": exp= dict(K=Constants.n,L= Constants.c,timeout = Constants.n) else: pass else: pass player.point = exp[player.decision] player.participant.vars["point"] += player.point player.totalpoints = player.participant.vars["point"] @staticmethod def vars_for_template(player: Player): if player.participant.vars["table_header"] == "AB": player.participant.vars["left"] = "A" player.participant.vars["right"] = "B" elif player.participant.vars["table_header"] == "CD": player.participant.vars["left"] = "C" player.participant.vars["right"] = "D" elif player.participant.vars["table_header"] == "EF": player.participant.vars["left"] = "E" player.participant.vars["right"] = "F" elif player.participant.vars["table_header"] == "GH": player.participant.vars["left"] = "G" player.participant.vars["right"] = "H" elif player.participant.vars["table_header"] == "IJ": player.participant.vars["left"] = "I" player.participant.vars["right"] = "J" elif player.participant.vars["table_header"] == "KL": player.participant.vars["left"] = "K" player.participant.vars["right"] = "L" else: pass return dict( table_header = player.participant.vars["tableheaders"][player.participant.vars["table_header"]], table_info = player.participant.vars["table_info"], left = player.participant.vars["left"], right = player.participant.vars["right"], ) page_sequence = [Treatment1,Decision]