用于查找阶乘的 Python 代码存在问题



让函数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 

最新更新