ValueError: could not convert string to float:

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Moomo
User
Beiträge: 2
Registriert: Mittwoch 18. Januar 2023, 14:51

Ein freundliches Hallo an die Python-User.

Seit kurzem habe ich mit Python begonnen und arbeite der Zeit verschiedenen Übungen durch.
Sollte ich hier an der falschen Stelle mein Anliegen schreiben bitte ich um Nachsicht da ich eben erst die Registrierung vorgenommen habe.
Info dazu wo man solch ein Anliegen rein schreibt wäre dann gut.

Nun mein Problem:
Ein kleines Kassen Programm:

Wenn ich zu Beginn einen Preis eingebe läuft das Programm richtig durch.
Wenn ich jedoch zu Beginn einfach die Enter Taste drücke und somit die "if" Schleife ansteuern möchte gibt es den Fehler "ValueError: could not convert string to float:" aus.
Wie kann man dies korrekt lösen?

Vorab vielen Dank für Eure Hilfe.

Code:
preis = input("Bitte Preis eingeben ")
preis = float(preis)

if preis == "":
print ("Fehlende Eingabe")
preis = input("Bitte Preis eingeben ")
preis = float(preis)

rabat_in_prozent = input("Bitte Rabat in % eingeben ")
rabat_in_prozent = float(rabat_in_prozent)

rabat_in_euro = preis/100*rabat_in_prozent
rabat_in_euro =float(rabat_in_euro)

neuer_preis = preis-rabat_in_euro

print ("Alter Preis ist", preis, "Euro. Neuer Preis ist", neuer_preis, "Euro.")

............
Benutzeravatar
DeaD_EyE
User
Beiträge: 1242
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wie kann man dies korrekt lösen?
Entweder, indem du als Nutzer genau das eingibst, was dein Programm erwartet oder dein Programm fragt den Nutzer so lange, bis er einen gültigen float eingegeben hat.
Oftmals ist es einfacher, Exceptions abzufangen, als alle erdenklichen Möglichkeiten einer nicht validen Eingabe zu überprüfen.
https://devblogs.microsoft.com/python/i ... rsus-lbyl/

Code: Alles auswählen

def get_float(question: str) -> float:
    while True:
        # Nutzer solange belästigen, bis er endlich gelernt hat Gleitkommazahlen richtig einzugeben
        user_input = input(f"{question}: ")
        try:
            value = float(user_input) # <- hier tritt der ValueError auf
        except ValueError:
            print(f"Ist keine Gültige Gleitkommazahl: {user_input}")
        else: # <- kein Fehler
            return value # <- Wert zurückgeben. Funktion wird verlassen, also wird auch die Schleife nicht mehr abgearbeitet
        # hier wird wieder zum Anfang der Schleife gesprungen

fragen = ("Größe", "Entfernung", "Gewicht")
werte = {frage: get_float(frage) for frage in fragen}

print(werte)

sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Moomo
User
Beiträge: 2
Registriert: Mittwoch 18. Januar 2023, 14:51

Hallo,

vielen Dank für die ausführliche Hilfe!
Bin zwar mit der Lösung noch etwas überfordert doch danke für den detaillierten Code!

Viele Grüße
Benutzeravatar
DeaD_EyE
User
Beiträge: 1242
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wichtig ist nur die get_float() Funktion.

Dem Namen `werte` wird mittels einer dict comprehension ein dict zugewiesen (sehr kompakte Form einer for-schleife).
Damit haben Anfänger auch so ihre Probleme.

Als For-Schleife sieht das dann so aus:

Code: Alles auswählen

fragen = ("Größe", "Entfernung", "Gewicht")
ergenis = {}

for frage in fragen:
    ergebnis[frage] = get_float(frage)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten