Übungsaufgaben

Ein kurzes Hallo

Du bist kurz davor, dein erstes eigenes Programm zu schreiben!

Programmcode kann man prinzipiell in jedem Texteditor schreiben, wichtig ist nur, dass man sich an die Regeln der jeweiligen Programmiersprache hält.

Die Datei mit dem Programmcode gibt man dann einem Compiler oder Interpreter, der dazu beiträgt, die Programmiersprache in die berühmten “Nullen und Einsen” zu übersetzen, die der Prozessor versteht. Eine “richtige” Programmierumgebung macht das für dich im Hintergrund.

Wir benutzen das auf den Uni-Rechnern vorinstallierte Programm PyCharm. Um es zu öffnen gib einfach in deiner Taskleiste den Namen ein und erstelle ein neues Projekt, wenn du das nicht schon gemacht hast.

Sollte PyCharm bei dir nicht funktionieren wäre diese Website eine Alternative:

futurecoder.io

Du bekommst hier immer Aufgaben zusammen mit kurzen Erklärungen. Die Aufgaben bearbeitest du dann selbstständig oder zusammen mit anderen.

Solltest du irgendwas nicht verstehen frag einfach Julian der wird dir sicher helfen :)

Und jetzt: Los geht’s!


Ausgabe von Werten

Wenn du eine Anweisung schreibst wie zum Beispiel 3 + 4 wird die Rechnung zwar durchgeführt, allerdings sehen wir davon nichts, weil das Ergebnis nicht angezeigt wird. Dazu verwenden wir den Befehl print().

MERKE
Der Befehl print() gibt den Wert aus (also zeigt ihn am Bildschirm an), der innerhalb der Klammern steht: print(1) > print(3 + 4)

Aufgabe 1
Schreibe links im Editor einen Befehl, der 42 ausgibt und führe deinen Code dann mit Klick auf den Button aus.

Ausgabe

42

MERKE
Durch das Klicken des Buttons wird nur überprüft, ob du die Regeln der Programmiersprache (Syntax) beachtet hast, nicht aber ob das erhaltene Ergebnis zur Aufgabe passt.


String (str)

Herzlichen Glückwunsch, du hast gerade dein erstes Programm geschrieben.

MERKE
Ein String (in Python mit str abgekürzt) ist eine Zeichenkette, also einfach ein Text. Strings müssen immer in Anführungszeichen "bla" oder Hochkommata 'bla' geschrieben werden. Verwende print(), um links ein Programm zu schreiben, das Hallo, Welt! ausgibt. Es gibt übrigens Strings, die nur Leerzeichen enthalten (' ') und es gibt leere Strings – Letztere enthalten nicht mal ein Leerzeichen (Das sieht dann so '' aus.) Achtung: ' ' ist nicht dasselbe wie ''!

Aufgabe 2 (optional)
Schreibe Anweisungen, um auch mal einen leeren String auszugeben und einen, der nur aus Leerzeichen besteht.

Ausgabe

"'"
'"'

Integer und Float

MERKE
Ganze Zahlen haben den Datentyp Integer oder kurz int.

Aufgabe 3
Führe folgende Anweisungen aus:

print(-1)
print(3)

MERKE
Floats sind Fließkommazahlen. Als Dezimaltrennzeichen wird nach US-Standard ein Punkt verwendet, kein Komma.

Aufgabe 4
Führe folgende Anweisungen aus:

print(3.145)
print(-1.22)
print(0.0)

Boolean (bool)

MERKE
Boolean stellt den sogenannten Wahrheitswert dar. Entsprechend kann dieser Datentyp nur zwei Werte annehmen: True oder False
…oder wie der Computer das liest: 1 oder 0.

Aufgabe 5
Führe folgende Anweisungen aus:

print(True)
print(False)

MERKE
True (ohne Anführungszeichen) ist vom Typ Boolean. "True" dagegen ist vom Typ String. Schreibe mal Anweisungen, die diese beiden Werte nacheinander ausgeben.


Type Casting

MERKE
Mit int(), float(), str() und bool() kannst du Werte in die jeweiligen Datentypen umwandeln. (Type Casting)

Ein kleines Beispiel: 2 wird von int zu float durch float(2). Um das ganze am Bildschirm anzuzeigen, braucht es den print Befehl außen herum: print(float(2)).

