zurück rauf weiter Englisch Index

Kapitel 2

Variablen, Ausdrücke und Anweisungen

2.1 Werte und Typen

Ein Wert ist eines der fundamentalen Dinge     wie ein Buchstabe oder eine Zahl     die ein Programm verarbeitet. Die Werte, die wir bisher gesehen haben, sind 2 (das Ergebnis unserer Addition 1 + 1) und "Hello, World!".

Diese Werte gehören zu verschiedenen Typen: 2 ist eine ganze Zahl     oder Ganzzahl     und "Hello, World!" ist ein String (engl.: Kette, Folge)     eine Zeichenkette, so genannt, weil sie eine "Kette" von "Zeichen"     etwa: Buchstaben     enthält. Du kannst (wie auch der Interpreter) Strings daran erkennen, dass sie in Anführungszeichen eingeschlossen sind.

Die print - Anweisung funktioniert auch für Ganzzahlen.

>>> print 4
4

Wenn du nicht sicher bist, welchen Typ ein Wert hat, kann dir das der Interpreter sagen.

>>> type("Hello, World!")
<type 'string'>
>>> type(17)
<type 'int'>

Es ist kaum überraschend, dass Strings zum Typ string gehören. Ganzzahlen gehören zum Typ int (die Abkürzung des englischen Worts integer für ganze Zahl). Weniger offensichtlich ist es, dass Zahlen mit einem Nachkommaanteil zu einem Typ gehören, der float heisst. Diese Zahlen werden im sogenannten floating-point - Format     Gleitkomma-Format     dargestellt-

>>> type(3.2)
<type 'float'>

Wie steht es mit Werten wie "17" und "3.2"? Sie schauen aus wie Zahlen, sind aber in Anführungszeichen eingeschlossen, wie Strings.

>>> type("17")
<type 'string'>
>>> type("3.2")
<type 'string'>

Sie sind Strings.

Wenn du eine große ganze Zahl schreibst, wirst du vielleicht probieren Kommas zwischen die Zifferngruppen zu schreiben, etwa wie in 1,000,000. Das ist keine korrekte Ganzzahl in Python, aber es ist ein legaler Ausdruck:

>>> print 1,000,000
1 0 0

Gut, das ist wirklich nicht das, was wir erwartet haben. Es stellt sich heraus, dass 1,000,000 ein Tupel ist, etwas, zu dem wir in Kapitel 9 kommen werden. Zunächst merke dir einfach, dass du keine Kommas in deinen Ganzzahlen verwenden darfst.

2.2 Variablen

Eine der nützlichsten Eigenschaften von Programmiersprachen ist, dass sie mit Variablen arbeiten. Eine Variable ist ein Name, der auf einen Wert verweist.

Die Wertzuweisung erzeugt neue Variablen und versieht sie mit Werten:

>>> message = "What's up, Doc?"
>>> n = 17
>>> pi = 3.14159

Dieses Beispiel macht drei Wertzuweisungen. Die erste weist den String "What's up, Doc?" einer neuen Variablen namens message zu. Die zweite speichert die Ganzzahl 17 in der Variablen n und die dritte setzt den Wert von pi auf die Gleitkomma-Zahl 3.14159. (Drei verschiedene Ausdrucksweisen für dieselbe Sache!)

Ein übliches Verfahren, Variablen auf Papier darzustellen, ist es, den Variablennamen mit einem Pfeil, der auf den Variablenwert zeigt, aufzuschreiben. Diese Darstellung nennt man Zustandsdiagramm, weil sie den Zustand zeigt, in dem sich jede Variable befindet. (Denk an etwas wie den "Geisteszustand" der Variablen). Das Diagramm zeigt das Ergebnis der Wertzuweisung.

Die print - Anweisung kann auch mit Variablen arbeiten.

>>> print message
What's up, Doc?
>>> print n
17
>>> print pi
3.14159

