from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer ) import csv import random author = 'Eveline Vandewal' doc = """ Part 1 """ class Constants(BaseConstants): name_in_url = 'GMTA1_Part1' players_per_group = None with open('GMTA1_Part1/statements.csv') as statements_file: statements = list(csv.DictReader(statements_file)) num_rounds = len(statements) class Subsession(BaseSubsession): def perform_matching(self): for p in self.get_players(): # similarity = random.randint(1, 2) similarity = p.participant.vars.get('similarity') iteration = 1 statement_used = 1 if similarity == 1: while iteration < 21: count = 0 statement_used = p.participant.vars.get('shuffled_statements')[iteration - 1] for q in self.get_players(): if p.participant.vars.get('submitted_answers')[statement_used - 1] == \ q.participant.vars.get('submitted_answers')[statement_used - 1]: count = count + 1 if count > 2: break else: iteration = iteration + 1 if iteration == 21: similarity = 2 p.participant.vars['similarity'] = similarity statement_used = p.participant.vars.get('shuffled_statements')[1 - 1] else: while iteration < 21: count = 0 statement_used = p.participant.vars.get('shuffled_statements')[iteration - 1] for q in self.get_players(): if p.participant.vars.get('submitted_answers')[statement_used - 1] != \ q.participant.vars.get('submitted_answers')[statement_used - 1]: count = count + 1 if count >= 2: break else: iteration = iteration + 1 if iteration == 21: similarity = 1 p.participant.vars['similarity'] = similarity statement_used = p.participant.vars.get('shuffled_statements')[1 - 1] p.num_iterations = iteration answer_used = p.participant.vars.get('submitted_answers')[statement_used - 1] p.participant.vars['answer_used'] = answer_used recorded_statement = Constants.statements[statement_used - 1]['statement'] p.participant.vars['recorded_statement'] = recorded_statement if similarity == 1: others = [q.id_in_group for q in self.get_players() if p.participant.vars.get('submitted_answers')[statement_used - 1] == q.participant.vars.get('submitted_answers')[statement_used - 1] and p.id_in_group != q.id_in_group] else: others = [q.id_in_group for q in self.get_players() if p.participant.vars.get('submitted_answers')[statement_used - 1] != q.participant.vars.get('submitted_answers')[statement_used - 1] and p.id_in_group != q.id_in_group] others_used = random.sample(others, k=2) p.participant.vars['others_used'] = others_used class Group(BaseGroup): pass class Player(BasePlayer): statement_id = models.IntegerField() statement = models.StringField() submitted_answer = models.IntegerField( choices=[ [1, 'Agree'], [2, 'Disagree'], ], widget=widgets.RadioSelect ) submitted_importance = models.IntegerField() num_iterations = models.IntegerField() def current_statement(self): return self.participant.vars['randomized_statements'][self.round_number - 1]