Kann mir jemand hier helfen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

1) Es ist seltsam, dass du für deine drei Personen Funktionen definierst. Funktionen sind nicht als Datenspeicher gedacht, sondern dazu da, eine Operation zu beschreiben / auszuführen (z.B. addieren, Daten speichern, ...).

Erstelle doch stattdessen eine Klasse, von der du drei Instanzen ableitest.

class Person:
  def __init__(self, first_name, last_name, age, nationality, birthday, id):
    self.first_name = first_name
    self.last_name = last_name
    self.age = age
    self.nationality = nationality
    self.birthday = birthday
    self.id = id

max = Person("Max", "Mustermann", 26, "german", "27. August", 244233333)
# etc. ...

2) Die Namen deiner Variablen, die eine Eingabe aufnehmen, sind irreführend. Du nutzt den Plural, obwohl der enthaltene Wert immer nur einem Namen entspricht.

3) Das Schlüsselwort and entspricht einer logischen Verknüpfung. Geprüft wird, ob first_names wahr ist (ja, so lange der Wert nicht leer ist) und last_names dem String "Max Mustermann" entspricht. Du möchtest doch aber eher prüfen, ob beide Variablen zusammengenommen dem vollen Namen entsprechen.

if first_names == "Max" and last_names = "Mustermann":

4) Deine Funktionen liefern keinen Rückgabewert. Daher bekommst du auch keine Antwort in der Konsole.

Bei Anwendung von Klassen/Objekten könnte man die String-Repräsentation überschreiben.

Beispiel:

class Person:
  """ constructor ... """

  def __str__(self):
    return self.first_name + " " + self.last_name + """ etc. ... """

max = Person("Max", "Mustermann", 26, """ etc. .... """)
print(max)

Implizit wird die print-Funktion versuchen, das Objekt max in einen String zu konvertieren. Dabei wird dessen __str__-Methode aufgerufen.

FabiFox300 
Fragesteller
 31.03.2024, 23:41

Okay, Wow, danke. Habe in nie was von der init-Methode verstanden, aber jetzt schon, ich danke dir für die Mühe! Schönen Abend!

0
cleanercode  01.04.2024, 10:20

Ob es so schön ist, ihm OO aufzuhetzen, weiß ich nicht. Dieses Paradigma ist nicht anfängerfreundlich.

0

Wenn wir nach der Ausgabe gehen, ist deine Logik im if-else einfach falsch. Denn deine Bedingungen werden in allen drei Fällen "false" und dein Programm springt in den else-Zweig.

Abgesehen davon bringen dir deine Funktionen nichts, denn sie verarbeiten nichts und geben nichts aus. An dieser Stelle wäre ein @property-Dekorator nützlich.

Eine andere Möglichkeit wären "Inner Functions" - sind jedoch nicht für Anfänger.

def max_mustermann(name, nachname):
    def get_name():
        return name

    def get_nachname():
        return nachname
    print(get_name())
    print(get_nachname())


max_mustermann("Max", "Mustermann")

Python ist zudem dynamisch typisiert, was bedeutet, dass du Datentypen nicht angeben musst. Das int-casting ist somit völlig unnötig, denn "age" und "id" werden automatisch zum int.

Oder:

age: int = 10

Viel Spaß beim Probieren! :)

Woher ich das weiß:Berufserfahrung

Das problem ist das du nur die variablen setzt und nicht ausgibst. Und für sowas verwendet man klassen nicht funktionienen

Woher ich das weiß:Hobby – hobby programmierer seit 2020