Variablen

Grundidee von Variablen

Bisher haben wir lediglich mit konkreten Zahlenwerten gerechnet und uns die Ergebnisse unmittelbar anzeigen lassen. Möchten wir mit dem Ergebnis einer Rechnung weiterarbeiten, sind wir an einem Punkt, an dem wir Variablen benötigen.

Eine Variable stellt man sich häufig gerne als einen Kasten vor, in dem man Informationen oder Daten ablegen kann, um diese später wieder zu verwenden. Für den Anfang ist diese Vorstellung sehr hilfreich, allerdings werden wir bald sehen, dass wir in Python von dieser Vorstellung etwas abweichen müssen.

Hier aber zunächst ein erstes Beispiel:

meine_zahl = 23
print(meine_zahl) # Ausgabe: 23

Wie wir sehen ist es in Python äußerst einfach, eine Variable zu erstellen. Unsere Variable hat in diesem Beispiel den Namen meine_Zahl und speichert den Wert 23.

Der Name einer Variablen muss immer mit einem Buchstaben oder einem Unterstrich beginnen. Der Rest des Namens darf aus weiteren Buchstaben, Unterstrichen und Ziffern bestehen. Bei der Namenswahl sollte man sich darüber hinaus an gewisse Konventionen halten.

In Python hat es sich eingebürgert, die Namen von Variablen klein zu schreiben und bei zusammengesetzten Namen die einzelnen Wörter mit einem Unterstrich zu trennen. In anderen Programmiersprachen sieht man häufig eine andere Schreibweise.

Abgesehen von diesem Standard sollte man natürlich immer aussagekräftige Namen verwenden. Dies erleichtert das lesen eines Programms enorm. Also zum Beispiel anzahl_der_teilnemer anstatt adt. Schreibfaulheit und die Verwendung von kryptischen Abkürzungen sind kein Zeichen für herausragende Programmierfertigkeiten.

Rechnen mit Variablen

Führen wir das Beispiel von oben einmal fort:

meine_zahl = 23
print(meine_zahl) # Ausgabe: 23

noch_eine_zahl = 40+5
print(noch_eine_zahl) # Ausgabe: 45

print(meine_zahl+noch_eine_zahl) # Ausgabe: 68

meine_zahl = meine_zahl+10
print(meine_zahl) # Ausgabe: 33

Mit noch_eine_zahl = 40+5 speichern wir das Ergebnis einer Rechnung sofort in einer Variablen. Wie wir an der Zeile print(meine_zahl+noch_eine_zahl) sehen, können wir mit gespeicherten Werten auch wieder weiter rechnen. In dieser Zeile bleiben die gespeicherten Werte übrigens unverändert.

Interessant ist die Anweisung meine_zahl = meine_zahl+10. An dieser Zeile wird besonders schön deutlich, dass das Gleichheitszeichen hier anders zu verstehen ist als in der Mathematik. Es steht hier für die Anweisung *Setze den Wert von dem was links steht auf das was rechts steht. * In diesem Beispiel soll also der Wert von meine_zahl gesetzt werden auf den bisherigen Wert von meine_zahl plus 10. Dadurch wird der Wert von 23 auf 33 erhöht.

Einige wichtige Datentypen

Einführung

Wandeln wir unser Beispiel ein wenig ab:

meine_zahl = 23
print(meine_zahl) # Ausgabe: 23

print( type(meine_zahl) ) # Ausgabe: <class 'int'>

meine_zahl = meine_zahl / 2 
print(meine_zahl) # Ausgabe: 16.5

print( type(meine_zahl) ) # Ausgabe: <class 'float'>

Hier sehen wir zum ersten Mal eine Anweisung der Form type(meine_zahl). Um die entsprechende Ausgabe zu verstehen, müssen wir wissen, was man unter Datentypen versteht.

In einer Variablen wird nicht nur einen Wert gespeichert, sondern gleichzeitig auch, von welchem Typ der momentan gespeicherte Wert ist. Zu Beginn unseres Beispiels ist meine_zahl vom Typ Integer, was die englische Bezeichnung für ganze Zahl ist. Bei vielen anderen Programmiersprachen muss man beim erstellen einer Variablen selbst festlegen, von welchem Datentyp sie sein soll. Python hingegen erkennt dies automatisch anhand des gegebenen Wertes.

In unserem Beispiel lernen wir auch schon einen zweiten Datentyp kennen. Der Typ Float wird für Dezimalzahlen1 verwendet.

Gleichzeitig lernen wir an diesem Beispiel noch etwas. Der Datentyp einer Variablen kann sich ändern. Unsere Variable meine_zahl hat nach der Division durch 2 den Datentyp Float, da das Ergebnis keine ganze Zahl mehr ist. Diese Umwandlung von Integer zu Float geschieht automatisch. Dies ist übrigens nicht selbstverständlich, da bei vielen anderen Programmiersprachen der Typ einer Variablen nicht mehr nachträglich verändern lässt.

Wahrheitswerte

Kurze Einführung in die Logik

Dieses Tutorium richtet sich auch an Neueinsteiger ins Programmieren. Daher sehen wir uns einmal die wichtigsten Grundlagen zur Logik an. Wer damit vertraut, kann dem ersten Teil natürlich überspringen.

In der Logik, wie wir sie hier verwenden, betrachten wir Aussagen. Eine Aussage zeichnet sich dadurch aus, dass sie entweder wahr oder falsch ist. Beispiele sind:

  • Heute ist Montag.
  • Köln ist die Hauptstadt von NRW.
  • Ich habe mehr als 10 € bei mir.
  • Die Sonne scheint.

Aus solchen Aussagen können wir mit verschiedenen Verknüpfungen kompliziertere Aussagen konstruieren. Beispielsweise mit der Verknüpfung UND:

Die Sonne scheint und ich habe mehr als 10 € bei mir.

Ob diese Gesamtaussage wahr ist, hängt davon ab, ob ihre beiden Bausteine – oder wie man auch sagt, die beiden Elementaraussagen – wahr oder falsch sind. Nur, wenn beide Teilaussagen wahr sind, ist auch die gesamte Aussage war.

Eine weitere Verknüpfung ist das ODER. Damit könnten wir dies konstruieren:

Heute ist Montag oder die Sonne scheint.

Diese Aussage ist wahr, sobald mindestens eine der beiden Teilaussagen wahr ist.

Schließlich gibt es auch noch die NEGATION mit dem Wort NICHT. Die fällt etwas aus der Reihe, da hier nur eine Aussage benötigt wird:

Köln ist nicht die Hauptstadt von NRW.

Diese Aussage ist wahr, da die ursprüngliche Aussage falsch ist. Eine wahre Aussage wird durch Negation hingegen falsch.

Mittels dieser drei Verknüpfungen können wir beliebig komplexe Aussagen konstruieren:

Heute ist nicht Montag und die Sonne scheint oder ich habe mehr als 10 € bei mir.

Um diese Aussage korrekt auszuwerten müssen wir wissen, dass es wie in der Mathematik auch hier Vorfahrtregeln gibt:

  1. Negation geht immer vor.
  2. Dann kommt UND.
  3. Zuletzt kommt ODER.

So ähnlich wie bei der Regel Punkt-vor-Strich gilt also UND-vor-ODER. Die Aussage oben ist wahr, falls einerseits heute nicht Montag ist und die Sonne scheint oder ich andererseits mehr als 10 € bei mir habe (oder falls beides erfüllt ist).

Wir könnten die Aussagenlogik hier noch sehr ausgiebig betrachten, aber diese kurze Einführung soll uns genügen.

Der Datentyp bool

Wahrheitswerte, also True oder False, können wir ebenfalls in Variablenablegen:

heute_ist_montag = False
die_sonne_scheint = True
mehr_als_zehn_euro = True

print(not heute_ist_montag and die_sonne_scheint or mehr_als_zehn_euro)

print( type(heute_ist_montag) ) # Ausgabe: <class 'bool'>

Hier werden drei solcher Variablen angelegt und für heute gültige Werte angegeben, also zum Beispiel, ob heute Montag ist oder nicht. Schließlich erhalten wir die Auswertung der Aussage, die wir oben schon als Beispiel betrachtet haben.

Wie wir sehen, werden in Python dabei einfach die Wörter and, or und not verwendet. Die Wahrheitswerte Trueund False müssen immer groß geschrieben werden. Eine Variable, die einen solchen Werte speichert, ist vom Typ bool.

Betrachten wir noch ein Beispiel:

die_sonne_scheint = True
mehr_als_zehn_euro = False

eis_essen = die_sonne_scheint and mehr_als_zehn_euro

print(eis_essen)

