Помощь программы Python Factorial - PullRequest
0 голосов
/ 15 июня 2011

Вот что я написал:

number = raw_input('Enter an integer= ')
if number < 0:
    print 'Invalid number'

else:
    for k in range(1,(number)):
        number *= k

print number

Я хочу иметь возможность вводить любое число (больше 0), но когда я ввожу число, скажем 4 (факториал 4 равен 24), я получаю эту ошибку:

Traceback (most recent call last):
  File "problem.py", line 6, in <module>
    for k in range(1,(number)):
TypeError: range() integer end argument expected, got str.

Я не понимаю, что это значит, и насколько я знаю, код должен работать, пожалуйста, помогите!

Ответы [ 4 ]

4 голосов
/ 15 июня 2011

Это прекрасно работает: factorial.py

#!/usr/bin/env python

# imports go here

__author__ = 'Michael O. Duffy'
__status__ = "Development"

def factorial(n):
    """ Calculate a factorial of an integer """
    factorial = 1
    if n < 0:
        print 'Invalid number'
    else:
        for k in range(1,n+1):
            factorial *= k
    return factorial

if __name__ == '__main__':

    for number in range(1, 20):
        print 'n: ', number, 'n!: ', factorial(number)

Вы должны знать, что это неэффективная академическая реализация, которую не следует использовать ни в одном серьезном приложении.Вам будет намного лучше использовать реализацию gamma или lngamma и кэш словаря, чтобы сэкономить на вычислениях, если вы будете многократно использовать значения:

http://mathworld.wolfram.com/GammaFunction.html

2 голосов
/ 16 июня 2011

А как насчет рекурсии?

def factorial(n):
  if n < 0:
    print("ERROR!") # throw error, return -1, or whatever
  elif n <= 1:
    return 1
  else:
    return n * factorial(n - 1)
1 голос
/ 16 июня 2011

raw_input возвращает строку, а не целое число.Создайте целое число следующим образом:

number = int(raw_input('Enter an integer= '))

Пользователь может ввести что-то, кроме целого числа, и в этом случае вы можете использовать эту возможность.

while True:
    try:
        number = int(raw_input('Enter an integer= '))
    except ValueError:
        print "That wasn't an integer"
    else:
        break
0 голосов
/ 20 июля 2017
using xxxxx.py
num=int(raw_input("Enter a number"))
n=1
while num>=0:
  n=n*num
  num=num-1
print "Factorial of the given number is: ",n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...