Python - No funciona el código de busqueda en amplitud (no entra el main)

 
Vista:

No funciona el código de busqueda en amplitud (no entra el main)

Publicado por Maxi (1 intervención) el 30/09/2019 14:30:50
Necesito saber porque no ingresa el main el codigo es un ejemplo de un libro.. ¿que puede estar mal o le falta?
Gracias.

codigoPrincipal.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from arbol import Nodo
 
def buscar_solucion_BFS(estado_inicial,solucion):
	print ("sols")
	solucionado=False
	nodos_visitados=[]
	nodos_frontera=[]
	nodoIniacial= Nodo(estado_inicial)
	nodos_frontera.append(nodoIniacial)
	while (not solucionado) and len(nodos_frontera)!=0:
		nodo=nodos_frontera.pop(0)
		nodos_visitados.append(nodo)
		if nodo.get_datos()==solucion:
			solucionado=True
			return nodo
		else:
			dato_nodo=nodo.get_datos()
 
	hijo=[dato_nodo[1],dato_nodo[0],dato_nodo[2],dato_nodo[3]]
	hijo_izquierdo= Nodo(hijo)
	if not hijo_izquierdo.en_lista(nodos_visitados)and not hijo_izquierdo.en_lista(nodos_frontera):
		nodos_frontera.append(hijo_izquierdo)
 
	hijo=[dato_nodo[0],dato_nodo[2],dato_nodo[1],dato_nodo[3]]
	hijo_central= Nodo(hijo)
	if not hijo_central.en_lista(nodos_visitados)and not hijo_central.en_lista(nodos_frontera):
		nodos_frontera.append(hijo_central)
 
	hijo=[dato_nodo[0],dato_nodo[1],dato_nodo[3],dato_nodo[2]]
	hijo_derecho= Nodo(hijo)
	if not hijo_derecho.en_lista(nodos_visitados) and not hijo_derecho.en_lista(nodos_frontera):
		nodos_frontera.append(hijo_derecho)
 
	nodo.set_hijos([hijo_izquierdo],[hijo_central],[hijo_derecho])
 
	if __name__ == "__main__":
 
		print ("main")
		estado_inicial=[4,2,3,1]
		solucion= [1,2,3,4]
		nodo_solucion=buscar_solucion_BFS(estado_inicial,solucion)
		resultado=[]
		nodo=nodo_solucion
		while nodo.get_padre()!= None:
			resultado.append(nodo.get_datos())
			nodo=nodo.get_padre()
		resultado.append(estado_inicial)
		resultado.reverse()
		print resultado

arbol.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Nodo:
	print ("arbol")
	def __init__(self,datos,hijos=None):
		self.datos=datos
		self.hijos=None
		self.padre=None
		self.coste=None
		self.set_hijos(hijos)
 
	def set_hijos(self,hijos):
		self.hijos=hijos
		if self.hijos!= None:
			for h in self.hijos:
				h.padre=self
 
	def get_hijos(self):
		return self.hijos
 
	def get_padre(self):
		return self.padre
 
	def set_padre(self,padre):
		self.padre=padre
 
	def set_datos(self,datos):
		self.datos=datos
 
	def get_datos(self):
		return self.datos
 
	def set_coste(self,coste):
		self.coste=coste
 
	def get_coste(self):
		return self.coste
 
	def igual(self, nodo):
		if self.get_datos()==nodo.get_datos():
			return True
		else:
			return False
 
	def en_lista(self, lista_nodos):
		en_la_lista=False
		for n in lista_nodos:
			if self.igual(n):
				en_la_lista=True
		return en_la_lista
 
	def __str__(self):
		return str(self.get_datos())
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 2.440
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

No funciona el código de busqueda en amplitud (no entra el main)

Publicado por joel (562 intervenciones) el 30/09/2019 15:31:24
Hola Maxi, eso es porque el
1
if __name__ == "__main__":
lo tienes puesto dentro de la función buscar_solucion_BFS()
Si lo quitas de la función te funcionara!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar