list index out of range

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EiSiMo
User
Beiträge: 15
Registriert: Freitag 16. Juni 2017, 17:05

Hallo,
bin in Python noch ziemlich neu und habe mal aus Spaß versucht einen Verschlüsselungs-Algorithmus zu programmieren.
Nun soll ein einzelner Buchstabe aus einer Liste "herausgenommen", verschlüsselt und anschließend wieder zu einem Wort zusammengefügt werden.

Code: Alles auswählen

def wortverschlüsseln(wort, key):
    wortleange = len(wort)
    stelle = 0
    while wortleange > 0:
        buchstabeverschlüsselt = buchstabe_en(wort[(stelle)])  #hier müsste der Fehler liegen
        if len(wort) % 2: #das hier ist nicht wichtig
            k = len(wort) * key
            buchstabeverschlüsseltk = buchstabeverschlüsselt / k
        else:
            k = len(wort) / key
            buchstabeverschlüsseltk = buchstabeverschlüsselt * k
        stelle = stelle +1
        wortv = []
        wortv.append(buchstabeverschlüsseltk)
Nun habe ich folgende Fehlermeldung:

Traceback (most recent call last):
File "C:\Users\morit\Desktop\Verschlüsselung.py", line 185, in <module>
w1v = wortverschlüsseln(buchstabeninw1, key)
File "C:\Users\morit\Desktop\Verschlüsselung.py", line 29, in wortverschlüsseln
buchstabeverschlüsselt = buchstabe_en(wort[(stelle)])
IndexError: list index out of range

Komischer weise funktioniert es(ein Buchstabe wird aus der Liste genommen), wenn ich es ohne die Schleife und der Funktion probiere.
Woran könnte es liegen? bzw. Was könnte ich ändern?

Vielen Dank für alle Antworten! :D
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@EiSiMo: Deine while-Scheife wird nie beendet. Für das, was Du tust, brauchst Du sowieso keine while-Schleife, sondern eine for-Schleife:

Code: Alles auswählen

def wortverschlüsseln(wort, key):
    for zeichen in wort:
        buchstabeverschlüsselt = buchstabe_en(zeichen)
        ...
Ansonsten darfst Du die restlichen Fehler noch selber suchen.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Edit-Konflikt mit Sirius3. Ich schließe mich seiner Meinung an.

Ich sehe nicht, dass Du die wortleange reduzierst, d. h. dieser Wert bleibt konstant. Sobald Du den Index größer machst als die Wortlänge (also wortlaenge (!)), kommt es zum Fehler. Btw: Das ist ziemlich umständlich programmiert.

Verwende vernünftige Variablennamen und überprüfe mal, wie du die Umwandlung von Buchstaben (u. a.) in Zahlen (?) sinnvoll bewerkstelligen willst.

PS: Gib Dir doch einfach mit print() bei jedem Durchlauf aus, was die einzelnen Variablen enthalten. Das hilft bei der Fehlersuche ungemein. :!:
Antworten