如何使用函数对象和值作为参数在Python中实现双阶乘
我刚刚开始学习Python,遇到了一个问题,这是我在过去4个小时里一直在尝试的。我还查看了这个论坛上的另一个问题的双重因素,但这并没有多大帮助 我想创建一个函数调用doublefact,它将函数对象f和值v作为参数,并返回f(f(v))。 例如,如果f是阶乘函数,则doublefact(f,3)返回(3!)=6! = 720 我所做的更接近于此,但没有得到正确的输出,并且遇到了很多错误如何使用函数对象和值作为参数在Python中实现双阶乘,python,Python,我刚刚开始学习Python,遇到了一个问题,这是我在过去4个小时里一直在尝试的。我还查看了这个论坛上的另一个问题的双重因素,但这并没有多大帮助 我想创建一个函数调用doublefact,它将函数对象f和值v作为参数,并返回f(f(v))。 例如,如果f是阶乘函数,则doublefact(f,3)返回(3!)=6! = 720 我所做的更接近于此,但没有得到正确的输出,并且遇到了很多错误 def factorial(n): num = 1 while n >= 1: nu
def factorial(n):
num = 1
while n >= 1:
num = num * n
n = n - 1
print(num)
def doublefact(factorial,m):
temp=factorial(m)
temp1=factorial(temp)
print(factorial(temp1))
doublefact(factorial,3)
输出:
>>> 6
Traceback (most recent call last):
File "C:/Python34/practice/factorial.py", line 15, in <module>
doublefact(factorial,3)
File "C:/Python34/practice/factorial.py", line 11, in doublefact
temp1=factorial(temp)
File "C:/Python34/practice/factorial.py", line 4, in factorial
while n >= 1:
TypeError: unorderable types: NoneType() >= int()
>>>
>6
回溯(最近一次呼叫最后一次):
文件“C:/Python34/practice/factorial.py”,第15行,在
双重事实(阶乘,3)
文件“C:/Python34/practice/factorial.py”,第11行,事实上
temp1=阶乘(temp)
文件“C:/Python34/practice/factorial.py”,factorial中的第4行
当n>=1时:
TypeError:无序类型:NoneType()>=int()
>>>
问题在于,阶乘函数中没有返回任何值。使用returnnum
代替print(num)
。如果Python中没有return
语句,那么函数的默认返回值是None
,这就是您所经历的
另外,您的doublefact
函数存在一个问题,它计算阶乘三次:asfactorial(m)
,factorial(temp)
和factorial(temp1)
3代码>:
>>> def factorial(n):
... num = 1
... while n >= 1:
... num = num * n
... n = n - 1
... return num
...
>>> def doublefact(factorial,m):
... temp=factorial(m)
... return factorial(temp)
...
>>>
>>> doublefact(factorial, 3)
720
我知道这是一个学习练习,所以这个答案不是很有意义。作为将来的参考,Python在数学模块中提供了一个阶乘函数。比如说,
In [26]:
import math
print math.factorial(math.factorial(3)) # 720
这应该是一个注释为什么您的doublefactorial
函数依赖于factorial
函数作为参数?你为什么要改变它?你可能指的是更一般的东西,比如apply\u function\u两次(some\u function,m)
。这不会改变函数的功能,只会改变它的调用;另请注意,与您的功能不同。作为与特定问题不太相关的旁注。。。不要试图制定缩进的规则;只需按照流程,缩进4个空格,永远不要使用制表符。。。Python的体验会更好。让压痕规则与C++进行斗争,那不是真正的自由…只是制造混乱的自由