pbm-Flagge

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.
BlackJack

@Meishere: Weil ohne das ``print`` eben nicht mehr der "Datenmüll" ausgegeben wird. Die Rückgabewerte von den Funktionen haben doch nichts in den PBM-Daten zu suchen. Du nimmst ja nicht die ``print``\s weg, welche die 0en und 1en ausgeben.

Das was hinter ``print`` steht wird ausgewertet und dann ausgegeben. Literale wie Zahlen oder Zeichenketten werden zu sich selbst ausgewertet; Operatoren wie ``+``, ``*``, usw. werden angewendet und das Ganze wird zu einem Ergebnis ausgewertet; und Funktionen werden ausgeführt und durch ihren Rückgabewert ersetzt. Wenn eine Funktion nichts explizit mit einer ``return``-Anweisung zurück gibt, dann ist ihr Rückgabewert `None`. Du kannst Dir also vorstellen, dass am Ende jeder Funktion ein ``return None`` steht. Vielleicht hilft ja diese kleine Sitzung beim Verständnis:

Code: Alles auswählen

In [18]: print 42
42

In [19]: print 42 * 23
966

In [20]: print math.sqrt(25)
5.0

In [21]: def f(n):
   ....:     print '*' * n
   ....: 

In [22]: f(10)
**********

In [23]: print f(10)
**********
None
Bei [18] wird einfach nur die 42 ausgegeben. Bei [19] wird der Ausdruck ausgewertet. Bei [20] wird die `sqrt()`-Funktion mit 25 aufgerufen und die gibt die Quadratwurzel (`sqrt` steht für "square root") zurück und die wird dann von ``print`` ausgegeben.

Bei [21] wird eine Funktion definiert die `n` Sternchen mit ``print`` ausgibt. Wenn man diese Funktion aufruft, tut sie das wie man bei [22] sieht, auch. Und bei [23] ist dann das was Du gemacht hast: Es wird die Funktion aufgerufen; die gibt mit ``print`` 10 Sternchen aus; und *dann* wird durch das ``print`` vor dem Aufruf der implizite Rückgabewert von dem Funktionsaufruf ausgegeben. Und das ist halt in diesem wie auch in Deinem Fall unsinnig.
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Oh, danke, dass ihr euch so viel Mühe macht :D
So etwas ähnliches habe ich mir schon gedacht. Schließlich sieht man ja, wenn man das Python-Programm laufen lässt, dasss immer none mit ausgegeben wird.
Aber jetzt habe ich das ganze erst richtig verstanden. Da scheinen ein paar wichtige Grundkenntnisse an mir vorbeigegangen zu sein. Ohne meine Lehrerin schlecht mache zu wollen, liegt es wohl an ihr :(
Sie hat uns das ganze nur so halb erklärt. Wir haben als erstes Beispiel eine Funktion mit return gehabt und diese mit print aufgerufen, bei den anderen Funktionen (ohne return) haben wir es genauso gemacht und uns nciht daran gestört, dass "none" mit ausgegeben wurde.
Ich glaube unsere Lehrerin ist ein bisschen überfordert, da sie ja mehrere Programmiersprachen gleichzeitig unterrichten muss :mrgreen:

Naja. Danke nochmal. Das Forum ist echt hilfreich :)

Schöne Grüße
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
Antworten