2014-09-10 221 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)