In jedem Fall wird der Wert der Variablen ausgegeben. Variable haben auch einen Typ; wieder kann uns der Interpreter über diesen Auskunft geben.

>>> type(message)
<type 'string'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>

Der Typ einer Variablen ist der Typ des Werts, auf den sie verweist (der ihr zugewiesen wurde).

2.3 Variablennamen und Schlüsselwörter

Programmierer verwenden im allgemeinen Namen für ihre Variablen, die eine Bedeutung haben     so sie dokumentieren sie, wofür die Variable verwendet wird.

Variablennamen können beliebig lang sein. Sie können sowohl Buchstaben wie auch Ziffern enthalten, aber sie müssen mit einem Buchstaben beginnen. Obwohl es erlaubt ist, Großbuchstaben zu verwenden, vereinbaren wir, dass wir das nicht tun. Wenn du es doch tust, denke daran, dass Groß-/Kleinschreibung eine Rolle spielt. Bruce und bruce sind verschiedene Variablen.

Das Unterstrich-Zeichen (_) kann auch in Variablennnamen vorkommen. Es wird oft in Variablennamen verwendet, die aus mehreren Wörtern bestehen, wie z. B. mein_name or preis_von_tee_in_china.

Wenn man einer Variablen einen illegalen Namen gibt, erhält man einen Syntax-Fehler:

>>> 76trombones = "big parade"
SyntaxError: invalid syntax
>>> more$ = 1000000
SyntaxError: invalid syntax
>>> class = "Computer Science 101"
SyntaxError: invalid syntax

76trombones ist nicht erlaubt, weil es nicht mit einem Buchstaben beginnt. more$ ist nicht erlaubt, weil es ein illegales Zeichen enthält, das Dollar-Zeichen. Aber was ist verkehrt mit class?

Es stellt sich heraus, dass class eines der keywords, d. h. Schlüsselwörter oder reservierten Wörter von Python ist. Schlüsselwörter definieren die Regeln und die Struktur der Sprache und sie können nicht als Variablennamen verwendet werden.

Python hat neunundzwanzig Schlüsselwörter:

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

Du solltest diese Liste bereit halten. Wenn der Interpreter über einen deiner Variablennamen stolpert, und du weißt nicht warum, schau nach, ob er auf dieser Liste ist.

2.4 Anweisungen

Eine Anweisung ist ein Befehl, den der Python-Interpreter ausführen kann. Wir haben bisher zwei Arten von Anweisungen gesehen: print-Anweisungen und Wertzuweisungen.

Wenn du eine Anweisung auf der Kommandozeile eingibst, führt Python sie aus und zeigt das Ergebnis auf dem Bildschirm an, wenn die Anweisung ein Ergebnis hat. Das Ergebnis einer print-Anweisung ist ein Wert. Wertzuweisungen erzeugen kein Ergebnis.

Ein Script enthält normalerweise eine Folge von Anweisungen. Wenn mehr als eine Anweisung vorhanden ist, dann erscheinen die Ergebnisse eins nach dem anderen, in der Reihenfolge wie die Anweisungen ausgeführt werden.

Zum Beispiel erzeugt das Script

print 1
x = 2
print x

die Ausgabe

1
2

Wieder erzeugt die Wertzuweisung keine Ausgabe.

2.5 Die Auswertung von Ausdrücken

Ein Ausdruck ist eine Kombination von Werten, Variablen und Operatoren. Wenn du einen Ausdruck auf der Kommandozeile eingibst, führt der Interpreter die Auswertung des Ausdrucks aus und stellt das Ergebnis auf dem Bildschirm dar:

>>> 1 + 1
2

Ein Wert allein wird, ebenso wie eine Variable allein, auch als Ausdruck betrachtet

>>> 17
17
>>> x
2

Verwirrenderweise ist die Auswertung eines Ausdrucks nicht genau dasselbe, wie die Ausgabe eines Werts mit der print-Anweisung.

