ツリーを反復処理し、ランダムなインスタンスを見つけて、それを変更して終了しようとしていますが、再帰に問題があります。
突然変異後のループのエスケープに関する注意例外を発生させようとしましたが、子の反復を終了し、親を反復し続けます。
import random as random
rnd=random.random
class Found(Exception): pass
def displayRandomNode(self,indent=0,probchange=0.1):
try:
if rnd()<probchange:
raise Found
elif hasattr(self,"children"):
for c in self.children:
displayRandomNode(c,indent+1,probchange)
except Found:
if type(self)==float: pass
else:
print (' '*indent),self
注: 私が反復しているクラスは次のようになります (fw クラスは、子内のインスタンスのみを直接変更するわけではありません)。クラス ノードには、リスト内の 3 つのクラスすべての子が含まれる場合があります。
class node:
def __init__(self,fw,children):
self.function=fw.function
self.name=fw.name
self.children=children
class paramnode:
def __init__(self,idx):
self.idx=idx
class constnode:
def __init__(self,v):
self.v=v