from otree.api import * import random class Constants(BaseConstants): name_in_url = 'payment_app' players_per_group = None increment=60 num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): final_result = models.IntegerField() cardflip_exp_order = models.IntegerField() cardflip_exp_round = models.IntegerField() cardflip_exp_search_num = models.LongStringField() cardflip_exp_ave_num = models.FloatField() cardflip_exp_result = models.IntegerField() search_exp_order = models.IntegerField() search_exp_round = models.IntegerField() search_exp_search_num = models.LongStringField() search_exp_ave_num = models.FloatField() search_exp_result = models.IntegerField() # auto_exp_order = models.IntegerField() # auto_exp_round = models.IntegerField() # auto_exp_search_num = models.LongStringField() # auto_exp_ave_num = models.FloatField() # auto_exp_result = models.IntegerField() brown_exp_order = models.IntegerField() brown_exp_round = models.IntegerField() brown_exp_search_num = models.LongStringField() brown_exp_ave_num = models.FloatField() brown_exp_result = models.IntegerField() Z = models.IntegerField(initial=0) X = models.IntegerField(initial=0) prob = models.IntegerField(initial=0) Lot = models.StringField(initial="なし") Type = models.StringField(initial="なし") MPL_result = models.IntegerField(initial=0) pass # FUNCTIONS def make_result(player: Player): # cardflip_exp player.cardflip_exp_order = player.participant.vars.get('cardflip_exp_order') cardflip_exp_search_num = player.participant.vars.get('cardflip_exp_num') player.cardflip_exp_search_num =','.join([str(i) for i in cardflip_exp_search_num ]) player.cardflip_exp_ave_num =sum(cardflip_exp_search_num )/len(cardflip_exp_search_num ) cardflip_exp_sequence=player.participant.vars.get('cardflip_exp_result') cardflip_exp_round=random.choice(range(0,len(cardflip_exp_sequence))) player.cardflip_exp_round=cardflip_exp_round+1 player.cardflip_exp_result=cardflip_exp_sequence[cardflip_exp_round] # search_exp player.search_exp_order = player.participant.vars.get('search_exp_order') search_exp_search_num = player.participant.vars.get('search_exp_num') player.search_exp_search_num = ','.join([str(i) for i in search_exp_search_num ]) player.search_exp_ave_num = sum(search_exp_search_num)/len(search_exp_search_num) search_exp_sequence=player.participant.vars.get('search_exp_result') search_exp_round=random.choice(range(0,len(search_exp_sequence))) player.search_exp_round=search_exp_round+1 player.search_exp_result=search_exp_sequence[search_exp_round] # # auto_exp # player.auto_exp_order = player.participant.vars.get('auto_exp_order') # auto_exp_search_num = player.participant.vars.get('auto_exp_num') # player.auto_exp_search_num = ','.join([str(i) for i in auto_exp_search_num ]) # player.auto_exp_ave_num = sum(auto_exp_search_num)/len(auto_exp_search_num) # auto_exp_sequence=player.participant.vars.get('auto_exp_result') # auto_exp_round=random.choice(range(0,len(auto_exp_sequence))) # player.auto_exp_round=auto_exp_round+1 # player.auto_exp_result=auto_exp_sequence[auto_exp_round] # brown_exp player.brown_exp_order = player.participant.vars.get('brown_exp_order') brown_exp_search_num = player.participant.vars.get('brown_exp_num') player.brown_exp_search_num = ','.join([str(i) for i in brown_exp_search_num ]) player.brown_exp_ave_num = sum(brown_exp_search_num )/len(brown_exp_search_num ) brown_exp_sequence=player.participant.vars.get('brown_exp_result') brown_exp_round=random.choice(range(0,len(brown_exp_sequence))) player.brown_exp_round=brown_exp_round+1 player.brown_exp_result=brown_exp_sequence[brown_exp_round] MPL_choise=list(player.participant.vars.get('MPL_result')) if MPL_choise=="": print(MPL_choise) else: X=random.randint(1,len(MPL_choise)) player.X=X player.prob=X*5 Z=random.randint(1,100) player.Z=Z if MPL_choise[X-1]=="B": player.Lot="くじB" if Z<=player.prob: player.Type="高い報酬" player.MPL_result=900 else: player.Type="低い報酬" player.MPL_result=0 else: player.Lot="くじA" if Z<=player.prob: player.Type="高い報酬" player.MPL_result=600 else: player.Type="低い報酬" player.MPL_result=300 player.final_result=player.cardflip_exp_result*Constants.increment+player.search_exp_result*Constants.increment+player.brown_exp_result*Constants.increment+player.MPL_result # PAGES class Lot(Page): # def vars_for_template(player: Player): make_result(player) pass class PaymentInfo(Page): @staticmethod def vars_for_template(player): result_dict={player.cardflip_exp_order:[player.cardflip_exp_round,player.cardflip_exp_result], player.search_exp_order:[player.search_exp_round,player.search_exp_result], player.brown_exp_order:[player.brown_exp_round,player.brown_exp_result] } order=sorted(result_dict,reverse=True) result={} part=1 for i in order: result["part_"+str(part)+"_round"]=result_dict[i][0] result["part_"+str(part)+"_result"]=result_dict[i][1] part=part+1 return result pass # page_sequence = [Lot,PaymentInfo] page_sequence = [PaymentInfo]