from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, safe_json ) import math import random author = 'Zheng Li' doc = """ Raven tests """ class Constants(BaseConstants): """Contains constants of the current experiment app.""" name_in_url = 'raven_multipart_1' players_per_group = None num_rounds = 1 SCALE = [(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8')] no_raven_matrices = 4 raven_award = 0.3 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.participant.vars['tests_passed'] = True class Group(BaseGroup): """Contains group-level objects of the current experiment app.""" pass class Player(BasePlayer): """Contains player-level objects of the current experiment app.""" raven_amount = models.FloatField() raven_correct = models.IntegerField() raven_1 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_2 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_3 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_4 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_5 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_6 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_7 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) raven_8 = models.PositiveIntegerField( initial=0, choices=Constants.SCALE, verbose_name='', blank=False, widget=widgets.RadioSelectHorizontal(), label="" ) def check_raven(self): """ Calculate the player's payoff for the raven task. """ iq_solution = [5, 6, 5, 3, 2, 6, 6, 4] pp_solutions = [ self.raven_1, self.raven_2, self.raven_3, self.raven_4, self.raven_5, self.raven_6, self.raven_7, self.raven_8, ] list_correct = [x for x, y in zip(iq_solution, pp_solutions) if x == y] self.raven_correct = len(list_correct) self.participant.vars['raven_correct'] = self.raven_correct self.participant.vars['raven_amount'] = self.raven_correct * Constants.raven_award