Вычисление факториала с помощью Python
Я новичок в Python и в настоящее время читаю на Python 3 для абсолютного новичка и сталкиваются с проблемой.
Я хотел бы рассчитать факториал с помощью процедуры.
- запрос пользователя на ввод неотрицательного числа n
- затем используйте 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 не является интегралом или отрицательным.
удачи.