По какой то причине у меня возникли проблемы с освоением циклов.
То ли я устал от интенсивного обучения, то ли циклы для меня сложная тема. Ну и я решил убить сразу двух зайцев, отдохнуть денек от учебы а на следующий день перечитать всю информацию по циклам и прорешать трудные для себя задачи, вот что из этого вышло.
Отдых.
Отдых у меня был не моржовый, что я имею ввиду? Я не валялся на шезлонге и не проводил время в YouTube, а принял к сведенью тезис о том, что "Отдых это смена деятельности" и решил разобраться со средой разработки. С начала обучения я принял решение писать код в сразу именно в ней, т. к, это на мой взгляд вполне логично и удобно, если собираешься как т реализоваться в данной сфере. Хотя читая комментарии к урокам курса, кто то пишет код через телефон, дело каждого, как говориться.
Вернемся к среде разработки. Мой выбор пал на PyCharm от компании JetBrains, когда я пытался разобраться в Java( напомню, что я там не особо далеко продвинулся) я работал в Intelij Idea, показалось достаточно удобно и поэтому не задумываясь выбрал ту же компанию.
Ну так вот, полазил я по среде, почитал о ней и настроил выгрузку в GitHub. Так прошел мой отдых от изучения программирования, хотя все таки на мой взгляд изучение инструмента это часть изучения программирования.
Цикл For.
Как я уже говорил в прошлой статье у меня были проблемы с обработкой информации в теле цикла. Вопрос не решен окончательно конечно, но мне удалось разобраться в решении задачи с двумя перчиками (Это максимальный уровень сложности задачи на курсе обучения), без каких либо подсказок и гугла. В общей сложности я потратил на решение весь день.
Вот условие:
На вход программе подается натуральное число n, а затем n различных натуральных чисел, каждое на отдельной строке. Напишите программу, которая выводит наибольшее и второе наибольшее число последовательности.
Формат входных данных
На вход программе подаются натуральное число n≥2, а затем n различных натуральных чисел, каждое на отдельной строке.
Формат выходных данных
Программа должна вывести два наибольших числа, каждое на отдельной строке.
Код своего решения я не буду публиковать, что бы не лишать других возможности решить самим эту задачу. Распишу лишь ход мыслей при ее решении.
Итак: естественно первое что надо сделать это объявить переменную, которая будет принимать количество итераций цикла, тут проблем никаких. После нее я создал переменную счетчик которая будет принимать первое максимальное число.
Далее создаем цикл в который вкладываем уже созданную переменную и первым делом в теле цикла мы объявляем еще одну целочисленную переменную с вводимыми числами из которых мы и будем выбирать два максимальных числа. Задача так же осложняется тем что мы не можем использовать функцию max т.к на этом этапе курса мы еще про нее не знаем.
Создаем условие которое должно прогнать все числа и сравнить их друг с другом и как только находится максимальное число оно сохраняется в нашу переменную счетчик. И тут я столкнулся с делемой над которой бился весь день, как мне вычислить второе большее?
Конечно же первым делом я создал второй счетчик т.к одним обойтись врятли бы получилось. Долго думая я понял что нужно еще раз почитать теорию по работе циклов но так особо ни к чему и не пришел.
И почему то мне вспомнилось каскадное переприсваивание значений переменных. Идея была в том, что первое значение попавшее в счетчик тут же переприсваивалось второму счетчику и обнуляла первый, который мог принять самое большое число. НО дело в том что это работает если наибольшее число идет после второго наибольшего. Поэтому моя программа провалила один из тестов.
Я продолжил думать и мне пришло озарение, что я же могу повторить переприсваивание еще раз с новым условием в котором мне нужно будет сравнить два счетчика. И вот оно решение от которого я пребывал в шоке весь оставшийся день.
Итог который я для себя вынес из этого такой.
- Я принял решение никогда не смотреть подсказки в комментариях. Т.к они позволяют только лишь пробежать вперед но не освоить тему.
- Я понял, что нужно отдыхать, что учеба это марафон а не спринт, если у тебя что то не получается или ты не можешь в чем то разобраться, то надо немного абстрагироваться (это не всегда конечно же, тут надо понимать свой организм. На время этого ступора я занимался 19 дней подряд в любую свободную минуту)
- Я понял, что когда ты вот так втыкаешься в задачу которую не понимаешь именно это тебя учит. А не когда ты прочитал тему пробежался по легким задачам и что не получилось то как бы потом как нибудь решу. От решения этой сложной для меня задачи я получил реальный опыт и мотивацию двигаться дальше. Ну а так же я вник в алгоритм работы я делал это не на обум, а осмысленно понимая, что будет происходить в теле цикла, если я добавлю эти переменные.
- И самое главное на мой взгляд, это то что слона надо есть по частям. Я сначала нашел только самое большое число и только потом начал думать как мне найти второе по величине. Теперь я разбиваю глобальную задачу на подзадачи и если надо и подзадачи можно разбить на меньшие задачи.
Вот такой увлекательный для меня процесс обучение программированию. Спасибо за внимание, Ставьте палец вверх и пишите, что думаете о статье, мне кажется я слишком затянул и задетализировал решение. Как считаете?
#it #технологии #программирование #изучение программирования #python #питон #учусь программированию #