from otree.api import * ##from otree.api import GroupTV c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'introduction' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 THRESHOLD = 48 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): session = subsession.session group = subsession.get_groups() for g in group: g.treatment_g = session.config['name'] players = g.get_players() for p in players: p.treatment = g.treatment_g class Group(BaseGroup): treatment_g = models.StringField() class Player(BasePlayer): num_failed_attempts = models.IntegerField(initial=0) treatment = models.StringField() answer1 = models.IntegerField( label='Wie hoch ist der Bonus, den Spieler*in 1 erhält, wenn die ' 'Gruppe den Schwellenwert mit den Beiträgen erreicht?') answer2 = models.IntegerField( label='Alle Spieler*innen halten sich an die Regeln und tragen den Mindestwert bei. ' 'Was ist der Gewinn von Spieler*in 2?') answer3 = models.IntegerField( label='Spieler*in 3 trägt 2 Tokens mehr bei als vorgegeben. Alle anderen Spieler*innen tragen den von der Regel benannten Mindestwert an Tokens bei. ' 'Was ist der Gewinn von Spieler*in 3?') answer4 = models.IntegerField( label='Alle Spieler tragen den vorgegebenen Betrag bei, bis auf Spieler 2, welcher 2 Tokens weniger beiträgt. ' 'Was ist der Gewinn von Spieler*in 4?') answer5 = models.IntegerField( label='Spieler*in 4 trägt keine Tokens bei. Insgesamt wird der Schwellenwert nicht erreicht. ' 'Was ist der Gewinn von Spieler*in 4?') answer2c = models.IntegerField( label='Alle Spieler*innen tragen die Hälfte ihrer Tokens bei. Was ist der Gewinn von Spieler*in 2') answer3c = models.IntegerField( label='Spieler*in 3 trägt 14 Tokens bei, alle anderen Spieler*innen tragen 12 Tokens bei. ' 'Was ist der Gewinn von Spieler*in 3?') answer4c = models.IntegerField( label='Spieler*in 2 trägt 10 Tokens bei, alle anderen Spieler*innen tragen 12 Tokens bei. ' 'Was ist der Gewinn von Spieler*in 4?') ##variant = models.IntegerField() def custom_export(players): yield ['participant_code', 'id_in_group'] for p in players: ##p.variant = p.participant.variant pp = p.participant yield [pp.code, p.id_in_group] class Intro(Page): form_model = 'player' class Explanation(Page): #form_model = 'player' @staticmethod def vars_for_template(player: Player): return dict( bonus=48 ) class Continue(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.round_number == 1 return True class ControlQuestion(Page): form_model = 'player' @staticmethod def get_form_fields(player): if player.treatment != 'Control_1' and player.treatment != 'Control_2': return ['answer1', 'answer2', 'answer3', 'answer4', 'answer5'] else: return ['answer1', 'answer2c', 'answer3c', 'answer4c', 'answer5'] @staticmethod def is_displayed(player: Player): return player.round_number == 1 return True @staticmethod def vars_for_template(player: Player): group = player.group return dict( bonus=int(2*C.THRESHOLD) ) def error_message(player: Player, values): if player.treatment == 'Treatment_1': solutions = dict(answer1=24, answer2=36, answer3=34, answer4=12, answer5=24) elif player.treatment == 'Treatment_2': solutions = dict(answer1=24, answer2=40, answer3=30, answer4=8, answer5=24) elif player.treatment == 'Treatment_3': solutions = dict(answer1=16, answer2=28, answer3=42, answer4=12, answer5=24) elif player.treatment == 'Treatment_4': solutions = dict(answer1=16, answer2=32, answer3=38, answer4=8, answer5=24) elif player.treatment == 'Control_1': solutions = dict(answer1=24, answer2c=36, answer3c=34, answer4c=12, answer5=24) elif player.treatment == 'Control_2': solutions = dict(answer1=16, answer2c=28, answer3c=42, answer4c=12, answer5=24) errors = {name: 'Falsch' for name in solutions if values[name] != solutions[name]} if errors: player.num_failed_attempts += 1 return errors class ContinueWait(WaitPage): wait_for_all_groups = True @staticmethod def is_displayed(player: Player): return player.round_number == 1 return True #class ContinueWait(WaitPage): # wait_for_all_groups = True page_sequence = [Intro, ControlQuestion, Continue, ContinueWait]