from otree.api import * doc = """ Your app description """ class C(BaseConstants): import random # Change these variables: TEST_RUN = True NUM_TEST_ROUNDS = 0 # Number of test rounds played; if more than one, Announcement pages have to be adjusted! NUM_REAL_ROUNDS = 1 # Number of rounds played after the test round(s) NUM_EXP_ROUNDS = 1 # Number of real rounds in which expectations of other player's behavior are elicited # Attention: this number does not count the test rounds! # Leave these variables NAME_IN_URL = 'qlm' PLAYERS_PER_GROUP = 6 NUM_ROUNDS = NUM_TEST_ROUNDS + NUM_REAL_ROUNDS ENDOWMENT = 25 EXCHANGE_RATE = 0.25 INV_EXCHANGE_RATE = int(1/EXCHANGE_RATE) OFFER_MAX = 17 PROB_FED_UP = 0.05 S=0.5 C1=12 C2=4 D1=0 D2=6 AH=2 AL=1 NUM_COLOR_FIELDS = 19 BONUS_COUNTING = 5 def creating_session(subsession): from itertools import cycle # Definition of colors subsession.session.colors = ['Red', 'Blue', 'Green', 'Orange', 'Gold', 'HotPink', 'SaddleBrown', 'Purple', 'Aqua', 'Black'] subsession.session.colors_de = ['rot', 'blau', 'grün', 'orange', 'gelb', 'pink', 'beige', 'violett', 'türkis', 'schwarz'] # Assigning half of the groups to both baseline and samecolor treatment same = cycle([True, False]) for group in subsession.get_groups(): group.samecolor = next(same) # Color assignment, switch variables for random order of employees on the promotion page, workerids for players for player in subsession.get_players(): offset = 2 if player.group.samecolor: if player.id_in_group <= 3: offset = -1 player.color_id = player.id_in_group + offset player.color_name = subsession.session.colors[player.color_id] player.color_de = subsession.session.colors_de[player.color_id] player.color_html = '{}'.format(player.color_name, player.color_de) add_e = '' if player.color_de[-1] == 'e' else 'e' player.color_html_akk = '{}{}{}'.format(player.color_name, player.color_de, add_e, 'n') player.color_html_fem = '{}{}'.format(player.color_name, player.color_de, add_e) class Subsession(BaseSubsession): pass class Group(BaseGroup): samecolor = models.BooleanField() class Player(BasePlayer): color_id = models.IntegerField(initial = 1) color_name = models.StringField() color_de = models.StringField() color_html = models.StringField() color_html_akk = models.StringField() color_html_fem = models.StringField() picture_count = models.IntegerField() bonus_counting = models.BooleanField(initial=True) paypal = models.StringField() # PAGES class Welcome(Page): pass @staticmethod def vars_for_template(player: Player): session = player.session return dict(inv_exchange_rate = int(1/session.real_world_currency_per_point)) class ColorGroupAssignment(Page): pass class Counting(Page): form_model = 'player' form_fields = ['picture_count'] class Explanation(Page): form_model = 'player' form_fields = ['paypal'] class End(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number == C.NUM_ROUNDS page_sequence = [ Welcome, ColorGroupAssignment, Counting, Explanation, End ] #cd Dropbox\Programming\otree\qlm