none

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
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

warum gibt es None aus, wenn ich diesen Code ausführe?


print(print("ich bin: (bitte gib die anzahl deiner jahre an)"), input(""), print("jahre alt"))


ich bin: (bitte gib die anzahl deiner jahre an)
23
jahre alt
None 23 None
>>>
BlackJack

@jan.b: Weil `print()` den Wert `None` zurück gibt.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

BlackJack hat geschrieben:@jan.b: Weil `print()` den Wert `None` zurück gibt.
ich habs trotzdem noch nicht.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dafür hast du ja auch schon wieder deine alte Angewohnheit der fullquotes ausgebuddelt. In irgendeinem Universum ist das bestimmt was wert!
BlackJack

@jan.b: `print()` hat einen Rückabewert. Der ist `None`. Und wenn Du den mit einem anderen `print()` ausgibst, nun ja, dann wird er halt ausgegeben.

Sag doch mal was Du denkst wie Dein Code ausgeführt wird. In welcher Reihenfolge wird welche Funktion mit welchen Werten als Argumente ausgeführt?
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

__deets__ hat geschrieben:Na dafür hast du ja auch schon wieder deine alte Angewohnheit der fullquotes ausgebuddelt. In irgendeinem Universum ist das bestimmt was wert!
fullqotes?
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

BlackJack hat geschrieben:@jan.b: `print()` hat einen Rückabewert. Der ist `None`. Und wenn Du den mit einem anderen `print()` ausgibst, nun ja, dann wird er halt ausgegeben.

Sag doch mal was Du denkst wie Dein Code ausgeführt wird. In welcher Reihenfolge wird welche Funktion mit welchen Werten als Argumente ausgeführt?
ich habe ja nach einer Möglichkeit gesucht, mit der man einen ausfüllbaren lückentext in einer reihe erstellen kann. deswegen habe ich 3 Anweisungen in eine Anweisung gepackt. dann wird es der Reihenfolge nach abgearbeitet: ich bin (hier ist der Input für das alter) jahre alt. war zumindest mein gedanke. das es nicht geklappt hat habe ich ja auch gesehen, aber es gab nach meiner Auffassung keinen leeren wert, der ausgegeben werden sollte.
BlackJack

@jan.b: Welcher Reihenfolge nach wird es denn abgearbeitet? Denn es gibt ja eine Abarbeitungsreihenfolge, die genau zu der Ausgabe führt, die Du siehst. Und diese Ausführungsreihenfolge musst Du verstehen, denn jeglicher Python-Code wird nach den selben Regeln ausgeführt. Und das ist bei Funktionsaufrufen das erst die Argumente berechnet werden, und dann die Funktion mit diesem Argumenten aufgerufen wird. Und genau da passiert hier. Erst werden die Ausdrücke für die drei Argumente des `print()`-Aufrufs ausgewertet, und dann wird das `print()` damit aufgerufen. Und das erste und letzte Argument ist der Rückgabewert eines `print()`-Aufrufs. Und der ist nun mal `None` weil `print()` nichts berechnet, sondern den Effekt hat, das da etwas auf die Standardausgabe geschrieben wird.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Die Sache mit dem Lückentext verstehe ich nicht. Ich persönlich denke immer dem EVA-Prinzip entsprechend, also erst die Eingabe, dann die Verarbeitung und dann die Ausgabe und würde es hier auch entsprechend programmieren:

Code: Alles auswählen

>>> alter = input("Bitte gib dein Alter in Jahren an: ")
Bitte gib dein Alter in Jahren an: 23
>>> print("Ich bin {} Jahre alt.".format(alter))
Ich bin 23 Jahre alt.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@jan.b: Du müsstest mal dringend ein deinem Grundverständnis von Python bzw. der Programmierung mit Python arbeiten. Dein Beispiel mit den verschachtelten `print()` zeigt eigentlich, dass das Trial&Error Programmierung ist. Aber: Programmieren != Raten.#
Ein guter Einstiegspunkt wäre, wenn du mal in Ruhe das offiziellen Python-Tutorial durcharbeitetest.

Das man, wie du es nennst, einen "Lückentext in der Kommandozeile hat, ist auch eher ungewöhnlich / unüblich. Standard ist da eher EVA, wie von pixewakb gezeigt.

Gruß, noisefloor
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@jan.b: um die Ausführungsreihenfolge deutlich zu machen, kannst Du alle Argumente erst in Variablen speichern:

Code: Alles auswählen

print(print("ich bin: (bitte gib die anzahl deiner jahre an)"), input(""), print("jahre alt"))
wird zu

Code: Alles auswählen

a = print("ich bin: (bitte gib die anzahl deiner jahre an)")
b = input("")
c = print("jahre alt")
print(a, b, c)
und damit hoffentlich klar, wie die Ausgabe zustande kommt.
BlackJack

@pixewakb: Das mit dem Lückentext gibt es unter input im input noch einmal als eigenes Thema.
Antworten