from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) from random import sample from treatments import * from intro.models import Constants as IntroConstants author = 'Tommaso Batistoni - t.batistoni@ucl.ac.uk' doc = """ Single player decision game, where a focus player determines how an endowment has to be redistributed between two other players. """ class Constants(BaseConstants): name_in_url = 'taskrd' players_per_group = None num_rounds = 1 # Redistribute redistribute_endowment = 10 redistribute_max_endowment = 9 redistribute_min_endowment = 1 redistribute_range_input_steps = redistribute_max_endowment class Subsession(BaseSubsession): def creating_session(self): if 'teachers_session' not in self.session.config or self.session.config.get('teachers_session') is False: names = IntroConstants.stud_first_names names_sampled = cycle(sample(names, len(self.get_players()))) for p in self.get_players(): p.redistribute_version = next(treatments['redistribute']) if 'teachers_session' not in self.session.config or self.session.config['teachers_session'] is False: # Assign partner treatment for redistribute game p.redistribute_partner = next(treatments['partner_redistribute']) if p.redistribute_partner == 'name': p.redistribute_partner_name_a = next(names_sampled) p.redistribute_partner_name_b = next(names_sampled) class Group(BaseGroup): pass class Player(BasePlayer): # Redistribute redistribute_partner = models.StringField() redistribute_partner_name_a = models.StringField() redistribute_partner_name_b = models.StringField() redistribute_version = models.StringField() redistribute_decision = models.IntegerField( label='Please choose an option from the following final distributions:')