Seite 1 von 1

TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 15:33
von moritz644
Hallo,

ich habe vor Kurzem mit Python angefangen und habe mir vorgenommen, ein TIC-TAC-TOE zu erstellen, in welchem man gegen eine KI auf Grundlage des Minimax Algorithmus spielen kann.
Ich habe folgendes Problem, dass mir immer der Error aus dem Betreff angezeigt wird. Hier die dafür wichtigen Programmteile.

Code: Alles auswählen

def freier_platz():
    cell = []
    for a in range(1, 10):
        if spielfeld2[a] == 0:
            cell.append(a)
    return cell

Code: Alles auswählen

    for cell in freier_platz():
        x = cell[0] #In dieser Zeile findet sich der Error
Hat jemand eine Idee, warum die Intiger in Cell[0] nicht in x gespeichert werden darf.
Vielen Dank fürs Ansehen.
Mit freundlichen Grüßen
Moritz

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 16:03
von __deets__
Die Funktion freier_Platz liefert eine Liste. Und du rufst sie auf in einer for-Schleife. Die iteriert über die Elemente der Liste. Und das sind integer. Nicht wieder Listen.

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 16:39
von moritz644
Dann müsste es ja funktionieren, weil ich ja aus der Liste den Inhalt von Cell 0 in x speichern möchte? Oder habe ich dich falsch verstanden?

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 16:44
von __deets__
Da es nicht funktioniert, ist deine Annahme wohl falsch, oder?

Warum erwartest du bei Code der im Grunde so aussieht

Code: Alles auswählen

for item in [1, 2, 3]:
     print(item)
das item jetzt ploetztlich eine Liste waere? Wozu ist dann die for-schleife?

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 16:53
von moritz644
Die for-schleife geht alle Spielfelder durch und fügt die Nummern der Spielfelder in die Liste cell ein welche noch nicht durch einen Spieler belet wurden, dass ist was das append macht oder, also in der cell steht , z.B.: [1,2,3] und nach cell.append(4) ist es dann [1,2,3,4].

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 17:05
von __deets__
Darueber rede ich nicht.

freier_platz gibt eine Liste zurueck. Mit Integern drin. Und ueber diese Liste iterierst du, und holst jedes Element raus, und versucht dann mit einer Zahl etwas zu machen, das man eben nur mit einer Liste machen kann.

Gib dir doch einfach mal mit print aus, was cell ist in deiner for-schleife. NICHT IN DER FUNKTION. Sondern da, wo du den Fehler bekommst.

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 17:08
von sparrow
@moritz644: Die Variable "cell" sollte in der Funktion besser "cells" heißen. Es ist üblich an die Namen von Listen ein Plural-S anzuhängen.
Funktionen sollten alles, was sie benötigen, als Paramater bekommen. "spielfeld2" taucht in der Funktion "freier_platz" aber aus dem Nichts aus.
Funktionen sollten nach Tätiigkeiten benannt weredn. Und du solltest keine deutschen und englichen Namen mischen.

Wie __deets__ bereits schrieb: "freier_platz" gibt eine Liste zurück.
In der for-Schleife iterierst du über die Elemente der Liste. Das jeweilige Element wird an den Namen "cell" gebunden. Und das erste Objekt, das an cell gebunden wird, ist eine Zahl (integer). Und integer haben keine Elemente, auf die man mit [] zugreifen kann.

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 17:20
von moritz644
Spielfeld2 ist eine globale Variable. Habs jetzt verstanden, da stand ich ein bisschen auf dem Schlauch, Danke für die Hilfe.

Re: TypeError: 'int' object is not subscriptable

Verfasst: Samstag 13. Februar 2021, 17:25
von sparrow
@moritz644: Genau. Und globale Variablen vermeidet man. Die braucht man nie.