Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Задача "Разворот последовательности" без применения динамических структур данных [RSS Feed]

#1 Янв. 10, 2018 17:49:30

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

kamikadze
ключевое предложение в этом задании “Рекурсия вам поможет”

 def rev():
    x = int(input())
    if x != 0:
        rev()
    print(x)
rev()

Отредактировано marvellik (Янв. 10, 2018 17:52:40)

Офлайн

#2 Янв. 11, 2018 10:17:36

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

Измельчал народ… На такое простое задание 3 страницы исписали.

 >>> s = range(10)
>>> reduce(lambda x,y: (y,)+x, s, tuple())
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Янв. 11, 2018 10:25:28

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

Задача "Разворот последовательности" без применения динамических структур данных

Rodegast
На такое простое задание
Там же сказано “применить рекурсию” для решения. Чему учит задание? Учит делать рекурсию. Вот её и надо делать.

Rodegast
 reduce(lambda x,y: (y,)+x, s, tuple())
А слово tuple там зачем? Пустой кортеж - это ().



Офлайн

#4 Янв. 11, 2018 10:48:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

> Там же сказано “применить рекурсию” для решения

Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.

> А слово tuple там зачем? Пустой кортеж - это ().

Ну можешь считать что это я специально написал что-бы тебя потролить.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Янв. 11, 2018 11:43:20

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

Задача "Разворот последовательности" без применения динамических структур данных

Rodegast
Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.
Это курс на курсере. Там пытаются чему-то научить, чтобы человек вышел после курса и что-то знал и умел. Задания просто так для разминки или проверки интеллекта не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении. Вот они запретили делать это через списки, чтобы направить его на определённый метод решения. Ну не будет человек сам делать рекурсию, если через списки можно это решить.

А ты ему предлагаешь reduce(). А если нет reduce()? Он что, задание сделать не сможет какое-нибудь в будущем? А если выводить что-то надо? Где у тебя print() в reduce()? Вместо print() ты создаёшь новый массив, что занимает память. И у него там есть один тестик, который подаёт большой массив, а потом следит, чтобы памяти для второго массива такого же размера просто не хватило. Вот я больше чем уверен, что твой код даже там не пройдёт по памяти.

А marvellik вообще считывает рекурсивно.
marvellik
  
def rev():
    x = int(input())
    if x != 0:
        rev()
    print(x)
rev()
А что будет делать marvellik, если массив придёт не из консоли, а по сети, из сокета? marvellik будет менять код функции, которую надо было один раз написать и больше никогда не трогать. А из консоли они придут или по сети - за это должна отвечать вообще отдельная функция, потому что этих массивов из разных мест может быть десяток. Всё никак не дойдёт до него, что код надо разделять по функциям, иначе потом по каждому чиху надо будет всю эту мешанину менять. Хорошо, когда там пять строчек, а будет там сто строчек? Это всё будет только время занимать постоянно.



Отредактировано py.user.next (Янв. 11, 2018 11:52:38)

Офлайн

#6 Янв. 11, 2018 13:42:59

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

> Задания просто так для разминки … не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении.

А с какой целью человек создал эту тему? Я так думаю не для того что-бы ты за него задание решил, а для того что-бы узнать свои ошибки и другие способы решения данной задачи. В таком случае вариант со свёрткой вполне уместен.

> А если нет reduce()?

Вот только передёргивать не надо

> Вот я больше чем уверен, что твой код даже там не пройдёт по памяти.

Рекурсия отъедает больше памяти чем свёртка.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Янв. 11, 2018 14:12:17

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

Задача "Разворот последовательности" без применения динамических структур данных

Rodegast
Вот только передёргивать не надо
Рекурсию он может применить в любом языке, тогда как reduce() запросто может не быть там (Visual Basic, Shell). То есть рекурсия - это общее понятие, не привязанное к языку. Если человек её не умеет, то должен будет учиться её делать в любом случае. Поэтому её и дают в таких курсах, хоть она и не должна использоваться в питоне.

Rodegast
А с какой целью человек создал эту тему?
Для него оказалось сложным даже прохождение этого простого курса для новичков. Сам бы он хрен догадался бы, как это задание сделать. Видишь, они там с marvellik'ом даже читают с консоли рекурсивно, потому что не понимают, как эта система на сайте работает. А тесты там не такие информативные и в них не написано, что ввод из консоли не проверяется. Бывают и поинформативнее системы, где каждый тест показывает, что проверяет, и можно догадаться, где код править нужно.

Rodegast
Рекурсия отъедает больше памяти чем свёртка.
Я решал довольно сложные рекурсивные задачи (типа поиска скоплений точек на плоскости). Свёртка там бы не помогла, только запутала бы всё. Ну вот где твой вариант без построения кортежа через reduce(), чтобы там print() сразу срабатывала для каждого числа? Явно ведь такой вариант будет ни к селу ни к городу, reduce() обязательно должна что-то возвращать.



Офлайн

#8 Янв. 11, 2018 14:22:17

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

А разве у нас халивар “Рекурсия против свёртки”? Я вот например считаю что каждый программист должен уметь пользоваться обоими инструментами. И что ты к marvellik-у привязался? Его решение вполне соответствует уровню этого задания.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Янв. 11, 2018 14:47:04

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

Задача "Разворот последовательности" без применения динамических структур данных

Rodegast
И что ты к marvellik-у привязался?
Я там выше написал, что он вплёл ввод из консоли в саму функцию, чего делать нельзя. Стоит чуть-чуть поменять формат ввода из консоли (подавать числа, например, не на разных строках, а в одной строке), ему придётся писать абсолютно новую функцию, потому что из-за такой мелочи ломается вообще всё. При этом ввод вообще не участвует в задании. Задание заключается в том, чтобы правильно обработать уже введённое.



Отредактировано py.user.next (Янв. 11, 2018 14:47:53)

Офлайн

#10 Янв. 11, 2018 15:00:35

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача "Разворот последовательности" без применения динамических структур данных

> Стоит чуть-чуть поменять формат ввода из консоли

В данном случае что-то в консоли 100% не поменяется. Ибо функция эта одноразовая её 1 раз сдадут и забудут.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

  • Начало
  • » Центр помощи
  • » Задача "Разворот последовательности" без применения динамических структур данных[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version