problem mit return

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
driver
User
Beiträge: 20
Registriert: Dienstag 27. März 2007, 12:10

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
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.
driver
User
Beiträge: 20
Registriert: Dienstag 27. März 2007, 12:10

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
Antworten