So habe ich diese Funktion (Beispiel):Wie man Wiederholungen einer rekursiven Funktion zählt?
def monty(x):
if abs(int(x)) == 1:
print("Cool!")
print("Took %s attempts.") % (z)
elif abs(int(x)) == 0:
print("Nope.")
else:
z = z + 1
y = x - 1
monty(y)
Nun, natürlich, ‚z‘ ist noch nicht definiert worden, so dass, wenn diese Funktion so ausgeführt wird, dass die ‚else‘ Anweisung aufgerufen wird, wird das Programm Gibt eine NameError-Ausnahme zurück.
Nun, ok. Lassen Sie uns versuchen, die Aussage dieses machen:
else:
try: z
except NameError: z = 0
else: z = z + 1
y = x - 1
monty(y)
Auch übernehmen wir die gleiche Nameerror Fang an die ‚if‘ Anweisung hinzugefügt.
Die Anweisung gibt immer 'z' als 0 zurück, da die Variable vollständig vergessen wird, wenn 'monty' erneut ausgeführt wird. Ok, was ist, wenn wir zuerst versuchen, z außerhalb von 'monty' zu definieren und den NameError catch zu löschen?
Nun, gibt sie einen Nameerror wieder, und wenn wir stattdessen den Nameerror Fang halten, ist es nur noch immer gibt 0.
So wie kann ich die Funktion Erhöhung z jedes Mal machen es gültig heißt? Mit anderen Worten, Wie kann ich das Programm stillschweigend zählen lassen, wie oft eine Funktion ausgeführt wurde, um später wieder aufgerufen zu werden? Lassen Sie uns versuchen, aus Gründen der Benutzerfreundlichkeit vermeiden, ein weiteres Argument der Funktion hinzuzufügen.
'print (" Tuck% s Versuche. ")% (Z)' wird nicht tun, was Sie denken, dass es tut. '%' ist ein Operator in einer Zeichenfolge. Es muss in die Klammer gehen: 'print (" Versuche% s Versuche. "% Z)' –
@PatrickHaugh: Bei Python 2 funktioniert das immer noch, weil 'print' eine Anweisung ist und diese Klammern um die Zeichenkette ein Nein sind -op. Aber in Python 3 hättest du recht. –
@MartijnPieters guten Punkt. Ich sah den eingeklammerten 'Print' und nahm an. –