Найти - Пользователи
Полная версия: [Решено] Не отрабатывает return?
Начало » Python для новичков » [Решено] Не отрабатывает return?
1
Liberty
Буквально вчера началось моё погружение в python и сразу возникли вопросы. Почему приведённый код корректно обрабатывается в python shell и ничего не выдаёт, будучи запущенным из файла?

Python 3.2.3 (default, Apr 23 2012, 23:14:44) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def fact(n):
...     if n == 0 or n < 0:
...             return 1
...     return fact(n-1)*n
... 
>>> fact(8)
40320
>>> fact(0)
1
>>> fact(-2)
1
>>> 
arch@linux ~ $ python mytest.py
arch@linux ~ $ 
d1ffuz0r
>>>print(fact(-2))
Liberty
Спасибо, работает:
[def fact(n):
	if n == 0 or n < 0:
		print (1)
	else:
		x = (n-1)*n
		print(x)
fact(6)

Значит ли это, что return невозможно использовать нигде, кроме шелла? И как можно изменить функцию, чтобы дать пользователю возможность вводить свои данные, в частности задавать значение переменной n? Верно ли я понимаю, что в таком случае функция изначально должна быть без агрументов? Например:

def func():
  # Функция проверяет верно ли введенное число
	x=input("В каком году проходит олимпиада в Сочи? ")
	x=int(x)
	if x < 2014 or x > 2014:
	  print("Нет, вы не правы")
	else:
	  x=str(x)
	  print("Да, олимпиада проходила в " + x + " году!")
func()

Прошу прощения за подобные вопросы, просто до этого никаких языков программирования не изучалось.
Soteric
Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.
def pi():
return 3.14

piNumber = pi()
print(piNumber)
Liberty
Soteric
Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.
Благодарю. Теперь в голове стало светлее )
GaiveR
И как можно изменить функцию, чтобы дать пользователю возможность вводить свои данные, в частности задавать значение переменной n?

def fact(n):
    if n <= 1:
        return 1
    else:
        return n * fact(n - 1)
num = int(input('Enter number: '))  # по-хорошему конечно надо еще проверять, что пользователь ввел число, а не буквы или пустую строку
print(fact(num))
Liberty
GaiveR, точно, меня такая мысль не посетила. Но тогда сразу о проверке значений: что лучше для этого использовать? Задействовать обработчик исключений?
Soteric
Да, через исключения будет хорошо.
py.user.next
GaiveR
def fact(n):
math.factorial()
а если свой делаешь, нужно его циклом делать, так как рекурсия ограничена, вызови fact(1000)
GaiveR
math.factorial()
а если свой делаешь, нужно его циклом делать, так как рекурсия ограничена, вызови fact(1000)
Согласен.

Но это был лишь ответ на вопрос:
И как можно изменить функцию, чтобы дать пользователю возможность вводить свои данные, в частности задавать значение переменной n?
а не попытка написать свою функцию вычисления факториала :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB