2014-09-10 188 views
-3

我是CS的初學者,我一直在努力通過自己的Python書。python調用函數內部的函數

我目前在遞歸,但我有點卡住了。

該練習要求我編寫一個名爲do_n的函數,該函數將一個函數對象和一個數字n作爲參數,並將該函數調用n次。

這是我的代碼

def countdown(n): 
    if n<= 0: 
     print 'Blastoff' 
    return 
else: 
    print n 
    countdown(n-1) 

def do_n(f(n), x): 
    if x<=0: 
     return 
    else: 
     f(n) 
     do_n(f, x-1) 

do_n(countdown(3), 3) 

當我這樣做,有因爲在高清do_n無效語法錯誤(F(N),X)。如果將其更改爲

​​3210

由於未在else語句中定義n,因此存在錯誤。

我想弄清楚如何使這項工作..謝謝你們!

+2

縮進問題。修理它。 – user2864740 2014-09-10 23:35:07

+0

我認爲你在發佈代碼示例時使用了選項卡。當您開始使用python而不是製表符使用4個空格縮進時,生活變得更加容易(請參閱關於如何配置您的編輯器)。它是我們處理python縮進瘋狂的標準方式。 – tdelaney 2014-09-11 00:41:01

回答

0

你幾乎與你的第二個例子。它需要函數f和最大數x。 n不存在,因爲你還沒有編寫循環來爲n生成值。原來蟒蛇有該

def do_n(f, x): 
    for n in range(x): 
     f(n) 

現在do_n需要一個函數對象f和計數X一個內置的,然後調用函數count次。注意f(函數對象)和f(n)(調用f的值爲n的結果)之間的差異。當你想打電話do_n,你做這樣的:

do_n(countdown, 3) 

不喜歡

do_n(countdown(3), 3) # badness 

這最後一個電話倒計時,然後用它的結果調用do_n。

0

DEF print_n(S,N):

if n<=0: 
    return 
else: 
    print s 
    print_n(s,n-1) 

DEF do_n(F,S,N,x):

if x<=0: 
    return 
else: 
    f(s,n) 
    do_n(f,s,n,x-1) 

do_n(print_n, '你好',2,2)