from otree.api import * import random doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 's4' players_per_group = None num_rounds = 1 vars_table_1 = [ {'name': 's4t100', 'vals': [6, 0, 0.5]}, {'name': 's4t101', 'vals': [6, 0, 1]}, {'name': 's4t102', 'vals': [6, 0, 1.5]}, {'name': 's4t103', 'vals': [6, 0, 2]}, {'name': 's4t104', 'vals': [6, 0, 2.5]}, {'name': 's4t105', 'vals': [6, 0, 3]}, {'name': 's4t106', 'vals': [6, 0, 3.5]}, {'name': 's4t107', 'vals': [6, 0, 4]}, {'name': 's4t108', 'vals': [6, 0, 4.5]}, {'name': 's4t109', 'vals': [6, 0, 5]}, {'name': 's4t110', 'vals': [6, 0, 5.5]}, {'name': 's4t111', 'vals': [6, 0, 6]} ] vars_table_2 = [ {'name': 's4t200', 'vals': [3, 3, 0]}, {'name': 's4t201', 'vals': [3, 3.5, 0]}, {'name': 's4t202', 'vals': [3, 4, 0]}, {'name': 's4t203', 'vals': [3, 4.5, 0]}, {'name': 's4t204', 'vals': [3, 5, 0]}, {'name': 's4t205', 'vals': [3, 5.5, 0]}, {'name': 's4t206', 'vals': [3, 6, 0]}, {'name': 's4t207', 'vals': [3, 6.5, 0]}, {'name': 's4t208', 'vals': [3, 7, 0]}, {'name': 's4t209', 'vals': [3, 7.5, 0]}, {'name': 's4t210', 'vals': [3, 8, 0]}, {'name': 's4t211', 'vals': [3, 8.5, 0]} ] vars_table_3 = [ {'name': 's4t300','vals': 0.5}, {'name': 's4t301','vals': 1}, {'name': 's4t302','vals': 1.5}, {'name': 's4t303','vals': 2}, {'name': 's4t304','vals': 2.5}, {'name': 's4t305','vals': 3}, {'name': 's4t306','vals': 3.5}, {'name': 's4t307','vals': 4}, {'name': 's4t308','vals': 4.5}, {'name': 's4t309','vals': 5}, {'name': 's4t310','vals': 5.5}, {'name': 's4t311','vals': 6} ] class Subsession(BaseSubsession): color1 = models.BooleanField() color2 = models.BooleanField() color3 = models.BooleanField() pregunta_pago = models.IntegerField() @staticmethod def creating_session(subsession): subsession.pregunta_pago = random.randint(0,11) subsession.color1 = random.choice([True, False]) subsession.color2 = random.choice([True, False]) num_rojas = random.randint(0,100) subsession.color3= random.choices([True, False], weights = (num_rojas, 100 - num_rojas))[0] for p in subsession.get_players(): p.participant.vars['fila_s4'] = subsession.pregunta_pago class Group(BaseGroup): pass class Player(BasePlayer): # ############################################################### # # VARIABLES PARA ESOCGER COLORES # ############################################################### # colors4t1 = models.BooleanField() colors4t2 = models.BooleanField() colors4t3 = models.BooleanField() # ############################################################### # # VARIABLES A USARSE EN LA TABLA 1 # ############################################################### # s4t100 = models.StringField() s4t101 = models.StringField() s4t102 = models.StringField() s4t103 = models.StringField() s4t104 = models.StringField() s4t105 = models.StringField() s4t106 = models.StringField() s4t107 = models.StringField() s4t108 = models.StringField() s4t109 = models.StringField() s4t110 = models.StringField() s4t111 = models.StringField() s4t200 = models.StringField() s4t201 = models.StringField() s4t202 = models.StringField() s4t203 = models.StringField() s4t204 = models.StringField() s4t205 = models.StringField() s4t206 = models.StringField() s4t207 = models.StringField() s4t208 = models.StringField() s4t209 = models.StringField() s4t210 = models.StringField() s4t211 = models.StringField() s4t300 = models.StringField() s4t301 = models.StringField() s4t302 = models.StringField() s4t303 = models.StringField() s4t304 = models.StringField() s4t305 = models.StringField() s4t306 = models.StringField() s4t307 = models.StringField() s4t308 = models.StringField() s4t309 = models.StringField() s4t310 = models.StringField() s4t311 = models.StringField() s4t2 = models.StringField() s4t3 = models.StringField() @staticmethod def lottery(player, subsession): if subsession.color1 == player.colors4t1: player.participant.vars['payoff_7'] = random.choice([6, 0]) else: player.participant.vars['payoff_7'] = 0 @staticmethod def get_task_1(player): subsession = player.subsession try: player_response = getattr(player, "s4t1" + str(subsession.pregunta_pago)) except AttributeError: player_response = getattr(player, "s4t10" + str(subsession.pregunta_pago)) if int(player_response) == 1: lottery(player, subsession) else: my_dict = Constants.vars_table_3[subsession.pregunta_pago] player.participant.vars['payoff_7'] = my_dict.get('vals') @staticmethod def get_task_2(player): subsession = player.subsession try: player_response = getattr(player, "s4t2" + str(subsession.pregunta_pago)) except AttributeError: player_response = getattr(player, "s4t20" + str(subsession.pregunta_pago)) if int(player_response) == 2: if subsession.color2 == player.colors4t2: pagos = Constants.vars_table_2[subsession.pregunta_pago].get('vals') player.participant.vars['payoff_8'] = random.choice(pagos[1:]) else: player.participant.vars['payoff_8'] = 0 else: player.participant.vars['payoff_8'] = 3 @staticmethod def get_task_3(player): subsession = player.subsession try: player_response = getattr(player, "s4t3" + str(subsession.pregunta_pago)) except AttributeError: player_response = getattr(player, "s4t30" + str(subsession.pregunta_pago)) if int(player_response) == 2: player.participant.payoff_9 = Constants.vars_table_3[subsession.pregunta_pago].get('vals') else: player.participant.payoff_9 = 6*(subsession.color3 == player.colors4t3) @staticmethod def get_payment(player): get_task_1(player) get_task_2(player) get_task_3(player) player.participant.color1 = player.subsession.color1 player.participant.color2 = player.subsession.color2 player.participant.color3 = player.subsession.color3 # PAGES class intro_4(Page): pass class Instrucciones1(Page): form_model = 'player' form_fields = ['colors4t1'] class table1(Page): form_model = 'player' form_fields = ['s4t100','s4t101','s4t102','s4t103','s4t104', 's4t105','s4t106','s4t107','s4t108','s4t109','s4t110','s4t111'] @staticmethod def vars_for_template(player): return { "vars_table": [ {'name': 's4t100', 'vals': [6, 0, 0.5]}, {'name': 's4t101', 'vals': [6, 0, 1]}, {'name': 's4t102', 'vals': [6, 0, 1.5]}, {'name': 's4t103', 'vals': [6, 0, 2]}, {'name': 's4t104', 'vals': [6, 0, 2.5]}, {'name': 's4t105', 'vals': [6, 0, 3]}, {'name': 's4t106', 'vals': [6, 0, 3.5]}, {'name': 's4t107', 'vals': [6, 0, 4]}, {'name': 's4t108', 'vals': [6, 0, 4.5]}, {'name': 's4t109', 'vals': [6, 0, 5]}, {'name': 's4t110', 'vals': [6, 0, 5.5]}, {'name': 's4t111', 'vals': [6, 0, 6]} ], "color": player.colors4t1 } class Instrucciones2(Page): form_model = 'player' form_fields = ['colors4t2'] class table2(Page): form_model = 'player' form_fields = ['s4t200','s4t201','s4t202','s4t203','s4t204', 's4t205','s4t206','s4t207','s4t208','s4t209','s4t210','s4t211'] @staticmethod def vars_for_template(player): return { "vars_table": [ {'name': 's4t200', 'vals': [3, 3, 0]}, {'name': 's4t201', 'vals': [3, 3.5, 0]}, {'name': 's4t202', 'vals': [3, 4, 0]}, {'name': 's4t203', 'vals': [3, 4.5, 0]}, {'name': 's4t204', 'vals': [3, 5, 0]}, {'name': 's4t205', 'vals': [3, 5.5, 0]}, {'name': 's4t206', 'vals': [3, 6, 0]}, {'name': 's4t207', 'vals': [3, 6.5, 0]}, {'name': 's4t208', 'vals': [3, 7, 0]}, {'name': 's4t209', 'vals': [3, 7.5, 0]}, {'name': 's4t210', 'vals': [3, 8, 0]}, {'name': 's4t211', 'vals': [3, 8.5, 0]} ], "color": player.colors4t2} class Instrucciones3(Page): form_model = 'player' form_fields = ['colors4t3'] class table3(Page): form_model = 'player' form_fields = ['s4t300','s4t301','s4t302','s4t303','s4t304','s4t305','s4t306','s4t307','s4t308','s4t309','s4t310','s4t311'] @staticmethod def vars_for_template(player): return { "vars_table": [ {'name': 's4t300','vals': 0.5}, {'name': 's4t301','vals': 1}, {'name': 's4t302','vals': 1.5}, {'name': 's4t303','vals': 2}, {'name': 's4t304','vals': 2.5}, {'name': 's4t305','vals': 3}, {'name': 's4t306','vals': 3.5}, {'name': 's4t307','vals': 4}, {'name': 's4t308','vals': 4.5}, {'name': 's4t309','vals': 5}, {'name': 's4t310','vals': 5.5}, {'name': 's4t311','vals': 6} ], "color": player.colors4t3 } @staticmethod def before_next_page(player: Player, timeout_happened): return get_payment(player) page_sequence = [intro_4, Instrucciones1, table1,Instrucciones2, table2, Instrucciones3, table3]#, FinalWait]