python在函数中调用函数

python在函数中调用函数,python,function,recursion,thinkpython2e,Python,Function,Recursion,Thinkpython2e,我是CS的初学者,我一直试图自己完成一本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:

我是CS的初学者,我一直试图自己完成一本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)
def倒计时(n):
如果n你的第二个例子就差不多了。它需要一个函数f和一个最大计数x。n不存在,因为您尚未编写为n生成值的循环。事实证明python有一个内置的

def do_n(f, x):
    for n in range(x):
        f(n)
现在do_n获取函数对象f和计数x,然后调用函数计数次数。注意
f
(函数对象)和
f(n)
(用值n调用f的结果)之间的区别。当你想打电话给do_n时,你可以这样做:

do_n(countdown, 3)
不像

do_n(countdown(3), 3) # badness
最后一个调用倒计时,然后调用do\n及其结果。

def print\n(s,n):
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,'Hello',2,2)
如果n这是一个棘手的问题

基本上,解决办法是:

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

如果n缩进很重要。修复它。我想你在发布代码示例时使用了标签。当您开始在python中使用4个空格缩进而不是制表符时,生活会变得更加轻松(请参阅关于以这种方式配置编辑器)。这是我们处理python缩进疯狂的标准方法。
def do_n(f, n):
    if n <= 0:
        return
    f(n)
    do_n(f, n-1)
def print_n(s, n):
    if n <= 0:
        return
    print(s)
    print_n(s, n-1)

def do_n(f, s, n):
    for i in range(n):
        f(s, n)

do_n(print_n, 'Hello', 3)