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
>>>
none
@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?
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 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?
@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.
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.
- 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
@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
@jan.b: um die Ausführungsreihenfolge deutlich zu machen, kannst Du alle Argumente erst in Variablen speichern:
wird zu
und damit hoffentlich klar, wie die Ausgabe zustande kommt.
Code: Alles auswählen
print(print("ich bin: (bitte gib die anzahl deiner jahre an)"), input(""), print("jahre alt"))
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)
@pixewakb: Das mit dem Lückentext gibt es unter input im input noch einmal als eigenes Thema.