我刚刚开始学习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()
>>>
答案 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