【发布时间】:2022-01-12 09:18:08
【问题描述】:
我在从外部函数返回值时遇到问题。
功能:
def dijkstra(netzwerk,startpunkt,zielpunkt,punkt_geprueft=[],entfernungen={},vorgaenger={}):
if startpunkt not in netzwerk:
raise TypeError('Start- und/oder Zielpunkt nicht vorhanden')
if zielpunkt not in netzwerk:
raise TypeError('Zielpunkt kann nicht gefunden werden')
if startpunkt == zielpunkt:
weg_pfad=[]
variable_fuer_vorgaenger=zielpunkt
while variable_fuer_vorgaenger != None:
weg_pfad.append(variable_fuer_vorgaenger)
variable_fuer_vorgaenger=vorgaenger.get(variable_fuer_vorgaenger,None)
return weg_pfad
#print(weg_pfad)
else :
if not punkt_geprueft:
entfernungen[startpunkt]=0
for nachbarpunkt in netzwerk[startpunkt] :
if nachbarpunkt not in punkt_geprueft:
neue_entfernung = entfernungen[startpunkt] + netzwerk[startpunkt][nachbarpunkt]
if neue_entfernung < entfernungen.get(nachbarpunkt,float('inf')):
entfernungen[nachbarpunkt] = neue_entfernung
vorgaenger[nachbarpunkt] = startpunkt
punkt_geprueft.append(startpunkt)
ungeprueft={}
for k in netzwerk:
if k not in punkt_geprueft:
ungeprueft[k] = entfernungen.get(k,float('inf'))
nd= min(ungeprueft, key=ungeprueft.get)
dijkstra(netzwerk,nd,zielpunkt,punkt_geprueft,entfernungen,vorgaenger)
主要功能:
startpunkt = self.dlg.DStart.text()
zielpunkt = self.dlg.DEnd.text()
weg_pfad = dijkstra(netzwerk, startpunkt, zielpunkt)
print(weg_pfad)
self.dlg.OutputText.append(weg_pfad)
self.dlg.OutputText.append("Ergebnis für Dijkstra Algorithmus")
在函数中打印值weg_pfad 会给我一个值:['P5', 'P3']。
在主函数中打印值给我None。
为什么会这样,我该如何解决?
下一步是返回多个值 -> weg_pfad 和 entfernungen[zielpunkt]。
【问题讨论】:
-
我认为您必须在 else 块中添加一个返回值。所以返回 dijkstra(netzwerk,nd,zielpunkt,punkt_geprueft,entfernungen,vorgaenger)
-
99% 确定您在递归调用函数时丢失了 return
-
如果采用
else :分支,则没有return语句,因此该函数有效地返回None。通过函数的所有路径都必须返回一些东西。
标签: python printing return return-value dijkstra