如何使用函数对象和值作为参数在Python中实现双因子

时间:2015-02-04 06:40:40

标签: python

我刚刚开始学习Python并遇到了一个问题,这个问题在过去4个小时内都在尝试。我也看到了这个论坛的另一个问题是双因素,但这没有多大帮助。

我想创建一个函数调用doublefact,它将函数对象f和值v作为参数,并返回f(f(v))。 例如,如果f是阶乘函数,则doublefact(f,3)返回(3!)! = 6! = 720。

我所做的更接近于此但未获得正确的输出并遇到大量错误。

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()
>>> 

2 个答案:

答案 0 :(得分:2)

问题是您没有在factorial函数中返回任何值。而不是print(num)使用return num。如果没有return语句,Python中函数的默认返回值是None,这就是您遇到的问题。

此外,您的doublefact功能存在问题,因为它会计算三次因子:factorial(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

答案 1 :(得分:0)

我知道这是一次学习练习所以这个答案不是很有意义。为了将来参考,Python在math模块中提供了一个阶乘函数。例如,

In [26]:

import math
print math.factorial(math.factorial(3)) # 720