Globale Variablen, die in die Rekursion. Python
OK, ich bin mit Python 2.7.3 und hier ist mein code:
def lenRecur(s):
count = 0
def isChar(c):
c = c.lower()
ans=''
for s in c:
if s in 'abcdefghijklmnopqrstuvwxyz':
ans += s
return ans
def leng(s):
global count
if len(s)==0:
return count
else:
count += 1
return leng(s[1:])
return leng(isChar(s))
Ich versuche, ändern Sie die variable count
innerhalb der leng
Funktion. Hier sind die Dinge, die ich versucht habe:
- Wenn ich die variable count außerhalb des
lenRecur
- Funktion, es funktioniert das erste mal, aber wenn ich wieder versuche ohne Neustart python-shell, die zählen (natürlich) nicht neu startet, so hält es hinzufügen. - Wenn ich die
count += 1
Linie fürcount = 1
es funktioniert auch, aber die Ausgabe ist (natürlich) ein.
So, mein Ziel ist es hier, um die Länge der Zeichenfolge mithilfe von Rekursion, aber ich weiß nicht, wie zu verfolgen die Anzahl der Buchstaben. Ich habe gesucht, für Informationen über Globale Variablen, aber ich bin immer noch stecken. Ich weiß nicht, ob ich habe nicht verstanden es noch, oder wenn ich ein problem in meinem code.
Vielen Dank im Voraus!
- kann nicht sehen, die Rekursion selbst.
- Sorry, ist jetzt ok!
Du musst angemeldet sein, um einen Kommentar abzugeben.
count
imlenRecur
ist nicht eine Globale. Es ist ein scoped Variablen.Müssen Sie mit Python 3, bevor Sie machen kann, die funktionieren in dieser Weise; Sie suchen für die
nichtlokale
- Anweisung Hinzugefügt Python 3.In Python 2 können Sie diese Einschränkung umgehen, durch die Verwendung einer veränderlichen (wie eine Liste) für
count
statt:Nun sind Sie nicht mehr verändern, die
count
name selbst; es bleibt unverändert, es hält auf der gleichen Liste. Alles, was Sie tun, ist die Veränderung das erste element enthalten in dercount
Liste.Alternative 'Rechtschreibung' wäre
count
eine Funktion, Attribut:Nun
count
ist nicht mehr lokal auflenRecur()
; es hat sich ein Attribut auf das unveränderlichelenRecur()
- Funktion statt.Für Ihr problem, Sie sind eigentlich overthinking Dinge. Nur haben die Rekursion zu tun, die Fazit:
Demo:
leng
Funktioncount = [0]
funktioniert; hast du das schon?Ich denke, Sie können gehen, zählen als zweites argument
sollte diese Arbeit besser als muting-Objekte aus dem äußeren Bereich wie die Verwendung von mutable objects (
list
oderdict
) oder monkey-patching-Funktion selbst zum Beispiel.Müssen Sie die variable count eine variable, Funktion wie
Allerdings sehe ich ein paar Probleme mit dem code.
1) Wenn Sie zu finden versuchen, um die Anzahl der Buchstaben in einem string durch Rekursion, das wird man tun:
Aber trotzdem würde ich es vorziehen, die eine einzelne Funktion, die Aufgabe zu tun, wie es kein leng Methode überhaupt.
2) Wenn Ihr Ziel ist einfach die Anzahl der Buchstaben in einem string, ich würde es vorziehen, Liste, Verständnis
Ist dies alles andere als Zwecke zu lernen, schlage ich vor, Sie bei der Rekursion zu vermeiden. Denn die Lösung kann nicht verwendet werden, für größere Zeichenketten(können sagen, finden Sie das alphabet, zählen aus dem Inhalt einer Datei). Sie könnten auf den Absturz mit Laufzeitfehler der Maximale Rekursionstiefe Überschritten.
Obwohl Sie arbeiten können, um dieses durch Einstellung der Rekursionstiefe durch setrecursionlimit Funktion, ich schlage vor, Sie gehen für andere einfache Möglichkeiten. Mehr info über die Einstellung des recursionlimit hier.
Definieren, die es außerhalb der Funktion alle Definitionen, wenn Sie es verwenden möchten, wie eine Globale variable:
oder definieren Sie es als eine Funktion, Attribut:
Dies wurde behoben in py3.x wo können Sie die
nonlocal
Aussage:Brauchen Sie nicht zu zählen. Die unter-Funktion sollte funktionieren.