>>> message = "What's up, Doc?"
>>> message
"What's up, Doc?"
>>> print message

Wenn Python den Wert eines Ausdrucks ausgibt, benutzt es dasselbe Format, dass du auch benutzen würdest um einen Wert einzugeben. Im Fall von Strings bedeutet das, dass auch die Anführungszeichen eingeschlossen sind.

In einem Script, ist ein Ausdruck ganz allein eine legale Anweisung, aber sie tut überhaupt nichts. Das Script

17
3.2
"Hello, World!"
1 + 1

produziert überhaupt keine Ausgabe. Wie würdest du das Script ändern, um die Werte dieser vier Ausdrücke auszugeben?

2.6 Operatoren und Operanden

Operatoren sind spezielle Symbole, die Rechenarten wie Addition und Multiplikation darstellen. Die Werte, die durch die Operatoren verknüpft werden, heißen Operanden.

Die folgenden sind einige legale Python-Ausdrücke, deren Bedeutung mehr oder weniger klar ist:

20+32   hour-1   hour*60+minute   minute/60   5**2   (5+9)*(15-7)

Die Symbole +, -, und /, und der Gebrauch von runden Klammern (engl.: parenthesis) bedeuten in Python dasselbe wie in der Mathematik. Das Sternchen (*) ist das Symbol für die Multiplikation und ** ist das Symbol für Potenzieren.

Wenn ein Variablenname an der Stelle eines Operanden steht, wird er durch seinen Wert ersetzt, bevor die Operation ausgeführt wird.

Addition, Subtraktion, Multiplikation und Potenzieren machen alle das, was man erwartet, aber du wirst vielleicht überrascht sein von der Division. Die folgende Operation hat ein unerwartetes Ergebnis.

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

Der Wert von minute ist 59, und 59 dividiert durch 60 ist 0.98333, nicht 0. Der Grund für diesen Widerspruch ist, dass Python eine Ganzzahl-Division durchführt.

Wenn beide Operanden der Division Ganzzahlen sind, dann muss das Ergebnis auch eine Ganzzahl sein, und das ist so eingerichtet, dass die Ganzzahl-Division immer abrundet, auch in Fällen wie diesem, wo die nächste ganze Zahl ganz nahe darüber ist.

Eine mögliche Lösung für dieses Problem ist, einen Prozentsatz statt eine Dezimalbruchs auszurechnen:

>>> minute*100/60
98

Wieder ist das Ergebnis abgerundet, aber wenistens ist die Antwort nun näherungsweise korrekt. Eine andere Alternative ware, Gleitkomma-Division zu verwenden; dazu kommen wir in Kapitel 3.

2.7 Reihenfolge von Operationen

Wenn mehr als ein Operator ein einem Ausdruck vorkommt, dann hängt die Reihenfolge der Auswertung von den Vorrangregeln ab. Python verwendet dieselben Vorrangregeln für seine mathematischen Operatoren wie die Mathematik ("Punkt- vor Strichrechnung").

2.8 Operationen mit Strings

Im Allgemeinen können keine mathematischen Operationen mit Strings ausgeführt werden, selbst dann, wenn die Strings wie Zahlen ausschauen. Das folgende ist nicht legal (unter der Annahme, dass message den Typ string hat):

message-1   "Hello"/123   message*"Hello"   "15"+2

Interessanterweise kann + mit Strings verwendet werden, obwohl es ein anderes Ergebnis produziert, als du vielleicht erwartest. Für Strings bedeutet der + Operator Verkettung, d. h. der zweite Oprand wird an den ersten angefügt. Zum Beispiel:

fruit = "banana"
bakedGood = " nut bread"
print fruit + bakedGood

Die Ausgabe dieses Programms ist banana nut bread.

Der * Operator arbeitet (in Python) auch mit Strings; er führt Wiederholung aus. Zum Beispiel: 'Fun'*3 ist 'FunFunFun'. Einer der Operanden muß hier ein String sein, der andere eine ganze Zahl.

