Skip to content

Commit 72172ad

Browse files
author
dodo
committed
Level 5 Aufgaben und Bugs.md
1 parent 2079b77 commit 72172ad

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

Bugs.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Bugs und Fehlerbehebung
2+
Grundsätzlich müssen drei Arten von Fehlern unterschieden werden: Syntaxfeheler, Laufzeitfehler und Semantikfehler.
3+
4+
## Syntaxfehler
5+
Syntaxfehler sind ähnlich zu verstehen wie Rechtschreibfehler. Ein Befehl wurde nicht richtig geschrieben, eine Zeile nicht richtig eingerückt, eine Klammer nicht geschlossen. Syntaxfehler werden dabei gemeldet, bevor das eigentliche Programm ausgeführt wird.
6+
```
7+
File "bug.py", line 1
8+
print("Test)
9+
^
10+
SyntaxError: EOL while scanning string literal
11+
12+
```
13+
Hier wurde ein String nicht beendet. Die Fehlermeldung zeigt die Datei und die Zeile an, in der der Fehler aufgetreten ist, sowie eine Meldung um was für einen Fehler es sich handelt.
14+
15+
```
16+
File "bug.py", line 2
17+
print("True")
18+
^
19+
IndentationError: expected an indented block
20+
```
21+
Hier wurde die Einrückung weggelassen, was die Fehlermeldung auch mitteilt ("IndentationError"). Zudem wird wieder die Datei und die Zeile angezeigt.
22+
23+
24+
Syntaxfehler sind einfach zu beheben, da sie schnell gefunden sind und die Fehlermeldung sehr genaue Auskunft darüber gibt, was passiert ist. Viele Texteditoren bieten zudem die Funktion an offene Klammern hervorzuheben, um schon die Entstehung von leicht vermeidbaren Fehlern zu vermeiden.
25+
26+
## Laufzeitfehler
27+
Laufzeitfehler finden, dem Namen nach, zur Laufzeit statt. Dabei gibt es verschiedene Fehlerquellen. Um die Fehlermeldung verständlicher zu machen werden die verschiedenen Arten von Laufzeitfehlern klassifiziert.
28+
29+
### ValueError
30+
31+
```
32+
Traceback (most recent call last):
33+
File "<input>", line 1, in <module>
34+
int("a")
35+
ValueError: invalid literal for int() with base 10: 'a'
36+
37+
```
38+
39+
Hier wurde versucht den String "a" in einen Integer umzuwandeln. Spezifischer in einen Integer mit der Basis 10, welches die Standardbasis für die Integerumwandlung ist. Dies ist ein Beispiel für einen `ValueError`. Diese Fehler können auftreten, wenn zum Beispiel die Nutzereingaben nicht überprüft wurden.
40+
41+
Laufzeitfehler zu finden ist weiterhin sehr einfach, da die Fehlermeldung sehr genau angibt, wo man zu suchen hat, weitaus schwieriger kann es allerdings werden einen Laufzeitfehler zu beheben, da dabei geklärt werden muss, ab wann das Programm den gewollten Zustand verlassen hat.
42+
43+
### RecursionError
44+
45+
```
46+
File "<input>", line 2, in recursion
47+
return recursion(x+1)
48+
RecursionError: maximum recursion depth exceeded
49+
```
50+
51+
Hier wurde eine rekursive Funktion ohne Abbruchbedingung gestartet. Die wird bis zu einem Limit an Durchläufen durchlaufen und wirft dann einen `RecursionError`. Dieser ist zweifelsohne ein sehr spezieller Fehler.
52+
53+
## Semantikfehler
54+
Semantikfehler sind von den beschriebenen drei Fehlerarten die weitaus schwierigste Kategorie, da sie vom Compiler oder Interpreter nicht angezeigt werden. Bei semantische Fehler, macht der Quellcode alles richtig, leider macht er nicht das, was er tun soll. Dabei sind Semantische Fehler sehr leicht zu erreichen. Wenn ich zum Beispiel in einer verschachtelten Schleife eine Anweisung in der falschen Einrückungsebene platziere, wird der Code wahrscheinlich noch funktionieren, allerdings nicht mehr das tun, was er soll. Somit ist beim Finden von Semantischen Fehlern sehr wichtig den erwarteteten Output mit dem tatsächlichen Output zu vergleichen.

Level5_Aufgaben.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Level 5 Aufgaben
2+
Wie bereits in den Aufgaben zu Level 3 angekündigt bieten Funktionen eine weitere Möglichkeit Abläufe zu wiederholen. Im Gegensatz zu den Schleifen sind die Einsatzmöglichkeiten von Funktionen weitaus vielfältiger.
3+
4+
## Aufgabe 1: Fakultät rekursiv
5+
Diese Aufgabe gab es bereits in Level 3, dort wurde sie durch benutzen einer Schleife gelöst. Um das Konzept der Rekursion besser zu verstehen, soll diesmal die Fakultät rekursiv bestimmt werden.
6+
Zur Erinnerung: Die Fakultät einer Zahl `n` ist gegeben durch:
7+
```
8+
n! = n * (n-1) mit 0! = 1
9+
```
10+
** Schreiben Sie eine Funktion, welche die Fakultät einer Zahl rekursiv berechnet. **
11+
12+
**Hinweis:**
13+
Wärend es bei der while-Schleife keine Begrenzung gibt, was die maximale Anzahl an Durchläufen angeht, existiert für die Tiefe einer Rekursion ein Limit.

0 commit comments

Comments
 (0)