示例#1
0
 def shuffle_nodes(self, node_list):
     nodes = []
     returned = []
     for conn in node_list:
         if not conn.transversed:
             conn.transversed = True
             connnodes, connreturned = self.shuffle_nodes(conn.connections)
             returned.extend(connreturned)
             if conn.backtrackable:
                 nodes.append(conn)
                 nodes.extend(connnodes)
             else:
                 nodes.append({conn: connnodes})
                 
     for node in returned[:]:
         if node_list == [self.entrance]:
             returned.remove(node)
             nodes[0].values()[0].insert(0, node)
         elif random.random() >= node.returnchance:
             returned.remove(node)
             nodes.insert(0, node)
     for node in nodes[:]:
         try:
             if node_list != [self.entrance] and random.random() < node.returnchance:
                 nodes.remove(node)
                 returned.append(node)
         except AttributeError: pass
     return nodes, returned
示例#2
0
 def flatten_nodes(self, nodelist):
     nodes = []
     for node in nodelist:
         if isinstance(node, dict):
             nodes.append(node.keys()[0])
             nodes.extend(self.flatten_nodes(node.values()[0]))
         else:
             nodes.append(node)
     return nodes