def countup(k, n):
     'counts up from k to n'
     if k == n:
         print(k)
     elif n <= 0:
         print("Let's go!")
     else:
         print(k)
         countup(k+1,n)

Ich möchte eine Druckanweisung von "Let's Go" hinzufügen, bevor die Rekursion beginnt, damit sie so aussieht:

Countup (3,6)

Lass uns gehen!
3
4
5
6

0
user1727585 9 Okt. 2012 im 20:09

6 Antworten

Beste Antwort

Sie können eine Wrapper-Funktion wie diese schreiben

def countup(k,n):
    print "Let's Go"
    _countup(k,n)

def _countup(k, n):
     'counts up from k to n'
     if k == n:
         print(k)
     else:
         print(k)
         _countup(k+1,n)
1
Matt 9 Okt. 2012 im 16:44

Für solche dummen Sachen verwende ich Schlüsselwortargumente:

def count_up_or_down(k, n, start=True):
     'counts up from k to n'

     if(start):
         print("Let's go!")
     if k == n:
         print(k)
     else:
         print(k)
         sign = 1 if n>k else -1
         count_up_or_down(k+sign,n,start=False)

count_up_or_down(3,6)

Aber eigentlich sollten Funktionen im Allgemeinen eine Sache tun (und diese eine Sache gut machen). Sie fragen nach einer Funktion, die zwei nicht zusammenhängende Dinge ausführt (druckt "Los geht's!" Und zählt). Es ist definitiv besser, diese beiden nicht zusammenhängenden Aktionen in zwei separate Funktionen / Anweisungen zu zerlegen.

0
mgilson 9 Okt. 2012 im 16:28

Sie können dies über die aufrufende Funktion tun oder countup eine andere Funktion sein, die "Let's go!" bevor Sie den rekursiven aufrufen.

Wenn Sie es unbedingt aus der Rekursion heraus tun möchten, versuchen Sie, es umzuschalten, damit Sie oben beginnen und nach unten zurückkehren (ungetestet, aber es funktioniert in meinem Kopf):

def countupwithletsgo(k, n):
    if k == n:
        print("Let's go!")
        print(n)
    else:
        countupwithletsgo(k, n-1)
        print(n)

Beachten Sie den unhandlichen Funktionsnamen - normalerweise ein gutes Zeichen dafür, dass er mehr als nur eine Sache tut und wahrscheinlich überarbeitet werden sollte. Wie in der zuerst vorgeschlagenen Wrapper-Funktionsform.

0
lc. 9 Okt. 2012 im 16:19

Vor der Zeile drucken, wo Sie diese Methode zum ersten Mal aufrufen? Natürlich kann man nicht direkt in die Rekursion springen.

0
Rohit Jain 9 Okt. 2012 im 16:12

Verwenden Sie ein Standardargument:

def countup(k, n,go=None):
     'counts up from k to n'
     if go:
         print go
     if k == n:
         print(k)
     elif n <= 0:
         print("Let's go!")
     else:
         print(k)
         countup(k+1,n)
countup(3,6,"Lets go")

Ausgabe:

Lets go
3
4
5
6
0
Ashwini Chaudhary 9 Okt. 2012 im 16:13

Verschieben Sie die Rekursion in eine zweite Funktion, lassen Sie die Zeichenfolge von der ersten Funktion ausgeben und rufen Sie dann die zweite Funktion auf.

0
Ignacio Vazquez-Abrams 9 Okt. 2012 im 16:12