from otree.api import * import random import itertools import json doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'controls' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # Example for Saudi Arabia S_Arab_stability = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) S_Arab_security = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) S_Arab_environment = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) S_Arab_freedom = models.StringField( choices=["frei", "teilweise frei", "nicht frei"], label="" ) S_Arab_trade = models.StringField( choices=["aktiver Handel", "kein Handel"], label="" ) # China China_stability = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) China_security = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) China_environment = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) China_freedom = models.StringField( choices=["frei", "teilweise frei", "nicht frei"], label="" ) China_trade = models.StringField( choices=["aktiver Handel", "kein Handel"], label="" ) # Chile Chile_stability = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) Chile_security = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) Chile_environment = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) Chile_freedom = models.StringField( choices=["frei", "teilweise frei", "nicht frei"], label="" ) Chile_trade = models.StringField( choices=["aktiver Handel", "kein Handel"], label="" ) """ # USA USA_stability = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) USA_security = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) USA_environment = models.StringField( choices=["hoch", "mittel", "niedrig"], label="" ) USA_freedom = models.StringField( choices=["frei", "teilweise frei", "nicht frei"], label="" ) USA_trade = models.StringField( choices=["aktiver Handel", "kein Handel"], label="" ) """ # Control Variables risk = models.IntegerField( choices=[ [0, "0: gar nicht risikobereit"], [1, 1], [2, 2], [3, 3], [4, 4], [5, "5: weder noch"], [6, 6], [7, 7], [8, 8], [9, 9], [10, "10: sehr risikobereit"], ], label="Wie schätzen Sie sich persönlich ein? Sind Sie im Allgemeinen ein risikobereiter Mensch oder versuchen Sie, Risiken zu vermeiden? " "" "Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht risikobereit\", und der Wert 10 bedeutet \"sehr risikobereit\". " "Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen." "", widget=widgets.RadioSelect ) discounting = models.IntegerField( choices=[ [0, "0: gar nicht bereit"], [1, 1], [2, 2], [3, 3], [4, 4], [5, "5: weder noch"], [6, 6], [7, 7], [8, 8], [9, 9], [10, "10: sehr bereit"], ], label="Sind Sie im Vergleich zu anderen im Allgemeinen bereit, heute auf etwas zu verzichten, um in der Zukunft davon zu profitieren, " "oder sind Sie im Vergleich zu anderen dazu nicht bereit? " "" "Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht bereit\", und der Wert 10 bedeutet \"sehr bereit\". " "Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen." "", widget=widgets.RadioSelect ) trust = models.IntegerField( choices=[ [0, "0: trifft gar nicht zu"], [1, 1], [2, 2], [3, 3], [4, 4], [5, "5: weder noch"], [6, 6], [7, 7], [8, 8], [9, 9], [10, "10: trifft voll zu"], ], label="Wie sehr trifft die folgende Aussage auf Sie zu? \"Solange man mich nicht vom Gegenteil überzeugt, gehe ich stets davon aus, dass andere Menschen nur das Beste im Sinn haben.\" " "" "Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"trifft gar nicht zu\", und der Wert 10 bedeutet \"trifft voll zu\". " "Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen." "", widget=widgets.RadioSelect ) altruism = models.IntegerField( choices=[ [0, "0: gar nicht bereit zu teilen"], [1, 1], [2, 2], [3, 3], [4, 4], [5, "5: weder noch"], [6, 6], [7, 7], [8, 8], [9, 9], [10, "10: sehr bereit zu teilen"], ], label="Wie schätzen Sie Ihre Bereitschaft mit anderen zu teilen, ohne dafür eine Gegenleistung zu erwarten, in Bezug auf den folgenden Bereich ein: wenn es um gemeinnützige Zwecke geht? " "" "Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht bereit zu teilen ohne eine Gegenleistung zu erwarten\", " "und der Wert 10 bedeutet \"sehr bereit zu teilen ohne eine Gegenleistung zu erwarten\". " "Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen." "", widget=widgets.RadioSelect ) climate_change = models.StringField( choices=[ ["nein", "Nein"], ["natürlich", "Ja, hauptsächlich durch natürlich Prozesse"], ["menschlich", "Ja, hauptsächlich durch menschliche Aktivitäten"], ["weiß_nicht", "Weiß ich nicht"] ], label="Glauben Sie persönlich, dass sich das Klima der Erde verändert?", widget=widgets.RadioSelect ) climate_problem = models.IntegerField( choices=[ [1, "stimme überhaupt nicht zu"], [2, "stimme eher nicht zu"], [3, "weder noch"], [4, "stimme eher zu"], [5, "stimme voll zu"], [99, "weiß ich nicht"] ], label="Inwiefern stimmen Sie der folgenden Aussage zu? \"Der Klimawandel ist ein ernstzunehmendes Problem.\"", widget=widgets.RadioSelect ) energy_security_expensive = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... Strom zu teuer wird.", widget=widgets.RadioSelectHorizontal ) energy_security_rationed = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... Strom rationiert wird.", widget=widgets.RadioSelectHorizontal ) energy_security_dependent = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... Deutschland abhängig von der Energie anderer Länder wird.", widget=widgets.RadioSelectHorizontal ) energy_security_attacked = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... (digitale) Angriffe zu Unterbrechungen der Stromversorgung führen.", widget=widgets.RadioSelectHorizontal ) energy_security_scarce = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... die Vorräte an fossilen Brennstoffen zur Neige gehen.", widget=widgets.RadioSelectHorizontal ) energy_security_blackout = models.IntegerField( choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"], [4, "4: sehr besorgt"], [99, '5: weiß ich nicht']], label="... es zu Stromausfällen kommt.", widget=widgets.RadioSelectHorizontal ) party_vote = models.StringField( choices=[ ["AfD", "AfD"], ["Grüne", "Bündnis 90/ Die Grünen"], ["BSW", "Bündnis Sahra Wagenknecht"], ["Union", "CDU/ CSU"], ["FDP", "FDP"], ["Linke", "Linke"], ["SPD", "SPD"], ["Andere", "Eine andere Partei"], ["nichtwähler", "Ich würde nicht wählen"], ["kein_wahlrecht", "Ich habe in Deutschland kein Wahlrecht"], ["keine_angabe", "Keine Angabe"] ], label="Wenn nächsten Sonntag Bundestagswahl wäre, welche Partei würden Sie wählen?", widget=widgets.RadioSelect ) political_opinion = models.IntegerField( choices=[ [0, "0: ganz links"], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, "10: ganz rechts"], ], label="Menschen werden manchmal anhand der Begriffe \"Recht\" und \"Links\" einer politischen Richtung zugeordnet. " "Wo würden Sie sich einordnen, wenn der Wert 0 bedeutet \"ganz links\" und der Wert 10 bedeutet \"ganz rechts\"?", widget=widgets.RadioSelect ) politician_influence = models.IntegerField( choices=[ [1, "1: Politiker lassen sich in ihrem Verhalten auf jeden Fall von der Meinung der Bevölkerung beeinflussen"], [2, 2], [3, "3: weder noch"], [4, 4], [5, "5: Politiker werden die Meinung der Bevölkerung auf jeden Fall ignorieren"] ], label="Glauben Sie persönlich, dass Politiker sich von der Meinung der Bevölkerung beeinflussen lassen " "(z.B. durch die Ergebnisse dieser oder ähnlicher Befragungen)?", widget=widgets.RadioSelect ) credibility = models.IntegerField( choices=[ [1, "1: sehr seriös"], [2, 2], [3, "3: weder noch"], [4, 4], [5, "5: sehr unseriös"] ], label="Abschließend möchten wir von Ihnen nur noch wissen, für wie seriös Sie diese Befragung und die enthaltenen Informationen empfunden haben.", widget=widgets.RadioSelect ) open_feedback = models.LongStringField( label="Haben Sie noch Anmerkungen zur Umfrage?", blank=True, ) open_feedback_dk = models.BooleanField( label="Keine Angabe", blank=True ) # PAGES # -------- Control variables -------- class Country_Attributes(Page): form_model = 'player' form_fields = [ 'S_Arab_stability', 'S_Arab_security', 'S_Arab_environment', 'S_Arab_freedom', 'S_Arab_trade', 'China_stability', 'China_security', 'China_environment', 'China_freedom', 'China_trade', 'Chile_stability', 'Chile_security', 'Chile_environment', 'Chile_freedom', 'Chile_trade', #'USA_stability', 'USA_security', 'USA_environment', 'USA_freedom', 'USA_trade' ] class Risk(Page): form_model = "player" form_fields = ["risk"] class Discounting(Page): form_model = "player" form_fields = ["discounting"] class Trust(Page): form_model = "player" form_fields = ["trust"] class Altruism(Page): form_model = "player" form_fields = ["altruism"] class Climate_Change(Page): form_model = "player" form_fields = ["climate_change"] class Climate_Problem(Page): form_model = "player" form_fields = ["climate_problem"] class Energy_Security(Page): form_model = 'player' @staticmethod def get_form_fields(player: Player): form_fields = ['energy_security_expensive', 'energy_security_rationed', 'energy_security_dependent', 'energy_security_attacked', "energy_security_scarce", "energy_security_blackout"] random.shuffle(form_fields) return form_fields class Party_Vote(Page): form_model = "player" form_fields = ["party_vote"] class Political_Opinion(Page): form_model = "player" form_fields = ["political_opinion"] class Politician_Influence(Page): form_model = "player" form_fields = ["politician_influence"] class Credibility(Page): form_model = "player" form_fields = ["credibility"] class OpenFeedback(Page): # Page shown if bid_order == upper_first & answer == yes form_model = "player" form_fields = ["open_feedback", "open_feedback_dk"] def error_message(self, values): if not values['why'] and not values['why_dk']: return "Wenn Sie keine Anmerkungen mehr haben, wählen Sie bitte \"Keine Angabe\" aus." class End(Page): form_model = "player" page_sequence = [Country_Attributes, Energy_Security, Climate_Change, Climate_Problem, Risk, Discounting, Trust, Altruism, Party_Vote, Political_Opinion, Politician_Influence, Credibility, OpenFeedback, End] #page_sequence = [Country_Attributes]