我是python的新手,我遇到了一些代码问题。我收到了错误
TypeError: 'function' object has no attribute '__getitem__' at line 32
我无法弄清楚发生了什么。从我在互联网上看到的,它意味着将一个函数用作列表,但我无法用我的代码来解决这个问题。我的代码是
#! /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())
我的智慧结束了。有人可以帮忙吗?谢谢!
答案 0 :(得分:5)
在第62行,您将genFirstGen
函数传递到FindMostFit
newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))
稍后第32行您将其编入索引。我想你想调用函数并传递其结果。所以用
代替第62行newgeneration.append(BreedMostFit(FindMostFit(genFirstGen())))
答案 1 :(得分:1)
传递给<% @ship_states.each do |state| %>
<%= state.STAXCODE %>
<% end %>
的内容是FindMostFit
函数本身,而不是来自被调用genFirstGen
的输出。
此:
genFirstGen()
应该是这样的:
newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))
。