Auf der einen Seite scheint diese Interpretation von + und * sinnvoll in Analogie zu Addition und Multiplikation. Gerade wie 4*3 äquivalent mit 4+4+4 ist, erwarten wir, dass "Fun"*3 dasselbe ergibt wie "Fun"+"Fun"+"Fun", und das ist ja auch der Fall. Auf der anderen Seite sind String-Verkettung und String-Wiederholung in wesentlicher Weise verschieden von Ganzzahl-Addition und Ganzzahl-Multiplikation.

Als Übung nenne eine Eigenschaft von Addition und Multiplikation, die String-Verkettung und String-Wiederholung nicht haben.

2.9 Verknüpfung

Bis jetzt haben wir die Grundbestandteile eines Programms betrachtet     Variablen, Ausdrücke, Anweisungen     ohne darüber zu sprechen, wie man sie kombinieren kann.

Eine der nützlichsten Eigenschaften von Programmiersprachen ist ihre Fähigkeit zu ermöglichen, kleine Bausteine zu größeren zu verknüpfen. Wenn wir z. B. wissen, wie man Zahlen addiert und wie man etwas auf den Bildschirm ausgibt, kann man auch beides "gleichzeitig" ausführen:

>>>  print 17 + 3
20

Ein Wirklichkeit geschieht die Addition natürlich vor der Ausgabe, so dass die beiden Aktionen in Wahrheit nicht "gleichzeitig" geschehen. Worauf es hier ankommt ist, dass jeder Ausdruck mit Zahlen, Strings und Variablen innerhalb einer print - Anweisung verwendet werden kann. Du hast schon ein Beispiel dafür gesehen:

print "Number of minutes since midnight: ", hour*60+minute

Ebenso kann man beliebige Ausdrücke auf die rechte Seite einer Wertzuweisung schreiben:

percentage = (minute * 100) / 60

Diese Möglichkeit wird dich vielleicht jetzt nicht beeindrucken, aber du wirst andere Beispiele sehen, wo "Verknüpfung" es ermöglicht, komplexe Berechnungen klar und kompakt auszudrücken.

Warnung: Es gibt natürlich Grenzen dafür, wo die Anwendung von Ausdrücken erlaubt ist. Zum Beispiel muß die linke Seite einer Wertzuweisung ein Variablenname sein und kein Ausdruck. So ist etwa das Folgende nicht erlaubt: minute+1 = hour.

2.10 Kommentare

Je größer und komplizierter Programme werden, desto schwieriger zu lesen sind sie. Formale Sprachen sind dicht, und oft ist es schwer ein Stück Code anzuschauen und herauszufinden, was es tut oder warum.

Aus diesem Grund ist es eine gute Idee, Anmerkungen zu deinen Programmen hinzuzufügen, die in natürlicher Sprache erklären, was das Programm macht. Diese Anmerkungen werden Kommentare genannt und sie werden mit dem # Symbol gekennzeichnet:

# berechne den Prozentanteil, der von der Stunde vergangen ist
percentage = (minute * 100) / 60

In diesem Fall nimmt der Kommentar eine eigene Zeile ein. Man kann Kommentare auch an das Ende einer Zeile stellen:

percentage = (minute * 100) / 60     # Vorsicht: Ganzzahl-Division

Alles vom # bis zum Ende der Zeile wird     vom Interpreter     ignoriert. Es hat keine Auswirkung auf das Programm. Die Anmerkung ist gedacht für den Programmierer oder für zukünftige Programmierer die diesen Code einmal verwenden möchten. In diesem Fall erinnert es den Leser an das immer wieder überraschende Verhalten der Ganzzahl-Division.

2.11 Glossar

