from otree.api import * from otree.api import models, BasePlayer, BaseSubsession import random import csv from otree.api import * # Input von Marc aus HILL_insurance from otree.api import Currency as c, currency_range # Von Tobias, read csv def read_csv(): f = open(__name__ + '/contracts.csv', encoding='utf-8-sig') rows = list(csv.DictReader(f)) return rows class C(BaseConstants): # CSV-SPM Preise rows = read_csv() NAME_IN_URL = 'sustainability' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 # Brauche ich die WTP_MAX überhaupt? WTP_MAX = 1000 # Variable um die Auszahlung zu starten? ENDOWMENT = cu(100) # x = pd.read_csv('Sustainability/contracts.csv') INSTRUCTIONS_TEMPLATE = 'Sustainability/Instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass # Auswahl des zufälligen Vertrags def generate_random_contract(group: Group): import random estimate = random.randint(1, 5) return estimate # Simulieren des Risikos des Diebstahls def generate_random_risk(group: Group): import random # Zum Testen: Diebstahl: (1, 5); kein Diebstahl (6, 100); Muss final wieder auf 1, 100 gesetzt werden estimate = random.randint(1, 100) if estimate < 6: erg = 1 else: erg = 0 return erg # Erzeugen der Vertragsreihenfolge def generate_random_list(group: Group): import random uniqueList = [0, 1, 2, 3, 4] stichprobe = random.sample(uniqueList, 5) return stichprobe class Player(BasePlayer): # Variablen für den real effort task text_1 = models.StringField( label='Bitte tippen Sie den gesamten Text aus dem blauen Feld in das leere Feld darunter ab. Beachten sie Groß- und Kleinschreibung sowie Punkt- und Kommasetzung. Leerzeichen sind immer einzeln. Bitte schreiben Sie fortlaufend ohne Zeilenumbruch.', ) text_2 = models.StringField( label='Bitte tippen Sie den gesamten Text aus dem blauen Feld in das leere Feld darunter ab. Beachten sie Groß- und Kleinschreibung sowie Punkt- und Kommasetzung. Leerzeichen sind immer einzeln. Bitte schreiben Sie fortlaufend ohne Zeilenumbruch.' ) text_3 = models.StringField( label='Bitte tippen Sie den gesamten Text aus dem blauen Feld in das leere Feld darunter ab. Beachten sie Groß- und Kleinschreibung sowie Punkt- und Kommasetzung. Leerzeichen sind immer einzeln. Bitte schreiben Sie fortlaufend ohne Zeilenumbruch.' ) text_4 = models.StringField( label='Bitte tippen Sie den gesamten Text aus dem blauen Feld in das leere Feld darunter ab. Beachten sie Groß- und Kleinschreibung sowie Punkt- und Kommasetzung. Leerzeichen sind immer einzeln. Bitte schreiben Sie fortlaufend ohne Zeilenumbruch.' ) # Angezeigter Text. Muss noch durch Bilder ersetzt werden. text1sol = models.StringField( initial='Der beste, wenn er eins tut, tut er alles, oder, um weniger paradox zu sein, in dem einen, was er recht tut, sieht er das Gleichnis von allem, was recht getan wird. (Johann Wolfgang von Goethe)') text2sol = models.StringField( initial='Wir alle sind nur eine weiterentwickelte Art von Affen, auf einem unbedeutenden Planeten eines sehr durchschnittlichen Sterns. Aber wir können das Universum verstehen. Das macht uns zu etwas sehr Besonderem. (Stephen Hawking)') text3sol = models.StringField( initial='Dieser meint etwas zu wissen, obwohl er nicht weiß, ich aber, der ich nichts weiß, glaube auch nicht zu wissen. Ich scheine also um dieses wenige doch weiser zu sein als er, weil ich, was ich nicht weiß, auch nicht glaube zu wissen. (Sokrates)') text4sol = models.StringField( initial='Im großen Buch der Natur kann nur der lesen, der die Sprache kennt, in welcher dieses Buch geschrieben ist, und diese Sprache ist die Mathematik. (Galileo Galilei)') # Vermögen des Spielers. wealth = models.FloatField(initial=0) # Vermögen des Spielers in EUR payout = models.FloatField(initial=0) donation = models.FloatField(initial=0) donationtaler = models.FloatField(initial=0) overallbetrag = models.FloatField(initial=0) # Hilfsvariable Spende donationgoal = models.FloatField(initial=99) # Zufälliger Vertrag für die Versicherungsentscheidung. rand_contract = models.IntegerField(initial=99) # Umschlag mit dem geheimen Preis. TODO: evtl noch die Auswahlmöglichkeiten anpassen. rand_envelope = models.IntegerField(choices=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30], label='') # Dummyvariable: Ist der Teilnehmer einem Verlust ausgesetzt? (1 = Ja; 0 = Nein; Default: 99). theft = models.IntegerField(initial=99) # Hilfsvariablen für die zufällige Anordnung rand_dec_contract_1 = models.IntegerField(initial=99) rand_dec_contract_2 = models.IntegerField(initial=99) rand_dec_contract_3 = models.IntegerField(initial=99) rand_dec_contract_4 = models.IntegerField(initial=99) rand_dec_contract_5 = models.IntegerField(initial=99) # Hilfsvariablen für den Secret Price sec_price_contract_1 = models.FloatField(initial=50) sec_price_contract_2 = models.FloatField(initial=50) sec_price_contract_3 = models.FloatField(initial=50) sec_price_contract_4 = models.FloatField(initial=50) sec_price_contract_5 = models.FloatField(initial=50) # Test contract_number = models.IntegerField() def set_contract_number(self): data=[] with open('./contracts.csv', 'r') as csv_file: reader = csv.reader(csv_file) for row in reader: data.append(row) col1 = [x[0] for x in data] col = [int(element) for element in col1] if self.rand_envelope in col: for x in range(0,len(data)): if self.rand_envelope == int(data[x][0]): self.sec_price_contract_1 = round(float(data[x][1]),2) self.sec_price_contract_2 = round(float(data[x][2]),2) self.sec_price_contract_3 = round(float(data[x][3]),2) self.sec_price_contract_4 = round(float(data[x][4]),2) self.sec_price_contract_5 = round(float(data[x][5]),2) else: self.rand_envelope = 99 # WTP-Variablen der jeweiligen Vertragsentscheidungen. insurance_premium_dec_contract_1 = models.FloatField( min=0, max=C.WTP_MAX, label='' ) insurance_premium_dec_contract_2 = models.FloatField( min=0, max=C.WTP_MAX, label='' ) insurance_premium_dec_contract_3 = models.FloatField( min=0, max=C.WTP_MAX, label='' ) insurance_premium_dec_contract_4 = models.FloatField( min=0, max=C.WTP_MAX, label='' ) insurance_premium_dec_contract_5 = models.FloatField( min=0, max=C.WTP_MAX, label='' ) # Define a field to store the result of the comparison result = models.BooleanField() def set_result(self): # Generate a random number between 1 and 5 random_number = random.randint(4, 5) # Compare the random number to the player's number if random_number > self.insurance_premium_dec_contract_1: self.result = True else: self.result = False #################################################################################################################### # Variablen welche im Fragebogen auf der Page Q1 (Finanzielle Bildung) befüllt werden. zinsen = models.StringField( choices=['mehr als 110 Euro', 'genau 110 Euro', 'weniger als 110 Euro' ], label='', widget=widgets.RadioSelect) inflation = models.StringField( choices=['größer als heute', 'gleich groß wie heute', 'kleiner als heute' ], label='', widget=widgets.RadioSelect) aktie = models.StringField( choices=['Richtig', 'Falsch' ], label='', widget=widgets.RadioSelect) #################################################################################################################### # Variablen welche bei dem Beispielvertrag angegeben werden. versicherungssumme = models.StringField( choices=['500 Taler', '1000 Taler', '100 Taler' ], label='Welche Summe deckt der oben dargestellte Vertrag ab?', widget=widgets.RadioSelect) besonderheit = models.StringField( choices=['Oben', 'Mitte', 'Unten' ], label='Wo in der Tabelle steht die Besonderheit des oben dargestellten Vertrags?', widget=widgets.RadioSelect) ausfall = models.StringField( choices=['Meine Auszahlung am Ende des Experiments kann 500 Taler betragen. ', 'Meine Auszahlung beträgt 1000 Taler abzüglich des geheimen Preises.', 'Meine Auszahlung am Ende des Experiments kann 0 Taler betragen.' ], label='Falls Sie bei einem Versicherungsvertrag als maximale Zahlungsbereitschaft 0 Taler angeben: Welche Folgen kann dies auf ihre Auszahlung haben?', widget=widgets.RadioSelect) #################################################################################################################### # Variablen welche im Fragebogen auf der Page Q (Fragebogen) befüllt werden. age = models.IntegerField( label='', min=16, max=99) frau = models.IntegerField( choices=[[0, 'Männlich'], [1, 'Weiblich'], [9, 'Divers']], label='', widget=widgets.RadioSelect) erste_teilnahme = models.IntegerField( choices=[[0, 'Ja'], [1, 'Nein']], label='', widget=widgets.RadioSelect) abschluss = models.StringField( choices=['Kein Schulabschluss', 'Hauptschulabschluss', 'mittlere Reife (z.B. Realschulabschluss)', 'Fachhochschulreife', 'Abitur (Hochschulreife)', 'abgeschlossene Ausbildung', 'Bachelor', 'Diplom oder Magister', 'Master', 'Staatsexamen', 'Promotion', 'Sonstiges', 'Keine Angabe'], label='', widget=widgets.RadioSelect) studiumfach = models.StringField( choices=['Rechtswissenschaft', 'Wirtschafts- und Sozialwissenschaften', 'Betriebswirtschaft', 'Naturwissenschaft', 'Medizin', 'Erziehungswissenschaft', 'Geisteswissenschaft', 'Andere Fachrichtung', 'Ich studiere nicht.', 'Keine Angabe'], label='', widget=widgets.RadioSelect) general_risk_question = models.IntegerField( choices=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], label='', widget=widgets.RadioSelectHorizontal, # (top_row=['gar nicht risikobereit','sehr risikobereit']), ) # Worum geht es in diesem Experiment? Q_about = models.StringField( label=''' Was ist ihrer Meinung nach das Ziel dieses Experiments? ''' ) Q_difdec = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='',#label='Wie schwer fiel es Ihnen jeweils, Ihre maximale Zahlungsbereitschaft für die einzelnen Versicherungsverträge anzugeben?', widget=widgets.RadioSelectHorizontal, #(top_row=['sehr schwer','gar nicht schwer']), ) Q_insimport = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='',#label='Wie wichtig war es für Sie eine Diebstahlversicherung zu besitzen?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) Q_sozimport = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='',#label='Wie wichtig ist Ihnen Nachhaltigkeit?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) Q_umwimport = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='', # label='Wie wichtig ist Ihnen Nachhaltigkeit?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) Q_sustimport = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='', # label='Wie wichtig ist Ihnen Nachhaltigkeit?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) Q_sozdon = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='', # label='Wie wichtig ist Ihnen Nachhaltigkeit?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) Q_envdon = models.IntegerField( choices=[1, 2, 3, 4, 5, 6, 7], label='', # label='Wie wichtig ist Ihnen Nachhaltigkeit?', widget=widgets.RadioSelectHorizontal, # (top_row=['Überhaupt nicht','Sehr viel']), ) # Worum geht es in diesem Experiment? Q_else = models.StringField( label=''' Möchten Sie uns noch etwas mitteilen? ''' ) attention_check = models.StringField( choices=[0, 1, 2, 3, 4, 5, 6], label='', widget=widgets.RadioSelect) # FUNCTIONS # PAGES class Results(Page): pass class Welcome(Page): @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group # Welcher Vertrag wird ausgewählt? player.rand_contract = generate_random_contract(group) # Ist der Teilnehmer einem Risiko ausgesetzt? player.theft = generate_random_risk(group) # Welche Vertragsreihenfolge hat der Teilnehmer stich = generate_random_list(group) player.rand_dec_contract_1 = stich[0] player.rand_dec_contract_2 = stich[1] player.rand_dec_contract_3 = stich[2] player.rand_dec_contract_4 = stich[3] player.rand_dec_contract_5 = stich[4] class Simulation(Page): @staticmethod def before_next_page(player: Player, timeout_happened): # War der Spieler versichert? if player.wealth > 0 and player.wealth < 1000: # Selektion des zufällig ausgewählten Vertrags: if player.rand_contract == 1: # Erste Entscheidung wurde ausgewählt. Überprüfen der Eigenschaft if player.rand_dec_contract_1 == 0: player.donation = 0 player.donationgoal = 0 elif player.rand_dec_contract_1 == 1: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 1 elif player.rand_dec_contract_1 == 2: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 2 elif player.rand_dec_contract_1 == 3: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 3 elif player.rand_dec_contract_1 == 4: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 4 # Alle anderen Bedingungen analog. elif player.rand_contract == 2: if player.rand_dec_contract_2 == 0: player.donation = 0 player.donationgoal = 0 elif player.rand_dec_contract_2 == 1: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 1 elif player.rand_dec_contract_2 == 2: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 2 elif player.rand_dec_contract_2 == 3: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 3 elif player.rand_dec_contract_2 == 4: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 4 elif player.rand_contract == 3: if player.rand_dec_contract_3 == 0: player.donation = 0 player.donationgoal = 0 elif player.rand_dec_contract_3 == 1: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 1 elif player.rand_dec_contract_3 == 2: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 2 elif player.rand_dec_contract_3 == 3: a = int(-1*0.1*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 3 elif player.rand_dec_contract_3 == 4: a = int(-1*0.2*(player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 4 elif player.rand_contract == 4: if player.rand_dec_contract_4 == 0: player.donation = 0 player.donationgoal = 0 elif player.rand_dec_contract_4 == 1: a = int(-1 * 0.1 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 1 elif player.rand_dec_contract_4 == 2: a = int(-1 * 0.2 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 2 elif player.rand_dec_contract_4 == 3: a = int(-1 * 0.1 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 3 elif player.rand_dec_contract_4 == 4: a = int(-1 * 0.2 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 4 elif player.rand_contract == 5: if player.rand_dec_contract_5 == 0: player.donation = 0 player.donationgoal = 0 elif player.rand_dec_contract_5 == 1: a = int(-1 * 0.1 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 1 elif player.rand_dec_contract_5 == 2: a = int(-1 * 0.2 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 2 elif player.rand_dec_contract_5 == 3: a = int(-1 * 0.1 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 3 elif player.rand_dec_contract_5 == 4: a = int(-1 * 0.2 * (player.wealth - 1000)) player.donation = round(0.01 + round((float(a)/ 100),2),2) player.donationgoal = 4 # Umrechnung der Taler in EUR # Durch int werden die Nachkommastellen abgeschnitten. Float fügt der Zahl wieder Dezimalstellen zu. +0,01 verhindert das die Teilnehmer an Rundungsdifferenzen leiden. # D.h. alle werden aufgerundet. if player.wealth > 0 and player.wealth < 1000: player.payout = round(0.01 + float(int(player.wealth)) / 100,2) else: player.payout = round(float(int(player.wealth)) / 100,2) player.donationtaler = round(player.donation * 100,2) # Ausgabe des Gesamtbetrags player.overallbetrag = round(player.donation + player.payout,2) class End(Page): pass class Introduction(Page): pass class Startamount(Page): pass class Q_envelope(Page): form_model = 'player' form_fields = ['rand_envelope' ] class Q_envelope2(Page): @staticmethod def before_next_page(player: Player, timeout_happened): player.set_contract_number() return {} # Fragebogen class Q(Page): form_model = 'player' form_fields = ['age', 'frau', 'abschluss', 'studiumfach' ] class Q1(Page): form_model = 'player' form_fields = ['zinsen', 'inflation', 'aktie' ] class Q2(Page): form_model = 'player' form_fields = ['erste_teilnahme' ] class Q3(Page): form_model = 'player' form_fields = ['attention_check' ] #pass class Q4(Page): form_model = 'player' form_fields = ['general_risk_question', 'Q_difdec', 'Q_insimport', 'Q_about', 'Q_sozimport', 'Q_umwimport', 'Q_sustimport', 'Q_sozdon', 'Q_envdon', 'Q_else' ] ########################################################### # Allgemeiner Ablauf: class B1(Page): pass class B2(Page): pass ########################################################### # Ab hier Aufgaben # Errormessage Hilfsklasse class IncorrectResponse(ExtraModel): player = models.Link(Player) field_name = models.StringField() response = models.StringField() # Real Efford Task ("o" zählen) class S1(Page): form_model = 'player' form_fields = ['text_1'] @staticmethod def error_message(player: Player, values): solutions = dict(text_1='Der beste, wenn er eins tut, tut er alles, oder, um weniger paradox zu sein, in dem einen, was er recht tut, sieht er das Gleichnis von allem, was recht getan wird. (Johann Wolfgang von Goethe)') errors = {name: 'Bitte überprüfen Sie Ihren Text und versuchen sie es nochmal.' for name in solutions if values[name] != solutions[name]} if errors: for name in errors: response = values[name] IncorrectResponse.create(player=player, field_name=name, response=str(response)) return errors @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group # Vermögen wird erhöht player.wealth = player.wealth + 250 # Die Bedingung wurde von https://www.otreehub.com/code/ übernommen class S2(Page): form_model = 'player' form_fields = ['text_2'] @staticmethod def error_message(player: Player, values): solutions = dict(text_2='Wir alle sind nur eine weiterentwickelte Art von Affen, auf einem unbedeutenden Planeten eines sehr durchschnittlichen Sterns. Aber wir können das Universum verstehen. Das macht uns zu etwas sehr Besonderem. (Stephen Hawking)') errors = {name: 'Bitte überprüfen Sie Ihren Text und versuchen sie es nochmal.' for name in solutions if values[name] != solutions[name]} if errors: for name in errors: response = values[name] IncorrectResponse.create(player=player, field_name=name, response=str(response)) return errors @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group # Vermögen wird erhöht player.wealth = player.wealth + 250 class S3(Page): form_model = 'player' form_fields = ['text_3'] @staticmethod def error_message(player: Player, values): solutions = dict(text_3='Dieser meint etwas zu wissen, obwohl er nicht weiß, ich aber, der ich nichts weiß, glaube auch nicht zu wissen. Ich scheine also um dieses wenige doch weiser zu sein als er, weil ich, was ich nicht weiß, auch nicht glaube zu wissen. (Sokrates)') errors = {name: 'Bitte überprüfen Sie Ihren Text und versuchen sie es nochmal.' for name in solutions if values[name] != solutions[name]} if errors: for name in errors: response = values[name] IncorrectResponse.create(player=player, field_name=name, response=str(response)) return errors @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group # Vermögen wird erhöht player.wealth = player.wealth + 250 class S4(Page): form_model = 'player' form_fields = ['text_4'] @staticmethod def error_message(player: Player, values): solutions = dict(text_4='Im großen Buch der Natur kann nur der lesen, der die Sprache kennt, in welcher dieses Buch geschrieben ist, und diese Sprache ist die Mathematik. (Galileo Galilei)') errors = {name: 'Bitte überprüfen Sie Ihren Text und versuchen sie es nochmal.' for name in solutions if values[name] != solutions[name]} if errors: for name in errors: response = values[name] IncorrectResponse.create(player=player, field_name=name, response=str(response)) return errors @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group # Vermögen wird erhöht player.wealth = player.wealth + 250 ########################################################### # Seiten zur Beschreibung des Experimentaufbaus vor der Entscheidung: class E1(Page): pass class E2(Page): pass class E2b(Page): pass class E2c(Page): pass class E3(Page): pass class E4(Page): pass class E_last(Page): pass ########################################################### # Beispielvertrag class InsD(Page): form_model = 'player' form_fields = ['versicherungssumme', 'besonderheit', 'ausfall'] @staticmethod def error_message(player: Player, values): solutions = dict( versicherungssumme='1000 Taler', besonderheit='Unten', ausfall='Meine Auszahlung am Ende des Experiments kann 0 Taler betragen.' ) errors = {name: 'Bitte versuchen sie es nochmal.' for name in solutions if values[name] != solutions[name]} if errors: for name in errors: response = values[name] IncorrectResponse.create(player=player, field_name=name, response=str(response)) return errors # Seiten zur Entscheidung class InsDA(Page): form_model = 'player' form_fields = ['insurance_premium_dec_contract_1'] class InsDB(Page): form_model = 'player' form_fields = ['insurance_premium_dec_contract_2'] class InsDC(Page): form_model = 'player' form_fields = ['insurance_premium_dec_contract_3'] class InsDD(Page): form_model = 'player' form_fields = ['insurance_premium_dec_contract_4'] class InsDE(Page): form_model = 'player' form_fields = ['insurance_premium_dec_contract_5'] @staticmethod def before_next_page(player: Player, timeout_happened): # In diesem Fall gibt es einen Diebstahl if player.theft == 1: # Selektion des zufällig ausgewählten Vertrags: if player.rand_contract == 1: # Erste Entscheidung wurde ausgewählt. Überprüfen ob der SP kleiner/gleich der WTP if player.sec_price_contract_1 <= player.insurance_premium_dec_contract_1: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_1 elif player.sec_price_contract_1 > player.insurance_premium_dec_contract_1: # Vermögen ohne SP player.wealth = 0 # Alle anderen Bedingungen analog. elif player.rand_contract == 2: if player.sec_price_contract_2 <= player.insurance_premium_dec_contract_2: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_2 elif player.sec_price_contract_2 > player.insurance_premium_dec_contract_2: # Vermögen ohne SP player.wealth = 0 elif player.rand_contract == 3: if player.sec_price_contract_3 <= player.insurance_premium_dec_contract_3: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_3 elif player.sec_price_contract_3 > player.insurance_premium_dec_contract_3: # Vermögen ohne SP player.wealth = 0 elif player.rand_contract == 4: if player.sec_price_contract_4 <= player.insurance_premium_dec_contract_4: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_4 elif player.sec_price_contract_4 > player.insurance_premium_dec_contract_4: # Vermögen ohne SP player.wealth = 0 elif player.rand_contract == 5: if player.sec_price_contract_5 <= player.insurance_premium_dec_contract_5: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_5 elif player.sec_price_contract_5 > player.insurance_premium_dec_contract_5: # Vermögen ohne SP player.wealth = 0 else: print('Fehler 2') # In diesem Fall gibt es keinen Diebstahl elif player.theft == 0: # Selektion des zufällig ausgewählten Vertrags: if player.rand_contract == 1: # Erste Entscheidung wurde ausgewählt. Überprüfen ob der SP kleiner/gleich der WTP if player.sec_price_contract_1 <= player.insurance_premium_dec_contract_1: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_1 elif player.sec_price_contract_1 > player.insurance_premium_dec_contract_1: # Vermögen ohne SP player.wealth = player.wealth # Alle anderen Bedingungen analog. elif player.rand_contract == 2: if player.sec_price_contract_2 <= player.insurance_premium_dec_contract_2: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_2 elif player.sec_price_contract_2 > player.insurance_premium_dec_contract_2: # Vermögen ohne SP player.wealth = player.wealth elif player.rand_contract == 3: if player.sec_price_contract_3 <= player.insurance_premium_dec_contract_3: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_3 elif player.sec_price_contract_3 > player.insurance_premium_dec_contract_3: # Vermögen ohne SP player.wealth = player.wealth elif player.rand_contract == 4: if player.sec_price_contract_4 <= player.insurance_premium_dec_contract_4: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_4 elif player.sec_price_contract_4 > player.insurance_premium_dec_contract_4: # Vermögen ohne SP player.wealth = player.wealth elif player.rand_contract == 5: if player.sec_price_contract_5 <= player.insurance_premium_dec_contract_5: # Vermögen minus SP player.wealth = player.wealth - player.sec_price_contract_5 elif player.sec_price_contract_5 > player.insurance_premium_dec_contract_5: # Vermögen ohne SP player.wealth = player.wealth else: print('Fehler 1') else: print('Fehler') ########################################################### # App Ablauf page_sequence = [Welcome, B1, B2, Q_envelope, Q_envelope2, S1, S2, S3, S4, Startamount, E1, E3, E2, E2b, E2c, E4, InsD, E_last, InsDA, Q, InsDB, Q1, InsDC, Q2, InsDD, Q3, InsDE, Q4, Simulation, End]