MERKE
Verschachtelten Ausdrücke wie print(int(1.5+1)) werden immer von innen nach außen ausgewertet. Also hier: erst 1.5+1, dann Umwandlung nach int, dann Ausgabe am Bildschirm.

String Integer Boolean

Aufgabe 6
Wandle um und gib mit print() aus:

Kleiner Tipp: Du kannst dir mit dem Befehl type(x) den Datentyp von x ausgeben lassen.

Außerdem: Die Anweisung print("Hallo" + 5) gibt einen Fehler da man nicht einfach Daten vom Typ str und int addieren kann. Behebe das mit der Umwandlung nach str.


Arithmetische Operatoren

Aufgabe 7
Probiere einmal ein bisschen mit den folgenden Rechenoperatoren herum.

Denk dir also einfach mal ein paar Terme/Rechnungen aus und printe sie.
Kleiner Tipp: Klammerung wie in Mathe funktioniert auch hier.

Beispielanweisungen

print("Ich bin " + str(10) + " Jahre alt")
print("Hallo" * 2)
print(1/2.5 +2)
print(3 % 2)

Aufgabe 8
Berechne außerdem mal (mit Python natürlich) 3 - 1 * 3. Setze anschließend Klammern, sodass dieser Ausdruck 6 ergibt.

Ausgabe

6

MERKE
(Arithmetische) Operatoren können je nach Datentypen, auf die sie angewandt werden, unterschiedliche Funktionen haben: Bei str hängt + einfach beide Zeichenketten aneinander während bei int addiert wird. Weiteres kannst du im Skript nachlesen.

Aufgabe 9
Führe die folgenden Operationen aus, verwende dabei print() zum Anzeigen und vergleiche die Ausgaben am Bildschirm:

3 + 4
"3" + "4"
"Gummi" + "bärchen"
"hallo" * 3
"bla" * 1 + "4"

Aufgabe 10
Die folgenden Befehle funktionieren nicht:

print(2 + "1")
print(Hallo + "Welt")
print(1 + 3 * "Blub")

Ändere sie so ab, dass sie funktionieren. Benutze wenn nötig Type Casts (Typumwandlungen).

MERKE
Es macht also einen großen Unterschied, ob zum Beispiel mit Zahlen als Strings oder als Integers gearbeitet wird. Achte also immer genau auf den Datentyp!


Mixed Arithmetic

MERKE
Eigentlich sind Operatoren nur zwischen Werten des gleichen Typs anwendbar. Python erlaubt jedoch einige Ausnahmen.

Eine davon hast du gerade schon gesehen, nämlich

"irgendein String" * 10

Hier war es so, dass der Operator * für die Kombination aus String und Integer einfach eine andere Wirkung als die “mathematische Multiplikation” hatte.

Aufgabe 11
Was passiert aber, wenn dieselbe Funktionalität eines Operators auf unterschiedliche Datentypen angewandt wird, zum Beispiel

2 + 2.0

also auf int und float?
Überleg dir was passieren könnte und probiers dann aus.

MERKE
Python wandelt sofern möglich beim Verknüpfen unterschiedlicher Werte alle auf den “höheren” der auftretenden Typen um. Dieses Prinzip nennt man Typ Coercion.

Da die Dezimalzahlen “umfangreicher” sind als die ganzen Zahlen, ist zum Beispiel float ein “höherer” Typ als int.

Float Integer Boolean 2 2.5 2.499999999 11True 11 Keines (Fehler) 5True 6 Keines (Fehler)

Aufgabe 12
Da die Wahrheitswerte True bzw. False (Boolean) für den Computer “nur” 1 bzw. 0 sind, kann man auch damit “rechnen”. Versuche

True + 1
False - 2.0
True * False

Variablen und Zuweisungen

Eine Variable ist eine Art virtueller “Container”, in dem ein Wert zwischengespeichert werden kann, solange das Programm läuft.

Zuweisung eines Wertes:

meine_variable = wert

Anders herum funktioniert das nicht! Immer wenn du dann im Code meine_variable schreibst, wird bei der Ausführung der jeweils aktuelle Wert aus diesem “Container” eingesetzt.

Aufgabe 13
Was gibt folgender Code aus? Überlegs dir und probiers dann aus!

message = "Hallo"
print(message)

MERKE
Welche Namen du deinen Variablen gibst, ist eigentlich egal. Achte aber auf folgendes:

