Форум сайта python.su
kamikadze
ключевое предложение в этом задании “Рекурсия вам поможет”
def rev(): x = int(input()) if x != 0: rev() print(x) rev()
Отредактировано marvellik (Янв. 10, 2018 17:52:40)
Офлайн
Измельчал народ… На такое простое задание 3 страницы исписали.
>>> s = range(10) >>> reduce(lambda x,y: (y,)+x, s, tuple()) (9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
Офлайн
RodegastТам же сказано “применить рекурсию” для решения. Чему учит задание? Учит делать рекурсию. Вот её и надо делать.
На такое простое задание
RodegastА слово tuple там зачем? Пустой кортеж - это ().reduce(lambda x,y: (y,)+x, s, tuple())
Офлайн
> Там же сказано “применить рекурсию” для решения
Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.
> А слово tuple там зачем? Пустой кортеж - это ().
Ну можешь считать что это я специально написал что-бы тебя потролить.
Офлайн
RodegastЭто курс на курсере. Там пытаются чему-то научить, чтобы человек вышел после курса и что-то знал и умел. Задания просто так для разминки или проверки интеллекта не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении. Вот они запретили делать это через списки, чтобы направить его на определённый метод решения. Ну не будет человек сам делать рекурсию, если через списки можно это решить.
Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.
marvellikА что будет делать marvellik, если массив придёт не из консоли, а по сети, из сокета? marvellik будет менять код функции, которую надо было один раз написать и больше никогда не трогать. А из консоли они придут или по сети - за это должна отвечать вообще отдельная функция, потому что этих массивов из разных мест может быть десяток. Всё никак не дойдёт до него, что код надо разделять по функциям, иначе потом по каждому чиху надо будет всю эту мешанину менять. Хорошо, когда там пять строчек, а будет там сто строчек? Это всё будет только время занимать постоянно.def rev(): x = int(input()) if x != 0: rev() print(x) rev()
Отредактировано py.user.next (Янв. 11, 2018 11:52:38)
Офлайн
> Задания просто так для разминки … не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении.
А с какой целью человек создал эту тему? Я так думаю не для того что-бы ты за него задание решил, а для того что-бы узнать свои ошибки и другие способы решения данной задачи. В таком случае вариант со свёрткой вполне уместен.
> А если нет reduce()?
Вот только передёргивать не надо
> Вот я больше чем уверен, что твой код даже там не пройдёт по памяти.
Рекурсия отъедает больше памяти чем свёртка.
Офлайн
RodegastРекурсию он может применить в любом языке, тогда как reduce() запросто может не быть там (Visual Basic, Shell). То есть рекурсия - это общее понятие, не привязанное к языку. Если человек её не умеет, то должен будет учиться её делать в любом случае. Поэтому её и дают в таких курсах, хоть она и не должна использоваться в питоне.
Вот только передёргивать не надо
RodegastДля него оказалось сложным даже прохождение этого простого курса для новичков. Сам бы он хрен догадался бы, как это задание сделать. Видишь, они там с marvellik'ом даже читают с консоли рекурсивно, потому что не понимают, как эта система на сайте работает. А тесты там не такие информативные и в них не написано, что ввод из консоли не проверяется. Бывают и поинформативнее системы, где каждый тест показывает, что проверяет, и можно догадаться, где код править нужно.
А с какой целью человек создал эту тему?
RodegastЯ решал довольно сложные рекурсивные задачи (типа поиска скоплений точек на плоскости). Свёртка там бы не помогла, только запутала бы всё. Ну вот где твой вариант без построения кортежа через reduce(), чтобы там print() сразу срабатывала для каждого числа? Явно ведь такой вариант будет ни к селу ни к городу, reduce() обязательно должна что-то возвращать.
Рекурсия отъедает больше памяти чем свёртка.
Офлайн
А разве у нас халивар “Рекурсия против свёртки”? Я вот например считаю что каждый программист должен уметь пользоваться обоими инструментами. И что ты к marvellik-у привязался? Его решение вполне соответствует уровню этого задания.
Офлайн
RodegastЯ там выше написал, что он вплёл ввод из консоли в саму функцию, чего делать нельзя. Стоит чуть-чуть поменять формат ввода из консоли (подавать числа, например, не на разных строках, а в одной строке), ему придётся писать абсолютно новую функцию, потому что из-за такой мелочи ломается вообще всё. При этом ввод вообще не участвует в задании. Задание заключается в том, чтобы правильно обработать уже введённое.
И что ты к marvellik-у привязался?
Отредактировано py.user.next (Янв. 11, 2018 14:47:53)
Офлайн
> Стоит чуть-чуть поменять формат ввода из консоли
В данном случае что-то в консоли 100% не поменяется. Ибо функция эта одноразовая её 1 раз сдадут и забудут.
Офлайн