0

「METHINKS IT IS LIKE A WEASEL」アルゴリズムについて読んだ後、気まぐれで以下を書きました。pop_gen() で期待しているのは、Gib の 10 個のインスタンスが作成され、それぞれにランダムな名前が付けられ、リスト popul に格納されることです。代わりに取得するのは、同じ名前のインスタンスのリストです。実際にはインスタンスを 1 つだけ作成し、それを 10 回参照していると思いますが、理由がわかりません。リスト内包表記の代わりに 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

ありとあらゆる助けに感謝します!

4

1 に答える 1