Форум сайта python.su
0
Буквально вчера началось моё погружение в 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)
Офлайн
5
>>>print(fact(-2))
Офлайн
0
Спасибо, работает:
[def fact(n): if n == 0 or n < 0: print (1) else: x = (n-1)*n print(x) fact(6)
def func(): # Функция проверяет верно ли введенное число x=input("В каком году проходит олимпиада в Сочи? ") x=int(x) if x < 2014 or x > 2014: print("Нет, вы не правы") else: x=str(x) print("Да, олимпиада проходила в " + x + " году!") func()
Офлайн
20
Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.
def pi():
return 3.14
piNumber = pi()
print(piNumber)
Офлайн
0
SotericБлагодарю. Теперь в голове стало светлее )
Просто shell выводит на экран результат последней выполненной функции. В приложении это необходимо делать вручную.
Офлайн
16
И как можно изменить функцию, чтобы дать пользователю возможность вводить свои данные, в частности задавать значение переменной 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)
Офлайн
0
GaiveR, точно, меня такая мысль не посетила. Но тогда сразу о проверке значений: что лучше для этого использовать? Задействовать обработчик исключений?
Офлайн
20
Да, через исключения будет хорошо.
Офлайн
857
GaiveRmath.factorial()def fact(n):
Офлайн
16
math.factorial()Согласен.
а если свой делаешь, нужно его циклом делать, так как рекурсия ограничена, вызови fact(1000)
И как можно изменить функцию, чтобы дать пользователю возможность вводить свои данные, в частности задавать значение переменной n?а не попытка написать свою функцию вычисления факториала :)
Офлайн