Вычисление факториала с помощью Python

Я новичок в Python и в настоящее время читаю на Python 3 для абсолютного новичка и сталкиваются с проблемой.

Я хотел бы рассчитать факториал с помощью процедуры.

  1. запрос пользователя на ввод неотрицательного числа n
  2. затем используйте for loop для вычисления факториала

и код такой:

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, если это не неотрицательное число.

Спасибо за вашу нежную помощь.

3 ответов


конструкция может выглядеть так:

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 напрямую,и если это не сработает, пусть пользователь снова войдет. Это отклоняет числа с плавающей запятой, а также все остальное, что недопустимо как целое число.


в математической библиотеке 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 является правильным по определению факториала.


вы можете проверить математический модуль для python.

математика.факториал (x)

вернуться х факторный. Повышает ValueError, если x не является интегралом или отрицательным.

удачи.