In Python "None" als Rückgabewert anstatt Value

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
ihavenoclue
User
Beiträge: 10
Registriert: Montag 18. Oktober 2021, 14:43

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
Benutzeravatar
sparrow
User
Beiträge: 4510
Registriert: Freitag 17. April 2009, 10:28

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.
ihavenoclue
User
Beiträge: 10
Registriert: Montag 18. Oktober 2021, 14:43

Danke! :-)

Also es sollen mehrere Werte eingegeben und als 2 Listen ausgegeben werden. Da hängt's bei mir leider ordentlich...

LG
Manul
User
Beiträge: 53
Registriert: Samstag 13. Februar 2021, 16:00

https://docs.python.org/3/tutorial/datastructures.html#more-on-lists hat geschrieben:You might have noticed that methods like insert, remove or sort that only modify the list have no return value printed – they return the default None. This is a design principle for all mutable data structures in Python.
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten