Programmieren lernen mit Python

Programmieren lernen mit Python

von: Allen B. Downey

O'Reilly Verlag, 2014

ISBN: 9783955618087

Sprache: Deutsch

320 Seiten, Download: 2969 KB

 
Format:  EPUB, PDF, auch als Online-Lesen

geeignet für: geeignet für alle DRM-fähigen eReader geeignet für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones Online-Lesen PC, MAC, Laptop


 

eBook anfordern

Mehr zum Inhalt

Programmieren lernen mit Python



Es wird Sie nicht überraschen, dass Strings zum Typ str und Integer zum Typ int gehören. Dass Zahlen mit einen Dezimalpunkt zum Typ float gehören, ist da schon weniger überraschend. Der Name dieses Typs kommt daher, dass Dezimalbrüche als Fließkommazahlen (engl. floating-point) dargestellt werden.

>>> type(3.2) builtins.float

Was ist mit Werten wie '17' und '3.2'? Sie sehen aus wie Zahlen, stehen aber in Apostrophen, genau wie Strings.

>>> type('17') builtins.str >>> type('3.2') builtins.str

Es sind Strings.

Wenn Sie große Zahlen eintippen, können Sie der Versuchung vielleicht nicht widerstehen, einen Punkt als Tausendertrennzeichen sowie ein Komma für die Dezimalstellen einzugeben, z. B. 1.000,00. In Python ist das zwar keine Zahl, aber trotzdem zulässig:

>>> 1.000,00 (1.0, 0)

Das ist natürlich etwas völlig anderes als das, was wir erwartet haben! Python interpretiert 1.000,00 als kommaseparierte Folge von Zahlen. Dies ist also unser erstes Beispiel für einen semantischen Fehler: Der Code wird ohne Fehlermeldung ausgeführt, macht aber nicht das »Richtige«.

In diesem Beispiel erfolgen drei Zuweisungen. In der ersten wird einer neuen Variablen mit dem Namen meldung ein String zugewiesen. In der zweiten wird der Integer 17 an n übergeben. Und in der dritten Zuweisung wird der (ungefähre) Wert von der Variablen pi zugewiesen.

Eine gebräuchliche Form, Variablen auf Papier darzustellen, besteht darin, den Namen aufzuschreiben und mit einem Pfeil auf den Wert der Variablen zu zeigen. Eine solche Darstellung bezeichnet man als Zustandsdiagramm, weil darin der Zustand der jeweiligen Variablen dargestellt wird (quasi die »Gemütsverfassung« der Variablen). Abbildung 2.1 zeigt das Ergebnis des vorherigen Beispiels.

Abbildung 2.1 Zustandsdiagramm

Der Typ der Variablen richtet sich dabei nach dem Typ des Werts, auf den sie sich bezieht.

>>> type(meldung) builtins.str >>> type(n) builtins.int >>> type(pi) builtins.float

Wenn Sie in Python 2 einen Integer mit einer führenden Null eingeben, erhalten Sie einen merkwürdigen Fehler:

>>> plz = 02492 ^ SyntaxError: invalid token

Andere Zahlen scheinen zu funktionieren, aber die Ergebnisse sind eher seltsam:

>>> plz = 02132 >>> plz 1114

Können Sie erkennen, was hier geschieht? Tipp: Geben Sie die Werte 01, 010, 0100 und 01000 ein. Den gleichen Effekt haben Sie in Python 3, wenn Sie die führende Null durch 00 ersetzen.

Listing 2.1

Wenn Sie übrigens in einem Terminal im interaktiven Python-Interpreter arabische Schriftzeichen in Variablennamen bei einer Zuweisung verwenden, dann seien Sie auf eine kleine Überraschung gefasst, denn dann wird von rechts nach links geschrieben! Falls Sie dasselbe in einem Code-Editor ausprobieren, könnte diese Überraschung kleiner ausfallen, sofern der Editor das nicht richtig unterstützt.

Wählen Sie für eine Variable einen nicht zulässigen Namen, so erhalten Sie einen Syntaxfehler:

>>> 76posaunen = 'Große Parade' SyntaxError: invalid syntax >>> mehr@ = 1000000 SyntaxError: invalid syntax >>> else = 'Fortschrittliche Theoretische Zymologie' SyntaxError: invalid syntax

76posaunen ist nicht zulässig, weil der Name nicht mit einem Buchstaben beginnt. mehr@ ist nicht zulässig, weil das Zeichen @ für Variablennamen nicht zulässig ist. Aber was stimmt mit else nicht?

Wie Sie feststellen werden, ist else eines der reservierten Schlüsselwörter von Python. Der Interpreter verwendet Schlüsselwörter, um die Struktur des Programms zu erkennen. Deshalb dürfen Sie sie nicht als Variablennamen verwenden.

In Python 3 gibt es 30 Schlüsselwörter:

and del global not with as elif if or yield assert else import pass break except in raise class finally is return continue for lambda try def from nonlocal while

In Python 2 gibt es noch die Schlüsselwörter exec und print, aber kein nonlocal.

Vielleicht sollten Sie diese Liste immer zur Hand haben. Wenn der Interpreter sich über einen Ihrer Variablennamen beschwert und Sie partout nicht wissen, warum, sehen Sie einfach auf der Liste nach.

In einigen anderen Sprachen wird ^ für den Exponenten verwendet, aber in Python steht dieses Zeichen für den bitweisen Operator XOR. Ich werde in diesem Buch nicht auf bitweise Operatoren eingehen, aber unter http://wiki.python.org/moin/BitwiseOperators können Sie alles darüber nachlesen.

In Python 2 macht der Divisionsoperator unter Umständen nicht das, was Sie erwarten:

>>> minute = 59 >>> minute/60 0

Der Wert von minute ist 59, und in der konventionellen Arithmetik ergibt 59 dividiert durch 60 den Wert 0,98333 – nicht 0. Der Grund für diese Diskrepanz liegt darin, dass Python eine Division ohne Rest durchführt. Wenn beide Operanden ganze Zahlen sind, erhalten Sie als Ergebnis ebenfalls eine ganze Zahl. Die Stellen nach dem Komma werden einfach abgeschnitten. In unserem Beispiel wird das Ergebnis also auf null abgerundet.

In Python 3 ist das Ergebnis dieser Division eine Fließkommazahl vom Typ float. Für die Division ohne Rest kommt der neue Operator // zum Einsatz.

Wenn beide Operanden eine Fließkommazahl sind, führt Python eine Fließkommadivision durch, und das Ergebnis ist ein float:

>>> minute/60.0 0.98333333333333328

Eine Anweisung ist ein Codeteil, den der Python-Interpreter ausführen kann. Wir kennen bisher zwei Arten von Anweisungen: Zuweisungen und in Python 2 auch print.

Technisch gesehen, ist ein Ausdruck ebenfalls eine Anweisung. Aber wahrscheinlich ist es einfacher, sich die beiden als zwei verschiedene Dinge vorzustellen. Der wichtigste Unterschied ist, dass ein Ausdruck einen Wert hat, eine Anweisung dagegen nicht.

In der ersten Zeile wird meilen ein Wert zugewiesen, was aber keinen sichtbaren Effekt hat. Die zweite Zeile ist ein Ausdruck, deshalb wertet der Interpreter ihn aus und zeigt das Ergebnis an. Dabei finden wir heraus, dass ein Marathon ungefähr 42 Kilometer lang ist.

Wenn Sie aber denselben Code in ein Skript eingeben und ausführen, erhalten Sie überhaupt keine Ausgabe. Im Skriptmodus hat ein Ausdruck allein keinen sichtbaren Effekt. Python wertet den Auszug aus, zeigt den Wert aber nicht an, es sei denn, Sie weisen den Interpreter dazu an:

meilen = 26.2 print(meilen * 1.61)

Im ersten Moment kann dieses Verhalten verwirrend sein.

Ein Skript enthält üblicherweise eine Folge von Anweisungen. Wenn es mehr als eine Anweisung gibt, erscheinen die Ergebnisse nacheinander in der Reihenfolge der Anweisungen.

Das Skript

print(1) x = 2 print(x)

erzeugt beispielsweise die folgende Ausgabe:

1 2

Für die Zuweisungsanweisung wird dabei nichts ausgegeben.

Tippen Sie die folgenden Anweisungen in den Python-Interpreter, um herauszufinden, was sie machen:

5 x = 5 x + 1

Schreiben Sie nun dieselben Anweisungen in ein Skript, und führen Sie es aus. Welche Ausgabe erhalten Sie? Machen Sie anschließend aus jedem Ausdruck eine print-Anweisung, und führen Sie das Skript erneut aus.

Listing 2.2

Der Operator + funktioniert mit Strings, macht aber nicht das, was Sie sich...

Kategorien

Service

Info/Kontakt