Форум сайта python.su
py.user.next я под тест автора привел решение в котором данные в тестирующей системе подаются в таком виде и явно сказано нельзя пользоваться массивами и прочими динамическими структурами
kamikadze
Test 1
input:
1
2
3
0
Офлайн
py.user.next правильно говорит. Просто большинство рассуждает с точки зрения решения задачи при данных обстоятельствах и в данное время “лишь бы прокатило”, впрочем, как и я. В учебном плане на Курсере часто встречаются несостыкухи пройденного материала с содержанием заданий. Думается, что авторы курса часто забегают вперед, чтобы подстегнуть учащихся самостоятельно искать материал. Но для человека, плохо разбирающегося в архитектуре (мне кажется, этот термин здесь подходит), сложно представить эффективность существующих методов конкретного языка с точки зрения функциональности, прогнозирования (считывать данные за пределами функции и т.п.), легкости кода и т.д. До этого момента я все задания делал исключительно сам: искал недостающий материал в книгах и на профильных сайтах, в том числе по темам, которые еще не были пройдены. А по этому заданию информацию не смог найти. Мы проходили по большей части массивы, и то поверхностно. В процессе учебы я увидел, что все сложные и непонятные в настоящий момент методы, а также саму логику кода можно клепать не из сложных для понимания новичка элементов Питона (типа lambda… вместо стандартной def func()), а с помощью простейших структур, которые еще и позволяет более глубоко понять сам язык и не забыть пройденный материал. И в этом задании я попытался вывести сбор данных в массив в отдельную функцию, чтобы не трогать другую функцию, которая делала бы сам reverse. Как оказалось (py.user.next), я был на правильном пути. Так py.user.next рассуждает с точки зрения архитектора, что даже не в каждой книжке найдешь. А это дает более глубокое понимание учебного материала. Если бы в школе объясняли, где и как мы в будущем смогли бы применить получаемые знания, и для чего они нам нужны в жизни, то образованных людей было бы гораздо больше.
Офлайн
marvellikВвод данных бывает двух видов: по длине и по маркеру. Ввод по длине - это когда в начале пишут число элементов, а потом подают эти элементы. Ввод по маркеру - это когда данные идут сразу, но их окончание можно определить по какому-то признаку конца. В данном случае используется ввод по маркеру, где маркером является ноль. В чём минус маркерного ввода? В том, что ты уже ноль в последовательности не можешь использовать, он совпадёт с маркером. То есть подавать можно только натуральные числа, а целые числа ты уже не подашь, потому что в них есть ноль, вся последовательность может из одних нулей состоять.
я под тест автора привел решение в котором данные в тестирующей системе подаются в таком виде
<ввод данных><пребразование данных>
Офлайн
py.user.next спасибо за развернутый ответ. я полностью согласен с этим. но меня наверно сбило с толку ‘нельзя пользоваться массивами и прочими динамическими структурами’ я так понял что даже в качестве аргумента полученного из функции ввода нельзя их использовать но на сайте питонтьютор есть такая задача и решение разработчиков сайта выглядит именно так одной функцией
Решение разработчиков
def reverse(): x = int(input()) if x != 0: reverse() print(x) reverse()
Отредактировано marvellik (Янв. 12, 2018 10:22:11)
Офлайн
marvellikА в жизни, в реальных программах, надо быть готовым чистить ввод и прикреплять к нему всякие Ctrl+C и Ctrl+D, поэтому внутри вычисляющих функций не должно быть ни ввода, ни вывода. Функции, которые выполняют только вычисления, причём всегда одинаково для одних и тех же аргументов, называются чистыми функциями. Чем больше у тебя чистых функций, тем надёжнее код (его гораздо легче тестировать, он всегда полностью предсказуем) и тем реже его придётся менять сам по себе. Для ввода/вывода используются отдельные нечистые функции, в которых эти эффекты изолируются от остальной части программы. Таким образом ты можешь написать и функции чтения из консоли (разные виды чтения), и функции чтения из базы данных (разные виды чтения), и функции чтения из сетевого сокета (разные виды чтения). При этом преобразующие и вычисляющие функции имеют дело только со строго определёнными промежуточными структурами данных, которые не знают, откуда они были прочитаны и куда будут писаться.
но на сайте питонтьютор есть такая задача и решение разработчиков сайта выглядит именно так одной функцией
Отредактировано py.user.next (Янв. 12, 2018 11:04:45)
Офлайн
py.user.next
def reverse(n): if n != 0: reverse(int(input())) print(n) else: print(n) reverse(int(input()))
Отредактировано kamikadze (Янв. 14, 2018 11:30:58)
Офлайн