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.

  1. Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.

  2. 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
  1. Es handelt sich um einen Syntaxfehler. Das Programm kann auf Grund falscher Eingabe nicht interpretiert werden. Nach dem n + wurde eine Zahl vergessen.

Hide 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.

  1. Ermitteln Sie den richtigen Rückgabewert.

  2. Beschreiben Sie den Grund für den Fehler

  3. 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#

  1. 12

  2. Die standard Python Listen werden durch den Plus Operator nicht elementweise addiert sondern verbunden.

Hide 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.

  1. Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.

  2. 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#

  1. Die Funktion vorzeichen gibt im Falle einer positiven Zahl keinen Wert zurück, da ein return fehlt. Bei der Multiplikation mit der zweiten Zahl wird somit ein NoneType mit einem int multipliziert, was jedoch nicht möglich ist.

Hide 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