Python Fehlermeldung: string indices must be integers?

5 Antworten

Mit "for x in str" iterierst du über jeden einzelnen Character aus dem String. x ist in dem Fall nicht eine Zahl, sondern ein String.

Du könntest mit minimalen Veränderungen das auf zwei Wege machen:

str = "123abc"
print(f"String to check: {str}\n")
print("Methode 1\n-----")
for x in str:
  if x.isdigit() == True:
    print(x)

print("\nMethode 1\n-----")
for x in range(len(str)):
  if str[x].isdigit() == True:
    print(str[x])

Naja, str ist ein String mit Inhalt '123abc'

Wenn Du da per Schleife drüber gehst, dann stehen in x die einzelnen chars (Buchstaben, Ziffern).

Dein str[x] ist ein Zugriff per Index, also Position im Array.

Du musst also dein "x" in eine Zahl umwandeln. Wie wäre es damit:

str = '123abc'
for x in str:
  if x.isdigit() == True:
    print(str[int(x)])

Ich kann nicht ganz erkennen was Du erreichen willst, aber das hier ist die Ausgabe:

2
3
a

Erst wird von str Index 1 ausgegeben, die '2'.

Dann wird Index 2 ausgegeben, die '3'.

Und zuletzt wird Index 3 ausgegben und das ist dann das 'a'

Gruß

Woher ich das weiß:Berufserfahrung
str = '123abc'
for i,s in enumerate(str):
  if str[i].isdigit() == True:
    print(str[i])

Oder

str = '123abc'
for s in str:
  if s.isdigit() == True:
    print(s)

Falls du dazu noch Fragen hast, gerne nachfragen.

Das x in str[x] ist kein Integer sondern ein char.

Mit "for x in str" iteriert python über den string und in jeder Iteration ist x der nächste Buchstabe im String und nicht der Index.

In deinem Falle reicht es aus str[x] durch x zu ersetzen, da du (nehme ich mal an) ja mit str[x] das Zeichen an der Stelle lesen möchtest.

Woher ich das weiß:Studium / Ausbildung
if x.isdigit() ...
Woher ich das weiß:Berufserfahrung