Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2012 15:18:59

Liberty
Зарегистрирован: 2012-10-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

Буквально вчера началось моё погружение в 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 ~ $ 

Отредактировано Liberty (Окт. 10, 2012 16:10:55)

Офлайн

#2 Окт. 10, 2012 15:20:35

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

>>>print(fact(-2))

Офлайн

#3 Окт. 10, 2012 15:36:56

Liberty
Зарегистрирован: 2012-10-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

Спасибо, работает:

[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()

Прошу прощения за подобные вопросы, просто до этого никаких языков программирования не изучалось.

Офлайн

#4 Окт. 10, 2012 16:03:49

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.

def pi():
return 3.14

piNumber = pi()
print(piNumber)



Офлайн

#5 Окт. 10, 2012 16:10:00

Liberty
Зарегистрирован: 2012-10-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

Soteric
Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.
Благодарю. Теперь в голове стало светлее )

Офлайн

#6 Окт. 10, 2012 16:42:41

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

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

def fact(n):
    if n <= 1:
        return 1
    else:
        return n * fact(n - 1)
num = int(input('Enter number: '))  # по-хорошему конечно надо еще проверять, что пользователь ввел число, а не буквы или пустую строку
print(fact(num))



Отредактировано GaiveR (Окт. 10, 2012 16:44:31)

Офлайн

#7 Окт. 10, 2012 19:25:27

Liberty
Зарегистрирован: 2012-10-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

GaiveR, точно, меня такая мысль не посетила. Но тогда сразу о проверке значений: что лучше для этого использовать? Задействовать обработчик исключений?

Офлайн

#8 Окт. 10, 2012 19:53:55

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

Да, через исключения будет хорошо.



Офлайн

#9 Окт. 11, 2012 10:09:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

GaiveR
def fact(n):
math.factorial()
а если свой делаешь, нужно его циклом делать, так как рекурсия ограничена, вызови fact(1000)



Офлайн

#10 Окт. 11, 2012 10:47:16

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

[Решено] Не отрабатывает return?

math.factorial()
а если свой делаешь, нужно его циклом делать, так как рекурсия ограничена, вызови fact(1000)
Согласен.

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version