from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'jacopo.bregolin@gmail.com' doc = """ Control questions. """ import csv class Constants(BaseConstants): name_in_url = 'ControlQuestions' players_per_group = None # load and clean file with questions, options and solutions with open('ControlQ/controlQuestions_fr.csv', encoding="utf-8") as f: questions = list(csv.DictReader(f)) #num_rounds = max(questions.groupby('Treatment')['id'].count().values) num_rounds = len([i for i in questions if i['Treatment']=='1A']) # num questions in treatments 1A and 1B nQ_T1 = len([i for i in questions if i['Treatment']=='1A' and i['to_display']=='1']) class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): t = p.get_treatment() # retrieve question for the relevant treatment if self.round_number == 1: p.participant.vars['questions'] = [i for i in Constants.questions if i['Treatment']==t] question_data = p.current_question() p.question_id = int(question_data['id']) p.question = question_data['Q'] p.solution = question_data['Solution'] p.correction = question_data['ToCorrect'] class Group(BaseGroup): pass class Player(BasePlayer): question_id = models.IntegerField() question = models.StringField() solution = models.StringField() correction = models.StringField() submitted_answer = models.StringField(widget=widgets.RadioSelect) def submitted_answer_choices(self): qd = self.current_question() options = [i for i in ['A1','A2','A3','A4'] if qd[i]!='none'] return [qd[i] for i in options] def get_treatment(self): return self.participant.vars['treatment'] def current_question(self): return self.participant.vars['questions'][self.round_number - 1]