使用Python进行因子计算

时间:2014-02-13 08:36:02

标签: python python-3.x factorial

我是Python新手,目前正在阅读 Python 3 for absolute beginner 并面临以下问题。

我想用程序计算阶乘。

  1. 请求用户输入非负数n
  2. 然后使用for循环来计算阶乘
  3. 代码就是这样:

    N = input("Please input factorial you would like to calculate: ")
    ans = 1
    for i in range(1,N+1,1):
        ans = ans*i
    print(ans)
    

    虽然我想添加一项功能来检查输入数字N是否为非负数。像:

    if N != int(N) and N < 0:
    

    如果用户不是非负数,我希望用户再次输入N.

    感谢您的温和帮助。

5 个答案:

答案 0 :(得分:4)

构造可能如下所示:

while True:
    N = input("Please input factorial you would like to calculate: ")
    try: # try to ...
        N = int(N) # convert it to an integer.
    except ValueError: # If that didn't succeed...
        print("Invalid input: not an integer.")
        continue # retry by restarting the while loop.
    if N > 0: # valid input
        break # then leave the while loop.
    # If we are here, we are about to re-enter the while loop.
    print("Invalid input: not positive.")

在Python 3中,input()返回一个字符串。在所有情况下,您都必须将其转换为数字。因此,您的N != int(N)没有任何意义,因为您无法将字符串与int进行比较。

相反,尝试直接将其转换为int,如果不起作用,请让用户再次输入。这会拒绝浮点数以及其他无效的整数。

答案 1 :(得分:1)

在Python的数学库中,有一个阶乘函数。您可以像这样使用它:

import math
...
ans = math.factorial(N)

由于您想使用循环计算,您是否考虑过以下内容?

ans = -1
while ans < 0:
    N = input("Please enter a positive integer: ")
    if N.isdigit() == True:
        n = int(N)
        if n >= 0:
            ans = n
            for x in range (n-1, 1, -1):
                ans *= x
            print (ans)

注意,第二个解决方案不适用于N = 0,其中ans = 1是正确的因子定义。

答案 2 :(得分:0)

您可以检查数学模块是否为python。

math.factorial(x)的

返回x阶乘。 如果x不是整数或是负数,则引发ValueError。

答案 3 :(得分:0)

Number = int(input("Enter the number to calculate the factorial: "))
factorial = 1
for i in range(1,Number+1):
    factorial = i*factorial

print("Factorial of ",Number," is : ", factorial)

答案 4 :(得分:0)

def factorial(a):
    if a == 1:
        return 1
    else:
        return a * factorial(a - 1)


    print('factorial of number', factorial(5))