Seite 1 von 1

TypeError

Verfasst: Dienstag 7. Mai 2019, 16:28
von Manfredschneider

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)

Re: TypeError

Verfasst: Dienstag 7. Mai 2019, 16:34
von __deets__
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])

Re: TypeError

Verfasst: Dienstag 7. Mai 2019, 17:24
von __blackjack__
@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)