2014-02-13 2 views
6

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

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

  1. запрос пользователя на вход неотрицательное число п
  2. затем использовать цикл для вычисления факториала

и код как то:

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

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

+1

Вам не нужны последние 1 в диапазоне (1, N + 1,1), поскольку инкремент по умолчанию равен +1. Достаточно только диапазона (1, N + 1) – Bayko

ответ

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

+0

'continue' означает снова цикл запуска и' break' break to loop – WBAR

+0

Возможно, OP означает 'if float (N)! = Int (N)', чтобы проверить, действительно ли целое число вошел? – aquavitae

+0

@aquavitae Да, но я рассказываю об этом с помощью 'try:' ... part. – glglgl

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

+0

+1 для первой части, -0.4 для последней. Делает +0.6, который все еще равен +1 :-) – glglgl

+0

Ха-ха, закройте один! Помните, если я спрошу, что случилось со второй частью? :) – EducateMe

+0

Неполный. Он не говорит пользователю повторно ввести номер, и вы вызываете 'int (N)' три раза, что лучше сделать с помощью 'nn = int (N)' once. – glglgl

0

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

math.factorial (х)

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

Godspeed.

+0

Спасибо! Возможно, мой вопрос озадачен. Я просто хочу использовать факторный расчет в качестве примера. (я не знаю, есть что-то вроде продолжения или разрыва). – useR

Смежные вопросы