from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import csv author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'PerformanceQuizzes1' players_per_group = None TopicList = [ 'History', 'Nature', 'Science'] with open('Jona_PerformanceQuizzes/questions.csv') as f: questions = list(csv.DictReader(f)) num_rounds = len(TopicList) numPerQuizz = int(len(questions)/len(TopicList)) correct_point = 1 wrong_point = 0 PerQuestion = c(0.5) TotalTime = 180 class Subsession(BaseSubsession): def before_session_starts(self): if self.round_number ==1: for p in self.get_players(): p.participant.vars['questionsQuizzes'] = Constants.questions for p in self.get_players(): question_data = p.current_question(1) p.question1 = question_data['text'] p.question_id_1 = question_data['id'] p.solution1 = question_data['solution'] question_data = p.current_question(2) p.question2 = question_data['text'] p.question_id_2 = question_data['id'] p.solution2 = question_data['solution'] question_data = p.current_question(3) p.question3 = question_data['text'] p.question_id_3 = question_data['id'] p.solution3 = question_data['solution'] question_data = p.current_question(4) p.question4 = question_data['text'] p.question_id_4 = question_data['id'] p.solution4 = question_data['solution'] question_data = p.current_question(5) p.question5 = question_data['text'] p.question_id_5 = question_data['id'] p.solution5 = question_data['solution'] question_data = p.current_question(6) p.question6 = question_data['text'] p.question_id_6 = question_data['id'] p.solution6 = question_data['solution'] question_data = p.current_question(7) p.question7 = question_data['text'] p.question_id_7 = question_data['id'] p.solution7 = question_data['solution'] question_data = p.current_question(8) p.question8 = question_data['text'] p.question_id_8 = question_data['id'] p.solution8 = question_data['solution'] question_data = p.current_question(9) p.question9 = question_data['text'] p.question_id_9 = question_data['id'] p.solution9 = question_data['solution'] question_data = p.current_question(10) p.question10 = question_data['text'] p.question_id_10 = question_data['id'] p.solution10 = question_data['solution'] class Group(BaseGroup): pass class Player(BasePlayer): score = models.FloatField() question_id_1 = models.PositiveIntegerField() question_id_2 = models.PositiveIntegerField() question_id_3 = models.PositiveIntegerField() question_id_4 = models.PositiveIntegerField() question_id_5 = models.PositiveIntegerField() question_id_6 = models.PositiveIntegerField() question_id_7 = models.PositiveIntegerField() question_id_8 = models.PositiveIntegerField() question_id_9 = models.PositiveIntegerField() question_id_10 = models.PositiveIntegerField() question1 = models.CharField() question2 = models.CharField() question3 = models.CharField() question4 = models.CharField() question5 = models.CharField() question6 = models.CharField() question7 = models.CharField() question8 = models.CharField() question9 = models.CharField() question10 = models.CharField() solution1 = models.CharField() solution2 = models.CharField() solution3 = models.CharField() solution4 = models.CharField() solution5 = models.CharField() solution6 = models.CharField() solution7 = models.CharField() solution8 = models.CharField() solution9 = models.CharField() solution10 = models.CharField() submitted_answer1 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer2 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer3 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer4 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer5 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer6 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer7 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer8 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer9 = models.CharField(widget=widgets.RadioSelect(), blank=True) submitted_answer10 = models.CharField(widget=widgets.RadioSelect(), blank=True) is_correct1 = models.BooleanField() is_correct2 = models.BooleanField() is_correct3 = models.BooleanField() is_correct4 = models.BooleanField() is_correct5 = models.BooleanField() is_correct6 = models.BooleanField() is_correct7 = models.BooleanField() is_correct8 = models.BooleanField() is_correct9 = models.BooleanField() is_correct10 = models.BooleanField() def current_question(self, k): return self.participant.vars['questionsQuizzes'][10*(self.round_number - 1) + k -1 ] ## current_question need not be stored in the result table def check_correct(self): self.is_correct1 = self.submitted_answer1 == self.solution1 self.is_correct2 = self.submitted_answer2 == self.solution2 self.is_correct3 = self.submitted_answer3 == self.solution3 self.is_correct4 = self.submitted_answer4 == self.solution4 self.is_correct5 = self.submitted_answer5 == self.solution5 self.is_correct6 = self.submitted_answer6 == self.solution6 self.is_correct7 = self.submitted_answer7 == self.solution7 self.is_correct8 = self.submitted_answer8 == self.solution8 self.is_correct9 = self.submitted_answer9 == self.solution9 self.is_correct10 = self.submitted_answer10 == self.solution10 l = [self.is_correct1,self.is_correct2,self.is_correct3,self.is_correct4,self.is_correct5,self.is_correct6,self.is_correct7, self.is_correct8,self.is_correct9,self.is_correct10] self.score = sum(l)*Constants.correct_point - (Constants.numPerQuizz - sum(l))*Constants.wrong_point