Wert
Eine Zahl oder eine Zeichenkette (oder etwas anderes, was später zu besprechen ist), die in einer Variablen gespeichert oder mit einem Ausdruck berechnet werden kann.
value
A number or string (or other thing to be named later) that can be stored in a variable or computed in an expression.
Typ
Eine Menge von Werten. Der Typ eines Wertes entscheidet darüber, wie er verwendet werden kann. Typen, die wir bisher kennengelernt haben, sind Ganzzahlen (type int), Gleitkomma-Zahlen (type float), und Zeichenketten (type string).
type
A set of values. The type of a value determines how it can be used in expressions. So far, the types you have seen are integers (type int), floating-point numbers (type float), and strings (type string).
Gleitkomma
Ein Format zur Darstellung von Zahlen mit Nachkommastellen.
floating-point
A format for representing numbers with fractional parts.
Variable
Ein Name, der auf einen Wert verweist.
variable
A name that refers to a value.
Anweisung
Ein Code-Abschnitt, der einen Befehl oder eine Aktion darstellt. Bis jetzt haben wir Wertzuweisungen und print-Anweisungen kennengelernt.
statement
A section of code that represents a command or action. So far, the statements you have seen are assignments and print statements.
Wertzuweisung
Eine Anweisung, die einer Variablen einen Wert zuweist.
assignment
A statement that assigns a value to a variable.
Zustandsdiagramm
Eine graphische Darstellung eines Satzes von Variablen mit den Werten, auf die sie sich beziehen.
state diagram
A graphical representation of a set of variables and the values to which they refer.
Schlüsselwort
Ein reserviertes Wort, das vom Compiler (oder Interpreter) benutzt wird, die Struktur eines Programms zu ermitteln (ein Programm zu parsen). Man kann Schlüsselwörter wie if, def, und while nicht als Variablennamen verwenden.
keyword
A reserved word that is used by the compiler to parse program; you cannot use keywords like if, def, and while as variable names.
Operator
Ein spezielles Symbol, das eine einfache "Berechnung" wie Addition, Multiplikation oder auch String-Verkettung darstellt.
operator
A special symbol that represents a simple computation like addition, multiplication, or string concatenation.
Operand
Einer der Werte, mit denen ein Operator arbeitet.
operand
One of the values on which an operator operates.
Ausdruck
Eine Kombination von Variablen, Operatoren und Werten, die einen einzigen Ergebniswert darstellen.
expression
A combination of variables, operators, and values that represents a single result value.
auswerten
Das Vereinfachen eines Ausdrucks, indem die Operationen der Reihe nach ausgeführt werden um einen einzigen Wert zu ergeben.
evaluate
To simplify an expression by performing the operations in order to yield a single value.
Ganzzahl-Division
Eine Operation, die eine Ganzzahl durch eine andere dividiert und eine Ganzzahl als Ergebnis liefert. Die Ganzzahl-Division ergibt nur die Anzahl wie oft der Divisor ganz im Dividenden enthalten ist; der Rest wird nicht berücksichtigt.
integer division
An operation that divides one integer by another and yields an integer. Integer division yields only the whole number of times that the numerator is divisible by the denominator and discards any remainder.
Vorrangregeln
Der Satz von Regeln, die angeben, in welcher Reihenfolge Ausdrücke mit mehrfachen Operatoren und Operanden ausgewertet werden.
rules of precedence
The set of rules governing the order in which expressions involving multiple operators and operands are evaluated.
verketten
Zwei Strings aneinander anfügen.
concatenate
To join two operands end-to-end.
Verknüpfung
Die Fähigkeit, einfache Ausdrücke und Anweisungen zu zusammengesetzten Anweisungen zu kombinieren, um komplexe Berechnungen knapp darzustellen.
composition
The ability to combine simple expressions and statements into compound statements and expressions in order to represent complex computations concisely.
Kommentar
Information in einem Programm, die für andere Programmierer (oder Leser des Quellcodes) gedacht ist und keine Wirkung auf die Ausführung des Programms hat.
comment
Information in a program that is meant for other programmers (or anyone reading the source code) and has no effect on the execution of the program.


zurück rauf weiter Englisch Index