from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from random import shuffle import random class RankingPage(Page): form_model = 'player' form_fields = ['rank1', 'rank2', 'rank3', 'rank4', 'rank5'] def vars_for_template(self): axorder = [] for x in range(5): axorder.append(x) shuffle(axorder) self.player.axord1 = axorder[0] self.player.axord2 = axorder[1] self.player.axord3 = axorder[2] self.player.axord4 = axorder[3] self.player.axord5 = axorder[4] p1 = Constants.all_axioms[self.player.axord1][0] p2 = Constants.all_axioms[self.player.axord2][0] p3 = Constants.all_axioms[self.player.axord3][0] p4 = Constants.all_axioms[self.player.axord4][0] p5 = Constants.all_axioms[self.player.axord5][0] return dict( p1=p1, p2=p2, p3=p3, p4=p4, p5=p5, ) def error_message(self, values): choices = [values['rank1'], values['rank2'], values['rank3'], values['rank4'], values['rank5']] # set() gives you distinct elements. if a list's length is different from its # set length, that means it must have duplicates. if len(set(choices)) != len(choices): return "You cannot choose the same principle twice." def before_next_page(self): self.player.set_payoffs() page_sequence = [RankingPage]