TypeError

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
Manfredschneider
User
Beiträge: 1
Registriert: Dienstag 7. Mai 2019, 16:22

Code: Alles auswählen

buchstabe = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}
zahl = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26"}
def test(wort):
for x in range(len(wort)):
for y in range(25):
if (Wort[x]==buchstabe[y]):
print(zahl[y])
wenn ich der methode in der shell buchstaben geben will sagt er TypeError: 'set' object is not subscriptable und das in line 8 angeblich aber es giebt keine 8 zeilen
(es ist für die schule wenn ich in der shell die methode mit buchstaben einegebe sollten eigentlich zahlen rauskommen)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du waehlst die falsche Datenstruktur fuer dein Problem. Und die falsche Weise, ueber Dinge zu iterieren. Statt zwei Sets (bei denen man nur auf "kommt drin vor" pruefen kann), benutz gleich ein Woerterbuch. Und statt muehselig per Index auf Buchstaben zuzugreifen, lauf ueber den String Buchhstabe fuer Buchstabe:

Code: Alles auswählen

buchstaben_codes = { "a": 1, ..., "z": 26}
def test(wort):
       for buchstabe in wort.lower(): # Oder eben auch A..Z anlegen...
             print(buchstaben_codes[buchstabe])
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Manfredschneider: Es muss mindestens eine 8. Zeile geben, denn in den gezeigten Zeilen wird die Funktion nicht aufgerufen. Das muss aber gemacht werden damit die Ausnahme auftreten kann. Wobei das auch dann nicht sein kann, denn der gezeigte Code hat keine Einrückung und kommt so nicht mal am Compiler vorbei. Selbst wenn man die Einrückung repariert, kommt nicht die Ausnahme die Du beschreibst, sondern ein `NameError` weil `Wort` nicht definiert ist.

Wenn man sinnvoll helfen können soll, musst Du a) den tatsächlichen Code zeigen der zu der Ausnahme führt, und nicht irgend etwas ”ähnliches”, und b) den gesamten Traceback 1:1 hier her kopieren, und nicht nur die letzte Zeile davon.

Was Dein Code wohl machen soll, kann man auch ohne irgendwelche Datenstrukturen einzutippen erreichen, in dem man den Zahlwert aus dem Unicode-Codepoint des Zeichens berechnet:

Code: Alles auswählen

def test(wort):
    for buchstabe in wort:
        zahl = ord(buchstabe) - ord('a') + 1
        if 1 <= zahl <= 26:
            print(zahl)
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten