簡體   English   中英

想要在開始時添加一次字符串

[英]Want to add string once at beginning

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)

我想在遞歸開始之前添加“ Let's Go”的打印語句,因此它看起來像這樣:

計數(3,6)

我們走吧!
3
4
5
6

您可以這樣編寫包裝函數

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)

將遞歸移動到第二個函數,並讓第一個函數輸出字符串,然后調用第二個函數。

在您第一次調用該方法的行之前打印? 當然,您不能直接跳到遞歸中。

使用默認參數:

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")

輸出:

Lets go
3
4
5
6

對於像這樣的愚蠢的東西,我使用關鍵字參數:

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)

但是實際上,函數通常應該做一件事情(一件事情做得好)。 您要的是一個函數,它執行2個無關的操作(打印“ Lets go!”並計數)。 最好將這兩個無關的動作分解為2個獨立的功能/語句。

您可以從調用函數中執行此操作,或者讓countup是另一個打印“ Let's go!”的函數。 在調用遞歸代碼之前。

如果您想從遞歸內部執行此操作,請嘗試將其切換到頂部,然后向下遞歸(未經測試,但它在我的腦海中起作用):

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

注意笨拙的函數名-通常這是一個好兆頭,它所做的不僅僅是一件事,而且應該重構。 建議先將其包裝成函數形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM