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.")
............
ValueError: could not convert string to float:
- DeaD_EyE
- User
- Beiträge: 1242
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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.Wie kann man dies korrekt lösen?
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
- 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:
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