Seite 1 von 1

problem mit return

Verfasst: Donnerstag 7. Juni 2007, 20:23
von driver
hallo zusammen
ich habe mit Hilfe des Tiefensuche_Algorithmus eine Funktion geschrieben, mit der man kontrollieren kann, ob ein Graph schleifenfrei ist.
Die Suche an sich funktioniert gut.
Problem habe ich mit dem return Befehl(tut nicht was ich erwarte).
ich rufe die funktion so :
print dfs(net, 1, 34, stack) # erwarte z.B 1 als ausgabe , bekomme aber None

was mache ich falsch ?

Code: Alles auswählen

def dfs(net, node , goal, stack):
	#pdb.set_trace()
        c.nodes[node].visited+= 1
        if node == goal :
            return 1
        if c.nodes[node].visited == 2 :
            return 8

        else:

            for edge in c.nodes[node].edge :
                n1 = c.edges[edge].node1.index
                n2 = c.edges[edge].node2.index
                if n1 != node and c.nodes[n1].visited == 0 :
                    stack.append(n1)
                    continue
                elif n2 != node and c.nodes[n2].visited == 0 :
                    stack.append(n2)
            if len(stack)!=0 :
                no = stack.pop()
                dfs (net, no , goal,  stack)
            else :
		return 0
merci schonmal

Verfasst: Donnerstag 7. Juni 2007, 21:09
von BlackJack
Jede Funktion in Python gibt etwas zurück, man kann sich ein implizites ``return None`` ganz am Ende jeder Funtkion vorstellen.

Das bedeutet also es kann Fälle geben wo Deine Funktion bis zum Ende durchläuft, ohne das sie über ein explizites ``return`` stolpert. Das ist zum Beispiel im ``if``-Zweig ab Zeile 19 der Fall.

Verfasst: Donnerstag 7. Juni 2007, 21:30
von driver
danke erstmal für die schnelle Antwort.
jetzt gehts :

Code: Alles auswählen

def dfs(net, node , goal, stack):
	#pdb.set_trace()
        c.nodes[node].visited+= 1
        if node == goal :
            print 'Knoten gefunden'
            return
        if c.nodes[node].visited == 2 :
	    print 'Schleife gefunden'
	    return 

        else:

            for edge in c.nodes[node].edge :
                n1 = c.edges[edge].node1.index
                n2 = c.edges[edge].node2.index
                if n1 != node and c.nodes[n1].visited == 0 :
                    stack.append(n1)
                    continue
                elif n2 != node and c.nodes[n2].visited == 0 :
                    stack.append(n2)
            if len(stack)!=0 :
                no = stack.pop()
                dfs (net, no , goal,  stack)
            else :
		print 'Knoten nicht gefunden'
		return
statt print'' , kann ich jetzt ein Attribut hinzufügen, sowas wie :
self.loop = 0
und bei einer vorhandenen Schleife : self.loop = 1

merci