python - How to convert NoneType to Int -
this question has answer here:
- recursive code returns none 1 answer
i'm applying dijkstra algorythm in graph:
grafo1_distancia = {'baquedano': {'bellas artes': 1.73, 'franklin': 2.57, 'salvador': 1.73, 'santa rosa': 1.7}, 'bellas artes': {'baquedano': 1.73, 'einstein': 1.18, 'pedro de valdivia': 0.99}, 'cerro blanco': {'escuela militar': 1.84, 'san miguel': 1.54, 'vespucio norte': 1.24}, 'departamental': {'la cisterna': 1.94, 'san miguel': 1.03}, 'ecuador': {'einstein': 1.07, 'las rejas': 1.59, 'neptuno': 1.56, 'santa julia': 1.3}, 'einstein': {'bellas artes': 1.18, 'ecuador': 1.07, 'la moneda': 1.69, 'pedrero': 2.94}, 'el golf': {'la moneda': 2.51, 'tobalaba': 2.1}, 'escuela militar': {'cerro blanco': 1.84, 'los leones': 2.61, 'manquehue': 0.98}, 'francisco bilbao': {'tobalaba': 2.96}, 'franklin': {'baquedano': 2.57, 'pajaritos': 1.84, 'pedrero': 2.48, 'plaza de armas': 1.89}, 'hernando de magallanes': {'manquehue': 1.28, 'santa ana': 2.49}, 'la cisterna': {'departamental': 1.94, 'plaza de puente alto': 2.77}, 'la moneda': {'einstein': 1.69, 'el golf': 2.51, 'san alberto hurtado': 2.03, 'san miguel': 2.89}, 'las rejas': {'ecuador': 1.59, 'pajaritos': 2.67}, 'las torres': {'los leones': 2.81, 'macul': 1.12}, 'los leones': {'escuela militar': 2.61, 'las torres': 2.81, 'pedro de valdivia': 2.69, 'tobalaba': 1.09}, 'macul': {'las torres': 1.12}, 'manquehue': {'escuela militar': 0.98, 'hernando de magallanes': 1.28}, 'manuel montt': {'salvador': 1.0}, 'mirador': {'san alberto hurtado': 0.98, 'san miguel': 2.94, 'santa julia': 2.94, 'trinidad': 2.36}, 'neptuno': {'ecuador': 1.56, 'pajaritos': 1.94, 'san alberto hurtado': 2.01, 'san pablo': 2.09}, 'pajaritos': {'franklin': 1.84, 'las rejas': 2.67, 'neptuno': 1.94, 'universidad de santiago': 2.39}, 'pedrero': {'einstein': 2.94, 'franklin': 2.48}, 'pedro de valdivia': {'bellas artes': 0.99, 'los leones': 2.69, 'salvador': 1.55}, 'plaza de armas': {'franklin': 1.89, 'tobalaba': 0.87}, 'plaza de puente alto': {'la cisterna': 2.77, 'san pablo': 2.55, 'trinidad': 2.75, 'vicente valdes': 2.68}, 'puente cal y canto': {'santa rosa': 0.86}, 'salvador': {'baquedano': 1.73, 'manuel montt': 1.0, 'pedro de valdivia': 1.55}, 'san alberto hurtado': {'la moneda': 2.03, 'mirador': 0.98, 'neptuno': 2.01, 'vicente valdes': 2.46}, 'san miguel': {'cerro blanco': 1.54, 'departamental': 1.03, 'la moneda': 2.89, 'mirador': 2.94, 'vespucio norte': 0.88}, 'san pablo': {'neptuno': 2.09, 'plaza de puente alto': 2.55}, 'santa ana': {'hernando de magallanes': 2.49, 'vespucio norte': 1.56}, 'santa julia': {'ecuador': 1.3, 'mirador': 2.94}, 'santa rosa': {'baquedano': 1.7, 'puente cal y canto': 0.86}, 'tobalaba': {'el golf': 2.1, 'francisco bilbao': 2.96, 'los leones': 1.09, 'plaza de armas': 0.87}, 'trinidad': {'mirador': 2.36, 'plaza de puente alto': 2.75}, 'universidad de santiago': {'pajaritos': 2.39}, 'vespucio norte': {'cerro blanco': 1.24, 'san miguel': 0.88, 'santa ana': 1.56}, 'vicente valdes': {'plaza de puente alto': 2.68, 'san alberto hurtado': 2.46}}
with code:
def dijkstra(grafo,origen,destino,visitados=[],distancias={},predecesores={}): if origen == destino: ruta=[] pred=destino while pred != 0: ruta.append(pred) pred=predecesores.get(pred,0) print ('la ruta más corta es: '+str(ruta)+', y su distancia es '+str(distancias[destino])) costo = str(distancias[destino]) return costo else: if not visitados: distancias[origen]=0 vecino in grafo[origen]: if vecino not in visitados: nueva_distancia = distancias[origen]+grafo[origen][vecino] if nueva_distancia < distancias.get(vecino,float('inf')): distancias[vecino] = nueva_distancia predecesores[vecino] = origen visitados.append(origen) no_visitados={} k in grafo: if k not in visitados: no_visitados[k]=distancias.get(k,float('inf')) x = min(no_visitados,key=no_visitados.get) dijkstra(grafo,x,destino,visitados,distancias,predecesores)
i want dijkstra
function return me 2 things: cost (that's distancias[destino]
, , route between 2 nodes ruta
. when try function return ruta , costo, i'll nonetype error ('nonetype' object not iterable
). why that, if doesn't work if str(ruta)
? thanks!
add return in last line:
return dijkstra(grafo,x,destino,visitados,distancias,predecesores)
since wrote recursive function, need return result way first call of function.
Comments
Post a Comment