Hier legen wir zunächst die Werte zweier booleschen Variablen fest und berechnen dann damit den Wert der dritten, die uns mitteilt, ob wir ein Eis ssen gehen. Das machen wir in diesem Beispiel genau dann, wenn die Sonne scheint und wir mehr als 10 € bei uns haben.

Vielleicht lesen wir hier zwischen den Zeilen schon heraus, dass solche Wahrheitswerte sehr schön geeignet sind, „Wenn-Dann“-Bedingungen zu formulieren. Genau das werden wir uns in Kürze auch ansehen!

Der Datentyp String

Zeichenketten, also Worte und Texte, werden in Variablen des Typs String abgelegt. Diesen sehen wir uns hier kurz an, werden ihn aber später noch einmal vertiefend betrachten.

Um deutlich zu machen, dass man eine Zeichenkette in einer Variablen ablegen möchte, gibt es verschiedene Möglichkeiten:

erster_String = 'Mein erster Satz.'
zweiter_String = "Lars' Auto ist kaputt."
dritter_String = '''Er sagte: "Lars' Auto ist kaputt."'''

print(erster_String) # Ausgabe: Mein erster Satz.
print(zweiter_String) # Ausgabe: Lars' Auto ist kaputt.
print(dritter_String) # Ausgabe: Er sagte: "Lars' Auto ist kaputt."

print( type(erster_String) ) # Ausgabe: <class 'str'>

vierter_String = zweiter_String + ' ' + dritter_String
print(vierter_String) # Ausgabe: Lars' Auto ist kaputt. Er sagte: "Lars' Auto ist kaputt."

Für die erste Variable werden hier einzelne Anführungszeichen verwendet. Bei der zweiten würde dies nicht funktionieren, da innerhalb der Zeichenkette ebenfalls ein solches Zeichen vorkommt. Daher verwenden wird dort die doppelten Anführungszeichen. Beim dritten String wiederum müssen wir auf drei einzelne Anführungszeichen ausweichen. Dreifache doppelte Anführungszeichen bilden sogar noch eine vierte Möglichkeit.

Zwei Strings können mit dem Pluszeichen verbunden werden. Dies verwenden wir, um den vierten String zu erstellen. Dort wird der erste String zunächst mit einem Leerzeichen und dann noch mit dem dritten String verbunden. Diesen Prozess des Aneinanderhängens nennt man auch Konkatenation.

Dynamische Typdeklaration und Typumwandlung

Wir haben bereits gesehen, dass Python automatisch den passenden Typ für eine Variable während der Laufzeit, d.h. bei der Ausführung des Programms, erkennt. Bei vielen anderen Programmiersprachen muss man den Typ bereits beim Programmieren angeben und dieser Typ kann sich nachträglich nicht mehr ändern. Dies bezeichnet man als statische Typdeklaration. In Python wiederum kann sich der Typ sehr wohl ändern, da in Python dynamische Typdeklaration verwendet wird.

Sehen wir uns ein Beispiel an:

meine_Variable = 23
print( type(meine_Variable) ) # Ausgabe: <class 'int'>

meine_Variable = 23 * 1.5
print( type(meine_Variable) ) # Ausgabe: <class 'float'>

meine_Variable = 'dreiundzwanzig'
print( type(meine_Variable) ) # Ausgabe: <class 'str'>

meine_Variable = meine_Variable + 45 # Ausgabe: TypeError: can only concatenate str (not "int") to str

Hier sehen wir, dass eine Variable vom Typ int bei Bedarf automatisch in den Typ float umgewandelt wird. Wir können aber beispielsweise auch einfach eine Zeichenkette in der Variablen ablegen und so eine Umwandlung in den Typ String erzwingen.

Was allerdings nicht funktioniert ist, an die Zeichenkette einen int-Wert zu hängen. Dieser Wert wird nicht automatisch in einen String verwandelt. Wandeln wir mit str den int-Wert aber manuell um, klappt dies:

meine_Variable = 'dreiundzwanzig'
print( type(meine_Variable) ) # Ausgabe: <class 'str'>

#meine_Variable = meine_Variable + 45 # Ausgabe: TypeError: can only concatenate str (not "int") to str
meine_Variable = meine_Variable + str(45)
print (meine_Variable) # Ausgabe: dreiundzwanzig45

Umgekehrt kann man einen String, sofern dessen Inhalt es erlaubt, auch in andere Typen umwandeln:

meine_Variable = '23'
meine_int = int(meine_Variable)
print (meine_int*2) # Ausgabe: 46