import random from otree.api import * class C(BaseConstants): NAME_IN_URL = 'deontologyv2' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 ENDOWMENT_PAIRS = [(60, 80), (80, 80), (60, 150), (150, 60)] def assign_random_endowments(participant): endowment_pairs = C.ENDOWMENT_PAIRS.copy() random.shuffle(endowment_pairs) if 'endowment_pairs' not in participant.vars: participant.vars['endowment_pairs'] = endowment_pairs.copy() assigned_endowment = participant.vars['endowment_pairs'].pop(0) return assigned_endowment def creating_session(subsession): for player in subsession.get_players(): assigned_endowment = assign_random_endowments(player.participant) player.endowment = assigned_endowment[0] player.endowment2 = assigned_endowment[1] class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Frage_1 = models.IntegerField( choices=[ [1, "Alternative a"], [2, "Alternative b"], [3, "Alternative c"], [4, "Alternative d"], [5, "Alternative e"], [6, "Alternative f"], [7, "Alternative g"], [8, "Alternative h"], [9, "Alternative i"], [10, "Alternative j"], [11, "Alternative k"]] ) Frage_2 = models.IntegerField( choices=[ [1, "Alternative a"], [2, "Alternative b"], [3, "Alternative c"], [4, "Alternative d"], [5, "Alternative e"], [6, "Alternative f"], [7, "Alternative g"], [8, "Alternative h"], [9, "Alternative i"], [10, "Alternative j"], [11, "Alternative k"]] ) Frage_3 = models.IntegerField( choices=[ [1, "Alternative a"], [2, "Alternative b"], [3, "Alternative c"], [4, "Alternative d"], [5, "Alternative e"], [6, "Alternative f"], [7, "Alternative g"], [8, "Alternative h"], [9, "Alternative i"], [10, "Alternative j"], [11, "Alternative k"]] ) endowment = models.CurrencyField() endowment2 = models.IntegerField() class Start(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Start1(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Define1(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Beginn1(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Define2(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Beginn2(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Define3(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Beginn3(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Deontology1(Page): form_model = 'player' form_fields = ['Frage_1'] @staticmethod def vars_for_template(player: Player): auszahlung = { 0: player.endowment + 20, 1: player.endowment + 36, 2: player.endowment + 47, 3: player.endowment + 56, 4: player.endowment + 62, 5: player.endowment + 67, 6: player.endowment + 70, 7: player.endowment + 73, 8: player.endowment + 75, 9: player.endowment + 76, 10: player.endowment + 77, } auszahlung2 = {i: player.endowment2 - 4 * i for i in range(11)} auszahlung_total = {i: auszahlung[i] + auszahlung2[i] for i in range(11)} return dict(auszahlung=auszahlung, auszahlung2=auszahlung2, auszahlung_total=auszahlung_total) class Deontology2(Page): form_model = 'player' form_fields = ['Frage_2'] @staticmethod def vars_for_template(player: Player): auszahlung = { 0: player.endowment + 20, 1: player.endowment + 36, 2: player.endowment + 47, 3: player.endowment + 56, 4: player.endowment + 62, 5: player.endowment + 67, 6: player.endowment + 70, 7: player.endowment + 73, 8: player.endowment + 75, 9: player.endowment + 76, 10: player.endowment + 77, } auszahlung2 = {i: player.endowment2 - 4 * i for i in range(11)} auszahlung_total = {i: auszahlung[i] + auszahlung2[i] for i in range(11)} return dict(auszahlung=auszahlung, auszahlung2=auszahlung2, auszahlung_total=auszahlung_total) class Deontology3(Page): form_model = 'player' form_fields = ['Frage_3'] @staticmethod def vars_for_template(player: Player): auszahlung = { 0: player.endowment + 20, 1: player.endowment + 36, 2: player.endowment + 47, 3: player.endowment + 56, 4: player.endowment + 62, 5: player.endowment + 67, 6: player.endowment + 70, 7: player.endowment + 73, 8: player.endowment + 75, 9: player.endowment + 76, 10: player.endowment + 77, } auszahlung2 = {i: player.endowment2 - 4 * i for i in range(11)} auszahlung2_schaden = {i: auszahlung2[i] - 40 for i in range(11)} auszahlung_total = {i: auszahlung[i] + auszahlung2[i] for i in range(11)} return dict(auszahlung=auszahlung, auszahlung2=auszahlung2, auszahlung2_schaden=auszahlung2_schaden, auszahlung_total=auszahlung_total) page_sequence = [Start, Start1, Define1, Beginn1, Deontology1, Define2, Beginn2, Deontology2, Define3, Beginn3, Deontology3]