Seite 1 von 1

String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 11:27
von Krischu
Kann man auf eine String-Variable indiziert zugreifen?

Beispiel:

Code: Alles auswählen

s="abcdef"
first=s[0]
second=s[1]

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 11:35
von __blackjack__
@Krischu: Was ist denn das für eine Frage? Das kann man doch einfach ausprobieren wenn man aus irgendeinem Grund nicht in der Python-Dokumentation nachlesen kann.

Edit: Das ist übrigens kein Array-Operator. Ich würde das Element-Zugriffs-Operator nennen, denn der Operator wird mit Indexwerten ja bei Listen verwenden, aber am allermeisten sieht man den mit beliebigen Schlüsselwerten bei Wörterbüchern im Einsatz. Weil Indexzugriffe in Listen ja eher selten sind, in Programmiersprachen wo man ohne den Umweg über einen Laufindex auf Elemente sequentiell zugreifen kann.

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 11:40
von Krischu
__blackjack__ hat geschrieben: Samstag 14. Februar 2026, 11:35 @Krischu: Was ist denn das für eine Frage? Das kann man doch einfach ausprobieren wenn man aus irgendeinem Grund nicht in der Python-Dokumentation nachlesen kann.
Ja ja, natürlich. Ich hab's auch eben ausprobiert. Eigentlich ist der Hintergrund ein anderer und ich wollte jetzt nicht das ganze Programm posten. Es gibt einen Fehler in einem Python Programm:

Code: Alles auswählen

            if  cresttol[1] == "G":	fd = (15 + 11 * pitch) / 1000	#esg = – (15 + 11 P)
10:28:09          ~~~~~~~~^^^
10:28:09  IndexError: string index out of range
Und ich wunderte mich. Kann man hier längere Programme posten?

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 11:54
von Sirius3
Der Fehler tritt auf, weil der String zu kurz ist, also kein Index 1 existiert.

Code: Alles auswählen

cresttol = "A"
cresttol[1]
Warum glaubst du, dass der String mindestens zwei Zeichen hat?

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 12:29
von Krischu
Sirius3 hat geschrieben: Samstag 14. Februar 2026, 11:54 Der Fehler tritt auf, weil der String zu kurz ist, also kein Index 1 existiert.

Code: Alles auswählen

cresttol = "A"
cresttol[1]
Warum glaubst du, dass der String mindestens zwei Zeichen hat?
Laut Anwendung sollte das so sein. Die Toleranzklassen, um die es hier geht, sind Buchstaben/Zahlenpaare. 2G z.B.

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 12:45
von __blackjack__
@Krischu: Dann lass Dir vor dem Zugriff `cresttol` ausgeben. Am besten nicht direkt, sondern als Ergebnis von `repr()`, also ``print(repr(cresttol))`` oder ``print(f"{cresttol!r}")``, oder noch besser ``print(f"{cresttol=}")``. Falls man solche Ausgaben zur Fehlersuche öfter mal macht/braucht, empfehle ich auch einen Blick auf das `icecream`-Modul.

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 13:27
von Pedroski55
Kann man auf eine String-Variable indiziert zugreifen?
Klaro!

Code: Alles auswählen

s="abcdef"
for i in range(len(s)):
    print(f'i = {i}, s[{i}] = {s[i]}')
Dabei kommt dies heraus:
i = 0, s[0] = a
i = 1, s[1] = b
i = 2, s[2] = c
i = 3, s[3] = d
i = 4, s[4] = e
i = 5, s[5] = f

Code: Alles auswählen

print(s[6])
Dabei kommt dies heraus:
Traceback (most recent call last):
File "/usr/lib/python3.12/idlelib/run.py", line 580, in runcode
exec(code, self.locals)
File "<pyshell#4>", line 1, in <module>
IndexError: string index out of range
Komputer sagt: "Nein"

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 13:27
von noisefloor
Hallo,

für den Fehler brauchst du auch das Programm nicht posten, weil das nicht unbedingt was bringt. Interessant ist der Wert `cresttol` zu dem Zeitpunkt, wo `cresttol[1]` aufgerufen wird. Weil das halt `cresttol` nur 1-elementig ist, also nur `cresttol[0]` einen Wert zurückliefert. Wie man `cresttol` ausgibt -> siehe Erklärung von __blackjack__.

Gruß, noisefloor

Re: String via Array Operator adressieren?

Verfasst: Samstag 14. Februar 2026, 17:14
von snafu
Krischu hat geschrieben: Samstag 14. Februar 2026, 12:29 Die Toleranzklassen, um die es hier geht, sind Buchstaben/Zahlenpaare. 2G z.B.
Es gibt da verschiedene Ansätze, je nachdem was man abdecken will:

Code: Alles auswählen

# Exakt 2 Zeichen
digit, character = tolerance
if character == "G":
    # ...

# Beliebige Länge, beachtet nicht was vor dem "G" steht
if tolerance.endswith("G"):
    # ...

# Vergleicht das letzte Zeichen, String muss mind. 1 Zeichen haben
if tolerance[-1] == "G":
    # ...
Wenn tolerance[1] nicht funktioniert, dann hat dein String jedenfalls weniger als 2 Zeichen.
noisefloor hat geschrieben: Samstag 14. Februar 2026, 13:27 Weil das halt `cresttol` nur 1-elementig ist, also nur `cresttol[0]` einen Wert zurückliefert.
Oder es ist - aus welchen Gründen auch immer - der leere String. Vielleicht ja aus einer externen Quelle, von der nichts (mehr) gelesen werden kann und wo der leere String das Ende darstellt. Dies würde natürlich zu der Frage führen, woher der Inhalt von ``cresttol`` kommt...