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(4) upper_exp_payment = c(7) average_payment = c(5.50) average_time = 20 with open('iq_test/Answers.csv') as matrix_file: max_questions = len(list(csv.DictReader(matrix_file))) # 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'] p.participant.vars['consent'] = 0 p.participant.vars['passed_screening'] = 0 treatments = itertools.cycle(['Control', 'RobotSG', 'HumanSG']) if 'treatment' in self.session.config: for p in self.get_players(): p.participant.vars['treatment'] = self.session.config['treatment'] else: 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 consent = models.IntegerField() def check_screening(self): self.participant.vars['passed_screening'] = ((self.screening1 == 3) # and (self.screening2 == 1) and (self.screening3 == 2)) if self.participant.vars['passed_screening'] is False: self.payoff = c(self.session.config['payment_fail_screening']) def check_consent(self): self.participant.vars['consent'] = (self.consent == 1) if self.participant.vars['consent'] is False: self.payoff = c(self.session.config['payment_no_consent'])