import random import itertools from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'Round1' PLAYERS_PER_GROUP = None NUM_ROUNDS = 5 NUM_LETTERS = 12 import random import copy KEY_LOW = ['A = 1', 'N = 9'] KEY_MED = ['A = 1', 'N = 9', 'F = 5'] KEY_HIGH = ['A = 1', 'N = 9', 'F = 5', 'S = 6',] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): letter_easy_1 = models.IntegerField(label='A', min=0, max=9) letter_easy_2 = models.IntegerField(label='A', min=0, max=9) letter_easy_3 = models.IntegerField(label='A', min=0, max=9) letter_easy_4 = models.IntegerField(label='A', min=0, max=9) letter_easy_5 = models.IntegerField(label='N', min=0, max=9) letter_easy_6 = models.IntegerField(label='N', min=0, max=9) letter_easy_7 = models.IntegerField(label='N', min=0, max=9) letter_easy_8 = models.IntegerField(label='N', min=0, max=9) letter_easy_9 = models.IntegerField(label='F', min=0, max=9) letter_easy_10 = models.IntegerField(label='F', min=0, max=9) letter_easy_11 = models.IntegerField(label='F', min=0, max=9) letter_easy_12 = models.IntegerField(label='F', min=0, max=9) letter_med_1 = models.IntegerField(label='A', min=0, max=9) letter_med_2 = models.IntegerField(label='A', min=0, max=9) letter_med_3 = models.IntegerField(label='A', min=0, max=9) letter_med_4 = models.IntegerField(label='N', min=0, max=9) letter_med_5 = models.IntegerField(label='N', min=0, max=9) letter_med_6 = models.IntegerField(label='N', min=0, max=9) letter_med_7 = models.IntegerField(label='F', min=0, max=9) letter_med_8 = models.IntegerField(label='F', min=0, max=9) letter_med_9 = models.IntegerField(label='F', min=0, max=9) letter_med_10 = models.IntegerField(label='S', min=0, max=9) letter_med_11 = models.IntegerField(label='S', min=0, max=9) letter_med_12 = models.IntegerField(label='S', min=0, max=9) tr_group = models.IntegerField() # FUNCTIONS def creating_session(subsession): #if subsession.round_number == 1: treatments = itertools.cycle([1, 2, 3, 4, 5]) for player in subsession.get_players(): player.tr_group = next(treatments) player.participant.tr_group = player.tr_group # PAGES class Instructions(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 1: return True else: return False class key(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 1: return True else: return False class Task_easy(Page): # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # time # text # ---------------------------------------------------------------------------------------------------------------- #timer_text = 'Time left to complete as many tasks as possible:' @staticmethod def is_displayed(player: Player): participant = player.participant if (participant.tr_group == 1 or participant.tr_group == 3) and player.round_number < C.NUM_ROUNDS + 1: return True else: return False @staticmethod def get_form_fields(player: Player): form_fields = ['letter_easy_1', 'letter_easy_2', 'letter_easy_3', 'letter_easy_4', 'letter_easy_5', 'letter_easy_6', 'letter_easy_7', 'letter_easy_8', 'letter_easy_9', 'letter_easy_10', 'letter_easy_11', 'letter_easy_12', ] random.shuffle(form_fields) return form_fields @staticmethod def vars_for_template(player: Player): return { 'round_number': player.round_number, 'tasks_left': 11 - player.round_number, } class Task_medium(Page): # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # time # text # ---------------------------------------------------------------------------------------------------------------- #timer_text = 'Time left to complete as many tasks as possible:' @staticmethod def is_displayed(player: Player): participant = player.participant if (participant.tr_group == 2 or participant.tr_group == 4 or participant.tr_group == 5) and player.round_number < C.NUM_ROUNDS + 1: return True else: return False @staticmethod def get_form_fields(player: Player): form_fields = ['letter_med_1', 'letter_med_2', 'letter_med_3', 'letter_med_4', 'letter_med_5', 'letter_med_6', 'letter_med_7', 'letter_med_8', 'letter_med_9', 'letter_med_10', 'letter_med_11', 'letter_med_12', ] random.shuffle(form_fields) return form_fields @staticmethod def vars_for_template(player: Player): return { 'round_number': player.round_number, 'tasks_left': 11 - player.round_number, } class feedback_easy(Page): # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # time # text # ---------------------------------------------------------------------------------------------------------------- #timer_text = 'Time left to complete as many tasks as possible:' @staticmethod def is_displayed(player: Player): participant = player.participant if (participant.tr_group == 1 or participant.tr_group == 3) and player.round_number < C.NUM_ROUNDS + 1: return True else: return False class feedback_medium(Page): # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # time # text # ---------------------------------------------------------------------------------------------------------------- #timer_text = 'Time left to complete as many tasks as possible:' @staticmethod def is_displayed(player: Player): participant = player.participant if (participant.tr_group == 2 or participant.tr_group == 4 or participant.tr_group == 4) and player.round_number < C.NUM_ROUNDS + 1: return True else: return False page_sequence = [Instructions, key, Task_easy, Task_medium, feedback_easy, feedback_medium,]