TypeError: 'int' object is not subscriptable

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
moritz644
User
Beiträge: 7
Registriert: Samstag 13. Februar 2021, 14:09

Samstag 13. Februar 2021, 15:33

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
__deets__
User
Beiträge: 9872
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 13. Februar 2021, 16:03

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.
moritz644
User
Beiträge: 7
Registriert: Samstag 13. Februar 2021, 14:09

Samstag 13. Februar 2021, 16:39

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?
__deets__
User
Beiträge: 9872
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 13. Februar 2021, 16:44

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?
moritz644
User
Beiträge: 7
Registriert: Samstag 13. Februar 2021, 14:09

Samstag 13. Februar 2021, 16:53

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].
__deets__
User
Beiträge: 9872
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 13. Februar 2021, 17:05

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.
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Samstag 13. Februar 2021, 17:08

@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.
moritz644
User
Beiträge: 7
Registriert: Samstag 13. Februar 2021, 14:09

Samstag 13. Februar 2021, 17:20

Spielfeld2 ist eine globale Variable. Habs jetzt verstanden, da stand ich ein bisschen auf dem Schlauch, Danke für die Hilfe.
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Samstag 13. Februar 2021, 17:25

@moritz644: Genau. Und globale Variablen vermeidet man. Die braucht man nie.
Antworten