Python: TypeError: 'Funktion' Objekt hat kein Attribut '__getitem__'
Ich bin neu in python und ich habe Probleme mit dem code. Ich bin immer der Fehler
TypeError: 'function' object has no attribute '__getitem__' at line 32
Ich kann nicht herausfinden, was Los ist. Von dem, was ich gesehen habe, auf der internet, es bedeutet, etwas über die Verwendung einer Funktion als Liste, aber ich kann nicht herausfinden, dass mit meinem code. Mein code ist
#! /usr/local/bin/python
import random
def genFirstGen():
print "First Generation"
generation = []
for chromosomecounter in range(0, 20):
chromosome = []
fitness = 0
for genecounter in range(0, 10):
chromosome.append(random.randrange(0, 2))
for genecounter in range(0, 10):
if (chromosome[genecounter] == 1):
fitness += 1
chromosome.append(fitness)
generation.append(chromosome)
print gene
return generation
def FindMostFit(generation):
failedset = [0,0,0,0,0,0,0,0,0,0,0]
highestfitness = 0
mostfit = 0
fitparents = []
gene = []
for fitcounter in range(0, 10):
for chromosomecounter in range(0, 20):
chromosome = [generation[chromosomecounter]] # The error is here.
fitness = chromosome[10]
highestfitness = 0
if (fitness > highestfitness):
highestfitness = fitness
mostfit = chromosomecounter
fitparents.append(generation[mostfit])
generation[mostfit] = failedset
return fitparents
def BreedMostFit(Parents):
Mother = Parents(random.randrange(0, 10))
Father = Parents(random.randrange(0, 10))
child = []
for genecounter in range(0, 5):
parentgenetaken = random.randrange(0, 2)
if (parentgenetaken == 1):
child.append(Mother[genecounter * 2])
child.append(Mother[(genecounter * 2) + 1])
else:
child.append(Father[genecounter * 2])
child.append(Father[(genecounter * 2) + 1])
return child
def Generation2():
newgeneration = []
for gencounter in range(0, 20):
newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))
return newgeneration
def GenerationFunction(parentgen):
generation = []
for gencounter in range(0, 20):
generation.append(BreedMostFit(FindMostFit(parentgen)))
return generation
GenerationFunction(Generation2())
Ich bin mit meinem Latein am Ende. Kann jemand helfen? Danke!
- Fühlen Sie sich wie das teilen der traceback?
- Hallo und herzlich willkommen auf StackOverflow. Könntest du vielleicht schreiben welche Zeile generiert den Fehler und was rufen Sie? Dein code ist ziemlich lang, und es ist nicht klar, wo das problem ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf der Linie 62, übergeben Sie
genFirstGen
Funktion inFindMostFit
Später auf der Linie 32, die Sie indizieren. Ich denke, Sie wollte rufen Sie die Funktion auf und übergibt seine Ergebnisse statt. So ersetzen Sie die Zeile 62 mit
Was das an
FindMostFit
istgenFirstGen
Funktion selbst, nicht eine Ausgabe von namensgenFirstGen()
.Diese:
newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))
Sollte wie folgt Aussehen:
newgeneration.append(BreedMostFit(FindMostFit(genFirstGen())))
.