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
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