Funktionen die nichts zurückbringen

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
naomii2608
User
Beiträge: 11
Registriert: Dienstag 16. Juni 2020, 18:00

Ich habe eine function geschrieben um eine error Nachricht zu Printen wenn es in einer Linie keine Namen gibt. Dafür habe ich einmal diese Funktion geschrieben:

Code: Alles auswählen

def print_name(names):
    if names == "":
        return print("No match found")
    else:
        return print("%s" % names)
und im main code:

Code: Alles auswählen

for line in lines:
matches_names = line.split(';')[-1].split(',') #vor den Namen stehen andere Zeichen
final_variable = print_name(matches_names) #da beziehe ich mich auf die Funktion oben


bei der letzten Zeile bekomme ich aber eine Error message: "the function does not return anything".
Wie könnte das kommen?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Deine Einrückung bei der for-Schleife stimmt nicht.
Hier muss der Innenteil der Schleife eingerückt werden.

Die Funktion "print" gibt etwas aus. Den Rückgabewerte von per return zurückzugeben ist wahrscheinlich nicht das, was du möchtest.

Code: Alles auswählen

>>> x = print("test")
test
>>> x is None
True
>>> 
Wenn du, wie das "print" im Funktionsnamen vermuten lässt, nur etwas ausgeben willst, macht das return keinen Sinn. Und das binden des Rückgabewertes an "final_variable" auch nicht.

Du solltest erklären, was du hier vor hast.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@naomii2608: Die Funktion `print_name` beschreibt doch genau was sie tut, warum soll sie also etwas zurückgeben? Stattdessen sparst du dir das return und printest direkt den entsprechenden String.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@naomii2608: Das wird so nicht funktionieren weil `split()` eine Liste zurück gibt und eine Liste kann niemals gleich einer leeren Zeichenkette sein.

Dann ist das ``"%s" % names`` überflüssig, denn `print()` wandelt die Argumente die keine Zeichenketten sind selbst in Zeichenketten um. Zudem würde ich in neuem Code nicht mehr den ``%``-Operator für Zeichenkettenformatierung verwenden. Es gibt schon lange die `format()`-Methode (``"{}".format(names)``) und in aktuellen Python-Versionen f-Zeichenkettenliterale (``f"{names}"``). Aaaaber, das ist alles nicht wirklich sinnvoll wenn man nur *einen* Wert in eine Zeichenkette umwandeln will, denn da wäre der offensichtlichere Weg einfach ``str(names)``. Aber wie gesagt, bei `print()` nicht nötig.

Die Funktion sollte `print_names()` heissen wenn da Namen (Mehrzahl) mit ausgegeben werden.

„Line“ heisst in diesem Kontext auf Deutsch übrigens „Zeile“ und nicht „Linie“.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
naomii2608
User
Beiträge: 11
Registriert: Dienstag 16. Juni 2020, 18:00

der input sieht so aus:
5=20=22=10=2=0=0=1=0=1;Vincent Appel,Johannes Mondriaan
und ich versuche nur die Namen herauszulesen, deswegen die "matches_names" variable. In einer der Zeilen jedoch stehen keine Namen und deswegen mache ich die Funktion damit da dann die Error message gesprintet wird. Ich habe es auch ohne return versucht, nur mit print.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@naomii2608: Wer denkt sich denn solche komischen Dateiformate aus?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
naomii2608
User
Beiträge: 11
Registriert: Dienstag 16. Juni 2020, 18:00

gute Frage :D, dient nur der Übung.
Antworten