from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random, itertools, csv, pandas as pd, math class Constants(BaseConstants): name_in_url = 'quiz_and_beliefs' players_per_group = None num_rounds = 1 # Parameters describing the payoff and time lower_exp_payment = c(5) upper_exp_payment = c(10) average_payment = c(7.5) average_time = 15 # Number of screening questions screening_max = 3 class Subsession(BaseSubsession): def before_session_starts(self): pass def creating_session(self): with open('iq_test/Answers.csv') as matrix_file: self.session.vars['matrices'] = list(csv.DictReader(matrix_file)) self.session.vars['num_questions'] = len(self.session.vars['matrices']) for p in self.get_players(): p.participant.vars['remaining_time'] = p.session.config['time_iq'] treatments = itertools.cycle(['Control', 'RobotSG', 'HumanSG']) for p in self.get_players(): p.participant.vars['treatment'] = next(treatments) class Group(BaseGroup): pass class Player(BasePlayer): for i in range(1, Constants.screening_max+1): locals()['screening' + str(i)] = models.IntegerField( choices=[ [1, 'Heads is more likely'], [2, 'Tails is more likely'], [3, 'Heads and tails are equally likely'], ], widget=widgets.RadioSelect ) del i def check_screening(self): self.participant.vars['passed_screening'] = ((self.screening1 == 3) and (self.screening2 == 1) and (self.screening3 == 2))