from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'Instructions' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 SECONDS_ALERT_INSTRUCTIONS = 180 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): code = models.StringField() # q1 = models.StringField( # choices=[['a', 'a. 2500 ECUs'], ['b', 'b. 1500 ECUs'], ['c', 'c. 1000 ECUs']], # label='1. Quelle est votre dotation au début de chaque phase ? ', # widget=widgets.RadioSelect, # ) # # q2 = models.StringField( # choices=[['a', 'a. 2500 ECUs'], ['b', 'b. 1500 ECUs'], ['c', 'c. 1000 ECUs']], # label='2. Quel est le niveau de la dette au début de chaque phase ? ', # widget=widgets.RadioSelect, # ) # # q3 = models.StringField( # choices=[['a', 'a. 40 ECUs'], ['b', 'b. 50 ECUs'], ['c', 'c. 1040 ECUs']], # label='3. Si pas de défaut, une obligation vous rapporte 1 ECU ' # 'en fin de période. Si vous pouvez utiliser une partie de votre dotation ' # 'pour acheter 100 obligations à 0.70 et 100 obligations à 0.90, votre gain ' # 'pour cette période est :', # widget=widgets.RadioSelect, # ) # # q4 = models.StringField( # choices=[['a', 'a. 800 ECUs'], ['b', 'b. 200 ECUs'], ['c', 'c. 1800 ECUs']], # label='4. Supposons que la période 5 de la phase 2 a été tirée au sort pour ' # 'être payée à la fin de l’expérience, et que dans cette période vous avez ' # 'acheté 1000 obligations au prix de 0.80 ECUs. Quel est votre gain final (hors participation) ? ', # widget=widgets.RadioSelect, # ) # # # # q5 = models.StringField( # choices = [['a', "a. Celles qui proposent le prix le plus élevé (soit le taux d'intérêt le plus bas)"], # ['b', "b. Celles qui proposent le prix le plus bas (les taux d'intérêt ou le coût le plus élevé)"]], # label='5. Supposons qu’à une période t la dette à financer s’élève à 4000 ECUs. Tous les cinq ' # 'membres du groupe souhaitent investir. La demande totale d’obligations correspond à 5000 ECUs, ' # 'ce qui dépasse l’offre. Quelles demandes seront servies en premier ? ', # widget=widgets.RadioSelect, # ) # # q6 = models.StringField( # choices=[['a', 'a. Le gouvernement fait défaut car il ne peut pas financer sa dette ; les investisseurs ne gagnent rien pour cette période'], # ['b', 'b. Chacun gagnera 300 ECUS (1000 * (1 - 0.7))']], # label="6. Supposons que la dette est de 4000 ECUs, chacun des cinq investisseurs " # "propose d'acheter 1000 obligations à un prix/obligation 0.70 pour un total de " # "3500 ECUs (1000 * 0.7 * 5 investisseurs). Que se passera-t-il ?" # "Que se passera-t-il ? ", # widget=widgets.RadioSelect, # ) # PAGES class P01_Welcome(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) class Code(Page): form_model = 'player' form_fields = ['code'] def before_next_page(player, timeout_happened): player.participant.vars['code'] = player.code class P012_Questionnaire(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6'] def error_message(self, values): print('values is', values) if values['q1'] != 'c': return 'Merci de corriger votre réponse 1 !!' elif values['q2'] != 'a': return 'Merci de corriger votre réponse 2 !!' elif values['q3'] != 'a': return 'Merci de corriger votre réponse 3 !!' elif values['q4'] != 'b': return 'Merci de corriger votre réponse 4 !!' elif values['q5'] != 'a': return 'Merci de corriger votre réponse 5 !!' elif values['q6'] != 'a': return 'Merci de corriger votre réponse 6 !!' class P02_Instructions(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) class P03_Instructions(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) class P04_Instructions(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) class P05_Instructions(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) class P06_Instructions(Page): def vars_for_template(player: Player): return dict( time_alert = C.SECONDS_ALERT_INSTRUCTIONS ) page_sequence = [ P01_Welcome, Code, #P012_Questionnaire, #P02_Instructions, #P03_Instructions, #P04_Instructions, #P05_Instructions, #P06_Instructions ]