让函数FirstFactorial(num)
获取正在传递的 num 参数并返回它的阶乘。例如:如果 num = 4,则程序应返回 (4 * 3 * 2 * 1( = 24。对于测试用例,范围将介于 1 和 18 之间,输入将始终为整数。
这是我的代码
def FirstFactorial(num):
x = [1]
if num == 1:
return 1
else:
for i in range(1,num+1):
x = x*(i)
return x
print (FirstFactorial(4))
预期输出为 24
。我从上面给出的代码中得到以下输出。
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
让我们做一个更好的代码:
def factorial(num):
f = 1
for i in range(1, num+1):
f = f * i
return f
代码的某些部分根本没有意义,例如,x = [1]
声明x
等于一个列表和一个元素。然后,如果你用python做list * number
,你会乘以列表:
x = [1, 2]
x = x * 2
print(x) # prints [1, 2, 1, 2]
使用上面的代码不需要检查数字是否为 1 的 if 语句。
简单地做:
import math
print(math.factorial(4))
输出:
24
你犯了一个小错误。与其将变量x
定义为列表(在函数定义FirstFactorial(num)
、x=[1]
定义后的第一行(,不如将变量x
定义为单个数字,即 x=1
.
在Python中,列表乘以正标量(例如n
(会导致列表中的数字重复n
次数。换句话说,* 运算符在给定的次数内重复列表。这就是您的代码中发生的情况 x = x*(i)
行 .
你可以在这里阅读更多关于python列表的信息。
以下代码将正常工作,并完成您的工作。我所做的唯一更改是在函数定义后的第一行 FirstFactorial(num)
.
def FirstFactorial(num):
x = 1
if num == 1:
return 1
else:
for i in range(1,num+1):
x = x*(i)
return x
print (FirstFactorial(4))
>>24
此外,您不需要单独的 if
语句来定义 1!。下面的代码更简洁,它将为您提供包括 1 在内的所有数字的阶乘。
def FirstFactorial(num):
x = 1
for i in range(1,num+1):
x = x*(i)
return x
print (FirstFactorial(1))
>> 1
你的 x 声明有错误。此外,使用 lambda 表达式。
fact = lambda n:1 if n==0 else n*fact(n-1)
print(fact(4))
>>> 24
42 字节
fact = lambda x:0**x or x*fact(x-1)
print(fact(4))
27 字节
Python 在数学模块中具有阶乘方法的 C 类型内部实现。因为它是C,所以它比Python的方法更快。
import math
print(math.factorial(4))
第一个答案仍然有 for 循环,
def factorial(n):
return 1 if ( n == 1 or n == 0 ) else n * factorial(n - 1)
实际上对我来说是正确的一个,我得到了这个并达到了给定的测试结果。
def FirstFactorial(num):
if num ==1:
return 1
else:
for i in range(1, num-1/2):
num = num*(i)
return num
# keep this function call here