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