import random from otree.api import * doc = """ For each participant, randomize the order of tasks A, B, and C. Task B has 2 pages, which are always shown in the same order. The page_sequence contains all tasks; in each round we show a randomly determined subset of pages. """ class C(BaseConstants): NAME_IN_URL = 'GiversExperiment' PLAYERS_PER_GROUP = None PAYMENT_PER_ANSWER = cu(250) TASKS = ['A', 'B', 'C'] NUM_ROUNDS = len(TASKS) + 2 public_goods_game_choices = [ [1, "एक्जिबिट ब्लू प्रकार और एक्जिबिट ग्रीन प्रकार वाले लोगों के लिए यह समान है।"], [2, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से अधिक है।"], [3, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से कम है।"] ] random.shuffle(public_goods_game_choices) real_effort_task_choices = [ [1, "एक्जिबिट ब्लू प्रकार और एक्जिबिट ग्रीन प्रकार वाले लोगों के लिए यह समान है।"], [2, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से अधिक है।"], [3, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से कम है।"] ] random.shuffle(real_effort_task_choices) coin_flip_game_choices = [ [1, "एक्जिबिट ब्लू प्रकार और एक्जिबिट ग्रीन प्रकार वाले लोगों के लिए यह समान है।"], [2, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से अधिक है।"], [3, "एक्जिबिट ब्लू प्रकार के लोगों के लिए एक्जिबिट ग्रीन प्रकार के लोगों से कम है।"] ] random.shuffle(coin_flip_game_choices) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): payoff_game1 = models.CurrencyField() payoff_game2 = models.CurrencyField() payoff_game3 = models.CurrencyField() correct_answer_game1 = models.IntegerField(initial=0) correct_answer_game2 = models.IntegerField(initial=0) correct_answer_game3 = models.IntegerField(initial=0) # Game 1 public_goods_game = models.IntegerField( label="सोचें कि कितने लोग संयुक्त पॉट में 0 का योगदान दिया। क्या संख्या है:", choices=C.public_goods_game_choices, widget=widgets.RadioSelect ) def set_payoff_game1(player): if player.public_goods_game in [1, 2]: player.payoff += C.PAYMENT_PER_ANSWER player.correct_answer_game1 += 1 else: player.payoff += cu(0) player.participant.vars['payoff_game1'] = player.payoff player.participant.vars['correct_answer_game1'] = player.correct_answer_game1 # Game 2 real_effort_task = models.IntegerField( label= "सोचें कि कितने लोग पत्र उत्पादन कार्य करने की बजाय 50 " "रुपये की फ्लैट फी प्राप्त करने का चयन करते हैं। क्या संख्या है:", choices=C.real_effort_task_choices, widget=widgets.RadioSelect ) def set_payoff_game2(player): if player.real_effort_task in [1, 2]: player.payoff += C.PAYMENT_PER_ANSWER player.correct_answer_game2 += 1 else: player.payoff += cu(0) player.participant.vars['payoff_game2'] = player.payoff player.participant.vars['correct_answer_game2'] = player.correct_answer_game2 # Game 3 coin_flip_game = models.IntegerField( label="प्रति व्यक्ति रिपोर्ट किए गए हेड्स की औसत संख्या के बारे में सोचें. हेड्स की रिपोर्ट की गई संख्या है:", choices=C.coin_flip_game_choices, widget=widgets.RadioSelect ) def set_payoff_game3(player): if player.coin_flip_game in [1,2]: player.payoff += C.PAYMENT_PER_ANSWER player.correct_answer_game3 += 1 else: player.payoff += cu(0) player.participant.vars['payoff_game3'] = player.payoff player.participant.vars['correct_answer_game3'] = player.correct_answer_game3 # FUNCTIONS def creating_session(subsession: Subsession): if subsession.round_number == 1: for p in subsession.get_players(): round_numbers = list(range(1, C.NUM_ROUNDS + 1)) random.shuffle(round_numbers) task_rounds = dict(zip(C.TASKS, round_numbers)) print('player', p.id_in_subsession) print('task_rounds is', task_rounds) p.participant.task_rounds = task_rounds # PAGES class TaskAIntro1(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['A'] class TaskA(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['A'] form_model = "player" form_fields = ["public_goods_game"] @staticmethod def before_next_page(player, timeout_happened): player.set_payoff_game1() class TaskB1Intro(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['B'] class TaskB1(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['B'] form_model = 'player' form_fields = ['real_effort_task'] @staticmethod def before_next_page(player, timeout_happened): player.set_payoff_game2() class TaskCIntro(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['C'] class TaskC(Page): @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == participant.task_rounds['C'] form_model = 'player' form_fields = ['coin_flip_game'] @staticmethod def before_next_page(player, timeout_happened): player.set_payoff_game3() class TaskD(Page): @staticmethod def vars_for_template(player: Player): participant = player.participant payoff_game1 = participant.vars['payoff_game1'] payoff_game2 = participant.vars['payoff_game2'] payoff_game3 = participant.vars['payoff_game3'] final_payoff = payoff_game1 + payoff_game2 + payoff_game3 correct_answer_game1 = participant.vars['correct_answer_game1'] correct_answer_game2 = participant.vars['correct_answer_game2'] correct_answer_game3 = participant.vars['correct_answer_game3'] num_correct_answers = correct_answer_game1 + correct_answer_game2 + correct_answer_game3 return{ 'final_payoff': final_payoff, 'num_correct_answers': num_correct_answers } @staticmethod def is_displayed(player: Player): participant = player.participant return player.round_number == C.NUM_ROUNDS class Intro(Page): form_model = "player" @staticmethod def is_displayed(player: Player): return player.round_number == 1 class SurveyCTO(Page): form_model = "player" @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS page_sequence = [ Intro, TaskAIntro1, TaskA, TaskB1Intro, TaskB1, TaskCIntro, TaskC, TaskD, SurveyCTO ]