在阅读了“METHINKS IT IS LIKE A WEASEL”算法后,我一时兴起写了以下内容。我期望在 pop_gen() 中发生的是创建十个 Gib 实例——每个都有一个随机名称——并存储在列表 popul 中。相反,我得到的是具有相同名称的实例列表。我认为我实际上只创建了一个实例然后引用它十次,但我不知道为什么 - 我尝试使用 for 循环而不是列表理解来执行它,并将随机名称作为变量传递Gib 类本身的随机化。
import random
import string
class Evolver:
def __init__(self, input_text, chance):
self.input_text = list(input_text)
self.gib_text = [random.choice(chars) for c in self.input_text]
self.chance = chance
self.popul = []
def pop_gen(self):
temp_popul = [Gib(self.gib_text, self.chance) for i in range(10)]
self.popul = temp_popul
class Gib:
def __init__(self, gib_text, chance):
self.name = self.mutator(gib_text, chance)
self.score = 0
def mutator(self, gib_text, chance):
for c in range(len(gib_text)):
if chance >= random.randint(1, 100):
gib_text[c] = random.choice(chars)
return gib_text
chars = string.uppercase
e = Evolver("TEST", 100)
e.pop_gen()
for p in e.popul:
print p, p.name
任何和所有的帮助表示赞赏!