Python 递归,使用输入调用函数

Python 递归,使用输入调用函数,python,function,recursion,input,Python,Function,Recursion,Input,我在做一些递归的东西。我已经按照圣诞节十二天的方式创建了一些函数,但是我想不出一种使用输入调用函数的方法。我举个例子: def day1(): print 'A Partridge in a Pear Tree' def day2(): print '2 Turtle Doves' day1() def day3(): print '3 French Hens' day2() 我尝试在函数中使用if语句,例如 def DaysOfXmas(n):

我在做一些递归的东西。我已经按照圣诞节十二天的方式创建了一些函数,但是我想不出一种使用输入调用函数的方法。我举个例子:

def day1():
    print 'A Partridge in a Pear Tree'
def day2():
    print '2 Turtle Doves'
    day1()
def day3():
    print '3 French Hens'
    day2()
我尝试在函数中使用if语句,例如

def DaysOfXmas(n):
    if n == 1:
        day1()
    if n == 2:
        day2()
    if n == 3:
        day3()
但这感觉像是一种可怕而混乱的方式。 有什么建议吗?

嗯,你可以做
globals()

只需将函数放入一个集合中。例如,如果需要稀疏键或非整数键,可以使用列表或dict
day_funcs=[day0,day1,day,day3]
day0
应该是一个占位符,如果在盲目获取项目并调用它之前检查输入,则不可调用的函数可以工作-如果不检查,则用户会得到一个看起来完全无关的丑陋错误)并在调度程序中使用
day_funcs[n]()
。您可以通过几种方式使其更加干涸:需要最后一次键入的方法(但也适用于其他命名方案)是将函数(仅那些)放入一个单独的模块中,在导入它们之后,定义
day\u funcs=sorted(inspect.getmembers(The_模块,isfunction))
,您可以执行
globals()['day%d'%n]()
,但这更可怕、更混乱

只需将函数放入一个集合中。例如,如果需要稀疏键或非整数键,可以使用列表或dict
day_funcs=[day0,day1,day,day3]
day0
应该是一个占位符,如果在盲目获取项目并调用它之前检查输入,则不可调用的函数可以工作-如果不检查,则用户会得到一个看起来完全无关的丑陋错误)并在调度程序中使用
day_funcs[n]()
。您可以通过几种方式使其更加干涸:需要最后一次键入的方法(但也适用于其他命名方案)是将函数(仅那些)放入单独的模块中,并在导入后定义
day\u funcs=sorted(inspect.getmembers(The_模块,isfunction))

这是一个简单的递归循环示例。不过,除了理解它,不要用Python来做。使用for循环,该函数更容易编写(也更高效)


这是一个简单的递归循环示例。不过,除了理解它,不要用Python来做。使用for循环编写该函数要容易得多(而且效率更高)。

递归背后的思想是,您对任意输入执行一组一致的操作,并且设置一个或多个可能会执行某些特殊操作的基本情况,并结束递归调用


如果你想为12个输入值做一些不同的事情,或者考虑使用给定输入的输出映射(然后用一个递减的输入值调用函数),或者你有12个基本情况。

< P>递归之后的想法是,你有一个一致的操作集,你可以在任意的输入上执行,您可以设置一个或多个基本情况,这些基本情况可能会做一些特殊的事情,并结束递归调用


如果你想为12个输入值做一些不同的事情,或者考虑使用给定输入的输出映射(然后用一个递减的输入值再次调用函数),或者你有12个基本情况。

在你的例子中我看不到任何递归。在你的例子中没有看到任何递归。
days = ['A Partridge in a Pear Tree',
        '2 Turtle Doves',
        '3 French Hens']

def sing(n=0):
    print days[n]
    try:
        sing(n+1)
    except IndexError:
        return