2014-11-18 3 views
-1

Я начинающий питон, и здесь я застреваю при попытке определить факториальную функцию. Проблема заключается в том, что я помещаю печать вместо возврата, функция работает отлично, но, к сожалению, мне нужно использовать факториальную функцию в другой функции, что означает, что мне нужен оператор return. ! любом случае (http://postimg.org/image/bgctbpi31/)Оператор возврата не работает

#!/usr/bin/python 
def fact(x): 
    x=int(input("enter a number : ")) 
    result=1 
    if x<0: 
      print'it does not exist' 
    elif x==0: 
       return result 
    else: 
      for i in range (1,x+1): 
       result=result*i 
       return result 

    return result 
fact(5) 
+3

Кодекс текст. Пожалуйста, предоставьте [минимальный пример] (http://stackoverflow.com/help/mcve) и точное описание проблемы ** в самом вопросе ** - снимки вне сайта * не являются приемлемым способом предоставления кода *. – jonrsharpe

+0

Защиту факт (х): х = INT (вход ("Введите число:")) результат = 1 если х <0: print'it не существует» Элиф х == 0: возвращаемый результат еще: для г в диапазоне (1, х + 1): результат = результат * я возвращать результат обратный результат факт (5) –

+1

Прежде всего - возвращение оператор работает правильно, вы просто используете это неправильно. Чего вы пытаетесь достичь? Если вы ожидаете, что факт (5) напечатает результат на экране - вы ошибаетесь, для этого вы должны написать 'print fact (5)'. Во-вторых - вы возвращаете результат внутри цикла, который останавливает ваш цикл, просто найдите чужую функцию 'fact' и посмотрите, как это делается. – Rusty

ответ

-2

достаточно просто проблема, я бы rekomend с использованием рекурсии для него, потому что его рекурсивный проблема:

def nfak(n): 
    if n < 0 : 
     raise ValueError('Input has to be positive') 
    elif n == 0: 
     return 1 
    else: 
     return n * nfak(n - 1) 
+0

Хотя рабочий подход, это не объясняет OP, почему их код не работал или как они могли его исправить. – jonrsharpe

+0

и получить переполнение стека, потому что python не поддерживает хвостовую рекурсию, и в любом случае это не в хвостовой рекурсивной форме. – Rusty

+0

Достаточно длинный путь, чтобы получить переполнение стека на большинстве настроек. Возврат -1 показывает, что что-то когда-то не так – Svavelsyra

0

По какой-то причине у вас есть возвращение внутри для цикла. Вам следует поработать с отступом, поскольку Python использует уровни отступов для определения области.

def fact(x): 
    r=1 
    if x<0: 
     print "does not exist" 
     return None 
    elif x==0: 
     return r 
    else: 
     for i in range(0, x): 
      r *= i+1 
    return r 
-2

Вы должны обрабатывать функции из положить в печать держат в переменной, как

 
def fact(x): 
    x=input("input : "); 
    result=1; 
    if x < 0: 
     return "no answer"; 
    elif x==0: 
     return x; 
    else: 
     for i in range(1,x+1): 
      result=result*i 
     return result; 
print fact(5); 

Это работает отлично. в

 
stackoverflow$ python fact.py 
input : 5 
120 

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