Seite 1 von 1
In Python "None" als Rückgabewert anstatt Value
Verfasst: Dienstag 16. November 2021, 19:15
von ihavenoclue
Hi!
Ich möchte mittels Input verschiedene Namen und Alter erfassen und am Ende als 2 Liste (eine für die Namen, eine für das Alter) ausgeben lassen.
So sieht mein Code bisher aus:
Code: Alles auswählen
name = "Name: "
age = "Alter: "
def personendaten():
global name_list
global age_list
name_input = input(name)
age_input = int(input(age))
name_all = []
names_list = name_all.append(name_input)
age_all = []
age_list = age_all.append(age_input)
return names_list, age_list
print(personendaten())
Leider erhalte ich als Rückgabewert nur ein "None". Stehe gerade völlig auf dem Schlauch. Weiß jemand, was ich da noch ausbauen kann?
Danke für Eure Hilfe!
Sediah
Re: In Python "None" als Rückgabewert anstatt Value
Verfasst: Dienstag 16. November 2021, 19:36
von sparrow
Ojeh.
Räumen wir erst einmal auf:
Vergiss, dass es global gibt. Globale Variablen sind böse und man verwendet sie nicht.
Alles, was eine Funktion zum Arbeiten braucht, erhält sie als Parameter und gibt das Ergebnis per return zurück.
Es macht keinen Sinn "name" und "age" außerhalb der Funktion zu definieren, weil sie nur in der Funktion verwendet werden.
Wie bereits gesagt, macht "global" hier keinen Sinn.
Und dadurch ergibt sich für mich auch nicht die Sinnhaftigkeit, leere Listen anzulegen, in die einen Wert zu legen und die die dann zurückzugeben. Wenn es eh nur ein Wert ist, warum sind das dann Listen?
Wenn du das abarbeitest, dann wirst du sicherlich auf den Fehler stoßen.
Re: In Python "None" als Rückgabewert anstatt Value
Verfasst: Dienstag 16. November 2021, 19:46
von ihavenoclue
Danke!
Also es sollen mehrere Werte eingegeben und als 2 Listen ausgegeben werden. Da hängt's bei mir leider ordentlich...
LG
Re: In Python "None" als Rückgabewert anstatt Value
Verfasst: Dienstag 16. November 2021, 20:32
von Manul
Re: In Python "None" als Rückgabewert anstatt Value
Verfasst: Dienstag 16. November 2021, 20:32
von __blackjack__
@ihavenoclue: Weitere Anmerkungen: Funktions- und Methodennamen beschreiben üblicherweise die Tätigkeit die von der Funktion oder Methode durchgeführt wird. Dann weiss der Leser was die Funktion/Methode macht. `personendaten` hinterlässt den Leser eher mit Fragezeichen. Ausserdem geht so ein guter Name für Personendaten verloren.
Grunddatentypen haben in Namen nichts zu suchen. Man ändert den Typen gerne mal im Laufe der Programmentwicklung und dann muss man entweder durch das ganze Programm gehen und überall die betroffenen Namen ändern, oder man hat falsche, irreführende Namen im Programm.
Das sieht verdächtig danach aus als würden hier zusammengehörende Daten in zwei verschiedene, ”parallele” Datenstrukturen verteilt werden. Das macht man nicht. Man speichert Daten die zusammengehören auch zusammen. Sonst wird es im weiteren verlauf nur unübersichtlicher und man braucht Code um die bei der Verarbeitung dann zusammen zu führen, den man sich sparen kann wenn man die gar nicht erst trennt. Im einfachsten Fall würde man die Daten in Tupeln zusammenfassen. Wenn das mehr Werte zusammenkommen in `collections.namedtuple()`, damit man nicht mit magischen Indexwerten hantieren muss. Oder auch Klassen, wenn die Daten auch veränderbar sein sollen und/oder noch sinnvolle Operationen in Form von Methoden dazu kommen.