Ü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:
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
Mitint()
,float()
,str()
undbool()
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 wieprint(int(1.5+1))
werden immer von innen nach außen ausgewertet. Also hier: erst1.5+1
, dann Umwandlung nach int, dann Ausgabe am Bildschirm.
Aufgabe 6
Wandle um und gib mit print()
aus:
- 5 zu "5"
- "5" zu 5.0
- 0.5 zu int
- True zu int
- 1 zu bool
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.
- + und -
- * und /
- Modulo % (entspricht dem Rest bei ganzzahliger Division. Beispiel: 7 % 3 = 1)
- ** (Potenz, also zum Beispiel 3 ** 2 für “3 hoch 2”)
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.
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:
- Groß-/Kleinschreibung zählt!
- _ statt Leerzeichen
- aussagekräftige Namen (nicht einfach x1, x2)
- keine Zahl am Anfang
- keine “reservierten” Wörter wie z.B. print oder int
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
Mitinput()
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 nurinput()
schreiben anstattirgendeine_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 nurinput()
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:
- Frage den Benutzer nach seinem Alter (wieder mit
input
) - Wandle den eingegebenen String in eine Zahl (int) um
- Speichere dieses Alter in einer Variable
- Berechne grob, wie viele Tage der Benutzer mindestens schon gelebt hat: Einfach alter * 365
- Teile das Ergebnis dem Benutzer mit (à la “Wusstest du eigentlich…”)
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.