@Meishere: Also einfach Fehler unkommentiert übernehmen ist etwas was man in der Schule nicht machen sollte. Schule soll einen doch nicht zu einem tumben Befehlsempfänger erziehen, der nichts in Frage stellt. Wenn das Daten im Portable Bitmap (PBM) Format sein sollen, dann ist das Komma an der Stelle falsch. Ein Lehrer der eine Korrektur mit Begründung an der Stelle nicht anerkennt, sollte vielleicht einen anderen Beruf wählen. Wichtig ist die Begründung, so dass der Lehrer nicht denkt es war eine Unachtsamkeit von Dir das Komma weg zu lassen. Man könnte also zum Beispiel die Stelle kommentieren, dass da vorher ein Komma stand, an der Stelle laut Spezifikation aber nur "whitespace" erlaubt ist. Als Quelle kann man zum Beispiel Wikipedia (http://de.wikipedia.org/wiki/Portable_Bitmap) oder die Dokumentation von netpbm (http://netpbm.sourceforge.net/doc/pbm.html) angeben.
Die ganzen Zahlen da hart rein zu schreiben ist nicht besonders wartbar. An den `range()`-Argumenten ist auch unschön, dass man nachdenken muss wenn man beide Argumente übergibt. Bei einem ``range(25)`` sieht man viel leichter wie viele Elemente da in der Liste enthalten sind -- kann man einfach ablesen: 25. Bei ``range(1, 26)`` muss man sich beide Argumente anschauen und dann auch noch rechnen um auf die 25 zu kommen.
pbm-Flagge
@BlackJack: Ja du hast natürlich recht und unsere Lehrerin ist auch nicht so, dass sie wütend wäre oder sich nicht "verbessern" lässt.
Ich werde sie aber erst in der nächsten Informatik-Stunde drauf ansprechen und habe erstmla meine Hausaufgaben so gemacht "wie sie es will". Solange es funktioniert ist es ja nur ein "Schönheitsfehler".
@EyDu: Ah. Jetzt habe ich dich verstanden. Einfach schleife ohne print aufrufen und schon klappt's. Da hat mir wieder meine Lehrerin was falsches erzählt bzw. uns etwas vorenthalten... Nämlich, dass man Funktionen auch ohne "print" ausgeben kann-.-
EDIT: Ok, ich habe jetzt doch meine Lehrerin informiert und das Ganze auch in den Kommentaren geschrieben. Mal sehen wie sie reagiert.
Ich werde sie aber erst in der nächsten Informatik-Stunde drauf ansprechen und habe erstmla meine Hausaufgaben so gemacht "wie sie es will". Solange es funktioniert ist es ja nur ein "Schönheitsfehler".
@EyDu: Ah. Jetzt habe ich dich verstanden. Einfach schleife ohne print aufrufen und schon klappt's. Da hat mir wieder meine Lehrerin was falsches erzählt bzw. uns etwas vorenthalten... Nämlich, dass man Funktionen auch ohne "print" ausgeben kann-.-
EDIT: Ok, ich habe jetzt doch meine Lehrerin informiert und das Ganze auch in den Kommentaren geschrieben. Mal sehen wie sie reagiert.
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
Peter Ustinov
Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
Ich würde sagen, dass du da eher etwas falsch verstanden hast "print" macht die Ausgabe von Werten und hat keine magischen Auswirkungen auf die möglicherweise aufgerufenen Funktionen. Funktionen führen lediglich die in ihnen enthaltenen Anweisungen aus. Und wenn da ein "print" steht, dann wird eben einfach etwas ausgegeben. Ist es eine Addition, dann wird eben etwas addiert.Meishere hat geschrieben:@EyDu: Ah. Jetzt habe ich dich verstanden. Einfach schleife ohne print aufrufen und schon klappt's. Da hat mir wieder meine Lehrerin was falsches erzählt bzw. uns etwas vorenthalten... Nämlich, dass man Funktionen auch ohne "print" ausgeben kann-.-
Sebastian
Das Leben ist wie ein Tennisball.
Hmmm... Ok.
Dann habe ich dich wohl doch flasch verstanden...
Aber dann frage ich mich, wieso der Fehler nicht mehr auftritt, wenn man print wegnimmt.
Dann habe ich dich wohl doch flasch verstanden...
Aber dann frage ich mich, wieso der Fehler nicht mehr auftritt, wenn man print wegnimmt.
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
Peter Ustinov
Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Um EyDu zu ergaenzen: Funktionen fuehren nur den Code aus den sie enthalten, aber geben _immer_ auch etwas zurueck. Gibt es kein explizites `return` in der Funktion wird `None` zurueckgegeben.
Und damit ist das `print` an der Stelle (fast) dasselbe wie folgendes:
Und damit ist das `print` an der Stelle (fast) dasselbe wie folgendes:
Code: Alles auswählen
In [1]: print None
None
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@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:
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.
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 [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.
Oh, danke, dass ihr euch so viel Mühe macht
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
Naja. Danke nochmal. Das Forum ist echt hilfreich
Schöne Grüße
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
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
Peter Ustinov
Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov