Wie kann ich das ändern, dass es funktioniert?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du erhältst bei der drittletzten Zeile „Eingabe_Ueberpruefung()“ zwar drei Werte zurück. Aber nur weil du die drei Werte in der Definition der Funktion lokal in „Uhr1“, „Uhr2“, „Uhr3“ abgespeichert hast, werden die Werte nach dem Funktionsaufruf nicht automatisch global in entsprechend benannten Variablen abgespeichert. Du musst hier noch selbst die Rückgabewerte in den entsprechenden Variablen abspeichern, also

Uhr1, Uhr2, Uhr3 = Eingabe_Ueberpruefung()

statt nur

Eingabe_Ueberpruefung()

schreiben. Genauso in der nächsten Zeile dann mit dem „Gesamtpreis“.

============

Außerdem addierst du gegen Ende der Funktion Ausgabe(Gesamtpreis) bei „Gesamtpreis+"€"“ eine ganze Zahl mit einem String. Das funktioniert so nicht. Du könntest beispielsweise zunächst mit str(Gesamtpreis) die Zahl in einen String umwandeln, um dann die Strings verketten zu können. Also „str(Gesamtpreis)+"€"“. Oder du verwendest ein Komma statt einem Plus, sodass beides als getrennte Parameter der print-Funktion übergeben wird und die print-Funktion dann automatisch den Gesamtpreis in einen String umwandelt. Oder du benutzt einen formatierten String (mit einem „f“ vorne), bei dem dann bei „{Gesamtpreis}“ der entsprechende Wert eingesetzt wird.

============

Ich habe hier mal die genannten Fehler ausgebessert, und den Rest sonst so belassen. Damit sollte der Code nun laufen...

def Werbebanner():
    print("Willkommen bei Rolex")
    print()
    print("Unsere neusten Uhrenmodelle:")
    print()
    #Uhr 1
    print("- Rolex Explorer II (4.000€)")
    #Uhr 2
    print("- Rolex Daytona (17.000€)")
    #Uhr 3
    print("- Rolex Datejust 36 (11.000€)")
    print()
    print("Sie können maximal jeweils 3 Uhren kaufen!")


def Eingabe_Ueberpruefung():
    n=1
    while n == 1:
        Uhr1 = input("Wie viele Explorer II Uhren möchten Sie kaufen: ")
        Uhr2 = input("Wie viele Daytona Uhren möchten Sie kaufen: ")
        Uhr3 = input("Wie viele Datejust 36 Uhren möchten Sie kaufen: ")
        if Uhr1.isdigit() and Uhr2.isdigit() and Uhr3.isdigit():
            Uhr1 = int(Uhr1)
            Uhr2 = int(Uhr2)
            Uhr3 = int(Uhr3)
        else:
            print()
            print("Bitte tippen Sie ganze Zahlen ein!")
            print()
            continue
        if Uhr1 > 3 or Uhr2 > 3 or Uhr3 > 3:
            print("Sie können nicht mehr als 3 Uhren jeweils kaufen!")
            continue
        else:
            break


    return Uhr1,Uhr2,Uhr3




def Berechnung(Uhr1,Uhr2,Uhr3):
    Explorer_II = Uhr1 * 4000
    Rolex_Daytona = Uhr2 * 17000
    Rolex_Datejust = Uhr3 * 11000


    Gesamtpreis = Explorer_II + Rolex_Daytona + Rolex_Datejust
    if Gesamtpreis > 50000:
        print("Sie erhalten 3% Rabatt")
        Gesamtpreis = Gesamtpreis * 0.97
    else:
        print("Sie erhalten keinen Rabatt")
    return Gesamtpreis


def Ausgabe(Gesamtpreis):
    print(Gesamtpreis)
    print(f"Der Gesamtpreis ihres Einkaufs beträgt {Gesamtpreis}€")


Werbebanner()
Uhr1,Uhr2,Uhr3 = Eingabe_Ueberpruefung()
Gesamtpreis = Berechnung(Uhr1,Uhr2,Uhr3)
Ausgabe(Gesamtpreis)

Ich kann kein Python. Aber was ich sehe, Du hast am Ende der Prozedur eingabe_überprüfung ein return. Demnach handelt es dich um eine Funktion mit Rückgabeparametern. Diese Werte müsstest Du beim Aufruf auffangen, also uhr1=eingabe_überprüfung....

Wie man das macht, da musst Du die Pythonexperten befragen.

Du hast Uhr1 nicht definiert. Da ist eben einiges in deinem Programm falsch. Ich würde das nochmal von vorne schreiben, und mich vorher erst über Unterprogramme in Python informieren.

https://www.python-kurs.eu/python3_funktionen.php

Woher ich das weiß:Studium / Ausbildung – Informatikstudent