Fehlersuche#
Bei der Programmierung von Algorithmen kommt es nicht selten vor, dass sich unerwartete Fehler einschleichen. Manche Fehler werden vom Interpreter bereits vor der Durchführung angemerkt, einige treten erst während der Durchführung auf und bei anderen läuft das Programm ohne Problem bis zum Ende durch doch das Ergebnis ist falsch.
In den ersten beiden Fällen lässt sich der Fahler anhand der Fehlermeldung leicht beheben. Im dritt genannten Fall muss dieser manuell erkannt werden oder explizit geprüft werden.
Bevor Sie mit den Aufgaben starten, überlegen Sie sich einen repräsentativen Fehler für jede der zuvor genannten drei Kategorien.
Fakultät#
Das folgende Programm soll die Fakultät berechnen.
Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.
Beheben Sie das Problem
def fakultaet(n):
if n == 0:
return 1
wert = 1
for i in range(1, n +):
wert *= i
return wert
print(fakultaet(5))
Cell In[1], line 5
for i in range(1, n +):
^
SyntaxError: invalid syntax
Es handelt sich um einen Syntaxfehler. Das Programm kann auf Grund falscher Eingabe nicht interpretiert werden. Nach dem
n +
wurde eine Zahl vergessen.
Show code cell content
def fakultaet(n):
if n == 0:
return 1
wert = 1
for i in range(1, n + 1):
wert *= i
return wert
print(fakultaet(5))
120
Addition von Listen#
Das folgende Programm soll zwei Listen elementweise addieren und anschließend den maximalen Wert ausgeben. Jedoch hat sich in dem Programm ein Fehler eingeschlichen und es wird ein falscher Wert ausgegeben.
Ermitteln Sie den richtigen Rückgabewert.
Beschreiben Sie den Grund für den Fehler
Bearbeiten Sie das Programm so, dass der richtige Wert ausgegeben wird.
liste1 = [1, 2, 3, 4]
liste2 = [5, 6, 7, 8]
addition = liste1 + liste2
maximaler_wert = max(addition)
print("Der maximale Wert beträgt:", maximaler_wert)
Der maximale Wert beträgt: 8
Lösung#
12
Die standard Python Listen werden durch den Plus Operator nicht elementweise addiert sondern verbunden.
Show code cell content
import numpy as np
list1 = np.array([1, 2, 3, 4])
list2 = np.array([5, 6, 7, 8])
addition = list1 + list2
maximaler_wert = max(addition)
print("Der maximale Wert beträgt:", maximaler_wert)
Der maximale Wert beträgt: 12
Absoluter Wert#
Das folgende Programm soll zuerst das Vorzeichen eines Wertes ermitteln und dann durch Multiplikation den absoluten Wert berechnen.
Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.
Beheben Sie das Problem
def vorzeichen(wert):
if wert < 0:
return -1
else:
1
zahl_1 = -5
absolute_zahl_1 = vorzeichen(zahl_1) * zahl_1
print("Der absolute Wert von", zahl_1, "ist", absolute_zahl_1)
zahl_2 = 20
absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2
print("Der absolute Wert von", zahl_2, "ist", absolute_zahl_2)
Der absolute Wert von -5 ist 5
Der absolute Wert von -5 ist 5
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input> Zelle 1 in <cell line: 12>()
9 print("Der absolute Wert von", zahl_1, "ist", absolute_zahl_1)
11 zahl_2 = 20
---> 12 absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2
13 print("Der absolute Wert von", zahl_2, "ist", absolute_zahl_2)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Lösung#
Die Funktion
vorzeichen
gibt im Falle einer positiven Zahl keinen Wert zurück, da einreturn
fehlt. Bei der Multiplikation mit der zweiten Zahl wird somit einNoneType
mit einemint
multipliziert, was jedoch nicht möglich ist.
Show code cell content
def vorzeichen(wert):
if wert < 0:
return -1
else:
# Hier musste return ergänzt werden.
return 1
zahl_1 = -5
absolute_zahl_1 = vorzeichen(zahl_1) * zahl_1
print("Der absolute Wert von", zahl_1, "ist", absolute_zahl_1)
zahl_2 = 20
absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2
print("Der absolute Wert von", zahl_2, "ist", absolute_zahl_2)
Der absolute Wert von -5 ist 5
Der absolute Wert von 20 ist 20