Seite 1 von 1
none
Verfasst: Sonntag 13. August 2017, 14:57
von jan.b
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
>>>
Re: none
Verfasst: Sonntag 13. August 2017, 15:10
von BlackJack
@jan.b: Weil `print()` den Wert `None` zurück gibt.
Re: none
Verfasst: Sonntag 13. August 2017, 21:47
von jan.b
BlackJack hat geschrieben:@jan.b: Weil `print()` den Wert `None` zurück gibt.
ich habs trotzdem noch nicht.
Re: none
Verfasst: Sonntag 13. August 2017, 22:04
von __deets__
Na dafür hast du ja auch schon wieder deine alte Angewohnheit der fullquotes ausgebuddelt. In irgendeinem Universum ist das bestimmt was wert!
Re: none
Verfasst: Sonntag 13. August 2017, 22:56
von 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?
Re: none
Verfasst: Montag 14. August 2017, 22:36
von jan.b
__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?
Re: none
Verfasst: Montag 14. August 2017, 22:41
von jan.b
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.
Re: none
Verfasst: Montag 14. August 2017, 23:10
von 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.
Re: none
Verfasst: Dienstag 15. August 2017, 01:34
von pixewakb
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.
Re: none
Verfasst: Dienstag 15. August 2017, 06:26
von noisefloor
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
Re: none
Verfasst: Dienstag 15. August 2017, 07:31
von Sirius3
@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.
Re: none
Verfasst: Dienstag 15. August 2017, 08:07
von BlackJack
@pixewakb: Das mit dem Lückentext gibt es unter
input im input noch einmal als eigenes Thema.