Python Neuling braucht Hilfe

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
Alex19
User
Beiträge: 2
Registriert: Donnerstag 2. Februar 2023, 18:08

Bei folgendem Code ist das Ergebnis immer "Maximum is Empty" und "Minimum is Empty", egal was ich in 'input' eingebe und da ich noch neu bin komme ich leider gerade nicht dahinter warum die eingegebenen Zahlen nicht übernommen werden. Danke schonmal!

Code: Alles auswählen

num = []
new_num = ""
lnum = list(map(int, num))
while new_num != "Done" :
    new_num = input("Enter Integer Number or Enter Done: ")
    if new_num == "Done" :
        break
    try :
        new_num = int(new_num)
    except :
        print("Invalid input")
    if new_num != "Done" :
        num.append(new_num)
        
lresult = max(lnum, default = "Empty")
sresult = min(lnum, default = "Empty")
for number in[lnum] :
    print("Maximum is", lresult)
    print("Minimum is", sresult)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Als erstes ist es wichtig, aussagekärftige Variablennamen zu verwenden und nicht welche, die sich aus kryptischen Abkürzungen zusammensetzen und irreführend sind, oder Variablen die für mehrere Dinge verwendet werden.

Code: Alles auswählen

numbers = []
empty_list_of_numbers = list(map(int, numbers))
new_input = ""
while new_input != "Done":
    new_input = input("Enter Integer Number or Enter Done: ")
    if new_input == "Done":
        break
    try:
        new_number = int(new_input)
    except:
        print("Invalid input")
    if new_number != "Done" :
        numbers.append(new_number)
        
maximum = max(empty_list_of_numbers, default="Empty")
minimum = min(empty_list_of_numbers, default="Empty")
for unused_empty_list in [empty_list_of_numbers]:
    print("Maximum is", maximum)
    print("Minimum is", minimum)
Ich habe die Namen anhand des Codes ermittelt, so dass deutlich werden sollte, wo überall die Probleme liegen.
`empty_list_of_numbers` ist von Anfang bis Ende des Programms leer. Da Du nie was in die Liste packst. Das sollte Dein Ergebnis erklären.
new_num wird für zwei verschieden Dinge verwendet. Einmal als Eingabe und einmal die Eingabe in eine Zahl umgewandelt. Durch die Aufspaltung in zwei Variablen wird klar, dass da was schief läuft, denn `new_number` ist nur definiert, wenn der Input in eine Zahl umgewandelt werden kann, Du machst aber bei einem Fehler weiter, als ob nichts wäre, was dann später zu Folgefehlern oder falschen Ergebnissen führt. new_number mit einem String zu vergleichen, wird niemals etwas wahres werden. Du vergleichst dreimal mit "Done" obwohl einmal ausreichen sollte.
Man initialisiert keine Variable mit einem Dummy-Wert, nur dass die while-Schleife starten kann, sondern benutzt statt dessen eine while-True-Schleife.
Nackte excepts sollte man nicht verwenden, weil man nur Fehler, die man auch erwartet abfangen darf.

Code: Alles auswählen

numbers = []
while True:
    new_input = input("Enter Integer Number or Enter Done: ")
    if new_input == "Done":
        break
    try:
        new_number = int(new_input)
    except ValueError:
        print("Invalid input")
    else:
        numbers.append(new_number)
Nun zum zweiten Teil des Programms. Statt `empty_list_of_numbers` willst Du wahrscheinlich `numbers` verwenden. Eine for-Schleife über eine Einelementige Liste ist unsinn, zumal Du die Schleifenvariable gar nicht verwendest.

Code: Alles auswählen

maximum = max(numbers, default="Empty")
minimum = min(numbers, default="Empty")
print("Maximum is", maximum)
print("Minimum is", minimum)
Alex19
User
Beiträge: 2
Registriert: Donnerstag 2. Februar 2023, 18:08

Vielen Dank für die Aufklärung und Hilfe!
Antworten