Эта функция должна работать для вычисления факториалов, но это не так. [python-3.x]

(Полное раскрытие информации, я просматриваю учебник по Python на CodeAcademy и использую их веб-среду IDE.)

def factorial(x):
    bang = 1
        for num in x:
            bang = bang * num
    return bang

В java это работает для создания факториала из числа меньше 2147483647. Я думаю, что это должно работать на питоне, но это не так. Вместо этого я получаю сообщение об ошибке:

«Отслеживание (последний вызов последним): файл« python », строка 3, в факториале TypeError: объект 'int' не повторяется»

Возможно, я чего-то не понимаю, или, возможно, у меня неправильный синтаксис. Я проверил дальше и создал отдельную функцию под названием factorial, которая выполняет итерацию:

def factorial(x):
    if x > 2:
        return x
    else:
        return x(factorial(x-1))

Это тоже не работает, что дает мне ошибку:

"Traceback (последний вызов последним): файл" python ", строка 11, в факториале TypeError: объект 'int' не вызывается"

Я питон-новичок, но кажется, что оба они должны работать. Посоветуйте, пожалуйста, лучший способ изучить синтаксис Python ...


person Edwin Warner    schedule 15.08.2013    source источник
comment
Как вы думаете, что означает x(factorial(x-1))? Для Python (и большинства других процедурных языков) он может подумать, что вы вызываете x как функцию.   -  person lurker    schedule 16.08.2013


Ответы (2)


Вы не можете сделать for num in x, если x - целое число. Целое число не является «повторяемым», как говорится в ошибке. Вам нужно что-то вроде этого:

def factorial(x):
    bang = 1
    for num in xrange(1, x+1):
        bang = bang * num
    return bang

xrange (или range) сгенерирует необходимый диапазон чисел для работы in.

person lurker    schedule 15.08.2013

person    schedule
comment
factorial(0) должно быть 1, а не 0. - person Mark Dickinson; 16.08.2013