Aufgabe 14
Ergänze den Code so, dass die Ausgabe z.B. Bambi ist 3 Jahre alt. lautet.

name = ... # vom Typ String
alter = ... # vom Typ Integer
print(...)

Ausgabe

Bambi ist 3 Jahre alt.

Überschreiben von Variablenwerten

MERKE
Einer Variable kann beliebig oft ein neuer Wert zugewiesen werden. Der bisherige Wert wird dabei ersetzt (geht also verloren)!

Aufgabe 15

Übertrage folgenden Code in den Editor und führe in aus. Was wird ausgegeben? Überlegs dir wieder zuerst und gibs dann aus!

lieblingszahl = 18
print(lieblingszahl)
lieblingszahl = 7
print(lieblingszahl)

Aufgabe 16
Den Wert, der in a gespeichert ist, soll (dauerhaft) um 5 erhöht werden. Korrigiere den Code unten entsprechend. Dabei ist es nicht das Ziel der Variablen a einfach den Wert 10 zuzuweisen :)

a = 5
a + 5
print(a)

Ausgabe

10

Aufgabe 17 Schreibe ein Programm, dass den Durchschnitt (also

$$ d = \frac{Summe}{Anzahl} $$

) von 10, 4, 1 berechnet. Es sollen die Summe als Zwischenergebnis und das Endergebnis (jeweils als int) ausgegeben werden. Die Ausgabe soll also lauten:

15
5

User-Input

MERKE
Mit input() kannst du den Benutzer auffordern, einen String auf der Tastatur einzugeben, der dann von deinem Programm in einer Variable gespeichert und weiterverwendet werden kann.

Es ist natürlich sinnvoll, dem Benutzer vorher mitzuteilen, was er eingeben soll.

Aufgabe 18
Versuche zum Beispiel, folgenden Code in den Editor zu übernehmen und auszuführen.

print("Was ist deine Lieblingszahl?")
lieblingszahl = input()
print("Deine Lieblingszahl ist " + lieblingszahl + ".")

Der Benutzer kann dann Werte im Befehlsfenster (Terminal) eingeben, das sich rechts befindet. Erst wenn er die Eingabe mit der ⏎-Taste bestätigt, ist der Wert in deinem Programm verfügbar. Bis es soweit ist, “wartet” dein Programm automatisch.

MERKE
Würde man nur input() schreiben anstatt irgendeine_variable = input(), das heißt wenn man den eingegebenen Wert nicht in einer Variable speichern würde, dann würde dieser Wert “einfach so herumfliegen” und wir könnten nicht auf ihn zugreifen bzw. damit weiterarbeiten.

Long story short: Eine Zeile, in der nur input() steht, ist nicht besonders sinnvoll.


Chatbot: Hallo

Wir beginnen jetzt, Mechanismen für einen kleinen Chatbot (Also ein Programm, mit dem man sich ein bisschen “unterhalten” kann) umzusetzen!

Aufgabe 19
Schreibe zunächst ein Programm, das dich mit

Hallo, ich bin <Name deines Chatbots>! Wie heißt du?

begrüßt. Anschließend soll der Benutzer seinen Namen eingeben können. Dieser wird in einer Variable gespeichert. Danach soll der Bot mit

Freut mich, <eingegebener Name>. Ein schöner Name!

antworten.


Chatbot: Alter

Lass uns den Bot weiter ausbauen! (Du arbeitest hier mit deinem Code von der vorherigen Aufgabe weiter.)

Aufgabe 20
Ergänze den Code des Bots folgendermaßen:

REMINDER
Jede Eingabe des Benutzers ist standardmäßig vom Typ String (und muss ggf. erst umgewandelt werden.)

MERKE
Strings können durch + nur mit anderen Strings verbunden werden, nicht aber z.B. mit Integers!


Zusatzaufgabe

Aufgabe 21
Erweitere deinen Bot wie du willst. Sei kreativ! Du könntest zum Beispiel nach dem genauen Geburtsdatum fragen (Also erst Tag, dann Monat, dann Jahr) und basierend darauf die Anzahl der Lebenstage dann ein bisschen präziser berechnen.




Feedback

Du hast Feedback zu diesem Kapitel oder du hast einen Fehler gefunden? Dann schreib mir gerne, damit ich den Fehler schnell beheben kann :)