from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'Results' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): MyPayRound = models.IntegerField(initial=0) MyGenderGuess1 = models.IntegerField(initial=0, min=-100, max=100) MyGenderGuess2 = models.IntegerField(initial=0, min=-100, max=100) MyPayPart1 = models.FloatField(initial=0) MyPayPart2 = models.FloatField(initial=0) MyTaskPay = models.FloatField(initial=0) TotalPay = models.FloatField(initial=0) def calc_total(player: Player): pay_base = player.MyPayRound-1 my_guess_pay = player.participant.MyGuessData[pay_base][12] my_speed_pay = player.participant.MyGuessData[pay_base][9] player.MyTaskPay = round(my_guess_pay + my_speed_pay / 100, 2) player.participant.payoff = player.MyTaskPay player.TotalPay = player.participant.ShowUpFee + round(player.MyTaskPay, 2) def common_vars(player: Player): pay_base = player.MyPayRound - 1 return dict( payment_code=player.participant.code, pay_round=player.MyPayRound, q=player.participant.MyGuessData[pay_base][0], a="{:,}".format(player.participant.MyGuessData[pay_base][1]), guess="{:,}".format(int(player.participant.MyGuessData[pay_base][2])), discrepancy=round(player.participant.MyGuessData[pay_base][10]), guess_pay=cu(player.participant.MyGuessData[pay_base][12]), speed_pay=cu(player.participant.MyGuessData[pay_base][9]/100), task_pay=cu(player.MyTaskPay), show_up_fee=cu(player.participant.ShowUpFee), total_pay=cu(player.TotalPay) ) # PAGES class P01Gender(Page): form_model = 'player' form_fields = ['MyGenderGuess1', 'MyGenderGuess2'] @staticmethod def vars_for_template(player: Player): return dict( keyword1=player.participant.MyGuessData[0][13], keyword2 = player.participant.MyGuessData[1][13] ) @staticmethod def before_next_page(player, timeout_happened): import random player.MyPayRound = random.randint(1, 2) player.participant.finished = True class P02End(Page): @staticmethod def vars_for_template(player): calc_total(player) return common_vars(player) class ResultsWaitPage(WaitPage): pass page_sequence = [P01Gender, P02End]