Step 1 (S-38588)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/13023/step/1

Step 1 (S-38588) 1.png

[00:00 - 00:16] привет сегодня как и обещал мы изучаем циклы начнем излучения циклу пока что такой должен понятно в реальной жизни тоже была таки стараться например вам срочно потребуется на лету и кроссовки для вечеринки и


Step 1 (S-38588) 2.png

[00:16 - 00:33] как написать ваши действия пока не нашел фиолетовые кроссовки иди в следующий магазин как только найдешь их нужно покупать это пишется после цикла давайте сразу посмотрим например путь у нас есть задача сосчитать до 100 вывести все числа


[00:33 - 00:50] вам понадобится счетчик специально переменная которое назовем и а че на равна единице пока по английски while in точно так же как вы пишете условиях кругу скобках пока


Step 1 (S-38588) 3.png

[00:50 - 01:04] счетчик меньше либо равен 100 фигурной скобки и те действия которые будут происходить внутри что мы хотим делать напечатать еще 1 число увеличить его на единичку


[01:04 - 01:20] запускаемся и все числа на слиплись в 1 большую колбасу мы забыли поставить пробел поставил после каждого числа будет печатать пробел


Step 1 (S-38588) 4.png

[01:20 - 01:35] отлично вот у нас все числа до 100 что здесь есть интересно счетчик что мы начинаем считать условия до какого момента мы считаем и что происходит на каждом шаге цикла


Step 1 (S-38588) 5.png

[01:35 - 01:53] печатаем число и увеличила на единичку посмотрим на более сложном примере допустим у нас собралась компания и они поняли что им нужно купить пиццу чтоб не платить за доставку надо послать пиццерии чтобы он принес оттуда кого послать самого младшего как будет формулироваться наша задача


Step 1 (S-38588) 6.png

[01:53 - 02:09] нас есть последовательность чисел от возраста людей и нам нужно сказать какой минимальный возраст владеет всей этой компании через вас будут вводиться последовательных конце последовательность будет 0 это наша компания кончилось и больше никого нет может ли человек решить эту задачу


[02:09 - 02:29] да можем как он это делает там помнит какое наименьшее число уже называли в последовательности и если новое число оказывается меньше чем то что он помнит то вместо того меня запоминает новое число и в конце когда последовательно заканчиваются говорит то что он запомнил именно так мы напишем нашей программе


[02:29 - 02:45] нам потребуется то что мы помним минимальное число и то что нам звонят то число которое назвать пока нам не назвали 0


Step 1 (S-38588) 7.png

[02:45 - 03:00] что нам делать если очередной число оказалось меньше минимального будем запоминать место минимального число наше новое


[03:00 - 03:17] то есть ребята из компании сидят называются возраста если кто то назвал меньше возраста чем то что было раньше мы запоминаем его после этого нужно попросить назвать возраст следующему человека из компании попробуй запустить наш программ


Step 1 (S-38588) 8.png

[03:17 - 03:32] не собралась использован не инициализирована локальная переменная знал что это означает мы забыли спросить возрасту самого 1 человека это нужно сделать до цикла


Step 1 (S-38588) 9.png

Step 1 (S-38588) 10.png

[03:32 - 03:48] попробуем еще раз опять не заработала использован не инициализирована локальной переменной mean что означает это означает что мы не знаем с чем сравнивал в самом начале когда мы назвали 1 возраста как человека называют минимум


Step 1 (S-38588) 11.png

Step 1 (S-38588) 12.png

[03:48 - 04:06] среди 1 числа про само это число то есть можно в переменную мин положить значение возраста 1 человек которого мы считали отдельно проверим пусть 1 человеку нас 15 лет 2 16 3 17 и к то есть предел всему детям младшего братишку


Step 1 (S-38588) 13.png

Step 1 (S-38588) 14.png

[04:06 - 04:23] в конце 0 это значит что последовательность кончилась ничего не выкупилось почему потому что мы ничего не выйдет наша программа делает ровно то что мы написали где нужно вводить ответ после того как мы обработали всех людей то есть


Step 1 (S-38588) 15.png

[04:23 - 04:39] после цикла while ответ в нас хранит в переменным 15 16 17 летний братишка вот он и пойдет за пиццей


Step 1 (S-38588) 16.png

Step 1 (S-38588) 17.png

[04:39 - 04:54] посмотрим еще 1 задачу которая также решают с помощью использовании цикламена кому идти забиться компания выбрал остался вопрос хватит ли у них денег каждый говорит сколько него есть денег нам нужно посчитать сколько денег у них есть в сумме


Step 1 (S-38588) 18.png

[04:54 - 05:13] последовательность также оканчивается 0 то есть деньги у всех есть то что кто то говорит меня нет денег значит люди кончились как решить эту задачу опять же человек у себя в голове это даже можешь совершить очень легко каждый раз когда я буду сдавать очередной число он суммировать его с тем что уже полнит начале он помнит 0


[05:13 - 05:29] он прибавляет его ровно это мы напишем в программе нам потребуется примерно для хранения сумма начале равно 0 и то что назвал очередной человек опять же 1 человека


Step 1 (S-38588) 19.png

Step 1 (S-38588) 20.png

[05:29 - 05:43] мы считываем 1 чтобы было с чем сравнить пока кто что сказал очередной шлак не равно 0 прибавляются к сумме то что он сказал


[05:43 - 05:59] слушай а что там говорить следующий человек этот раз не будем забывать вывести ответ сумму запускаемся пусть 1 человек сказал что у него есть 50 р


Step 1 (S-38588) 21.png

[05:59 - 06:17] 2 сказал что нибудь 150 р а 30 человек нас щедро конечно на 500 р это вроде кончаются в девятилетнему братишки денег нет все получила 700 р задача поиск минимум максимум и сумма последовательность очень часто встречается в жизни


[06:17 - 06:32] например вы купили в автобусе и хотите посмотреть числе и он или нет как проверяется счастливый билетик нужно взять 1 половину номеру сложить цифры в ней и 2 половину номер и сложить цифры в ней если суммы совпали знаешь счастливая возможность есть


Step 1 (S-38588) 22.png

[06:32 - 06:47] как будем решать эту задачу зайдем 2 переменные для 1 половины номера и для 2 половины номер от и будем считать них сумму цифр как это делается на прошлом занятии вы научитесь узнавать последнюю цифру числа


Step 1 (S-38588) 23.png

[06:47 - 07:02] и при а последнее цифру числа для этого достаточно было посчитать остатка от деления на 10 а на предпоследний цифры сначала разделить число надеюсь то есть отбрось последнюю цифру и потом снова взять остаток таким образом мы узнаем привет последнее цифру числа


[07:02 - 07:17] если повторять эти действия до тех пор пока не кончатся то нас получится перебор всех цифру числа начиная с единиц затем десятки сотни и так далее именно такую идею мы реализуем нашим решений


Step 1 (S-38588) 24.png

[07:17 - 07:35] пока число не равно 0 если число стал равно 0 значит оно кончилось и цифра мы рассмотрели а понадобится также перемена для хранения суммы давайте создадим и заранее положим в них нули


[07:35 - 07:49] пока число не кончилась к сумме прибавляете очередную цифру последнее а из самого числа


[07:49 - 08:07] это очередной цифру проделать то же самое для 2 половинки нет называется копипаста скопировали и вставили и заменили циферки 11 раз и 2


Step 1 (S-38588) 25.png

Step 1 (S-38588) 26.png

[08:07 - 08:22] и наконец после этого можно сравнить между собой сумму если сумма 1 равно


[08:22 - 08:39] говорим что у нас был счастливый билетик иди мимо ну есть программа не будет а иначе говорим что билетик был несчастный


Step 1 (S-38588) 27.png

Step 1 (S-38588) 28.png

[08:39 - 08:58] или сам грустный смайлик проверим пусть 1 3 цифры не важно сколько и в 1 половине состоящий из 3 цифр это 123 а 2 312


Step 1 (S-38588) 29.png

[08:58 - 09:17] я стал брать не там если у вас тоже случайно получилась такая история можно еще раз щелкнуть убрать его и поставить там где нужно снова нажать f 5 а билетик несчастный хотя должен быть счастливым давайте разберемся в чем же проблема


Step 1 (S-38588) 30.png

Step 1 (S-38588) 31.png

Step 1 (S-38588) 32.png

[09:17 - 09:34] наша копипаста создала проблемы я поменял единичны но не везде дома у вас будут такие же проблемы от связано с тем что копипаста плохой стиль программирования


[09:34 - 09:52] по другому не умеем потом научимся еще 1 заход ура теперь заработало давайте проверим что когда не надо но не работает например цифр 1 2 3 5 6 7 да билетик не счастливый


Step 1 (S-38588) 33.png

Step 1 (S-38588) 34.png

[09:52 - 10:07] постепенно наша программа становится больше и сложнее например в этой программе уже 23 строки вы нашли ошибку быстро по счастливой случайности обычно так не бывает поэтому нам нужно учиться метод который позволяет эффективно искать ошибки это отладка


Step 1 (S-38588) 35.png

[10:07 - 10:23] вообще говоря мы уже умеем ей пользоваться например вот эта штука называется проект point точка остановки можно поставить вы не только в конце ну и где угодно в программе например начиная с интересно часть поставь его на нашем 1 ссыкливое


Step 1 (S-38588) 36.png

Step 1 (S-38588) 37.png

Step 1 (S-38588) 38.png

[10:23 - 10:41] ведь он какие нибудь числа половинки номер билетика и посмотрим нас появилась желтая стрелочка то означает что мы находимся сейчас вот здесь в этой строке это строка еще не выполнилось все до нее уже выполнил если мы введем курсор на название как от переменной то увидим ее


Step 1 (S-38588) 39.png

[10:41 - 10:56] текущее значение чтобы сделать 1 шаг то есть перейти к следующей строке можно зайти в меню отладкой выбрать шаг заходим или шаг с обход покажет вам все равно какой из них отбирать


Step 1 (S-38588) 40.png

[10:56 - 11:14] выбираем любой они соответственно 1 целых 10 итак выполняем по шагам смотрим значение сумма стала равна 3 это последняя цифра нашего числа дальше


Step 1 (S-38588) 41.png

Step 1 (S-38588) 42.png

[11:14 - 11:33] эта цифра признает стороны успешно мы можем продолжать смотреть как меняется наша сумма и постепенно пропадает цифры числа в какой то момент они кончаются и мы переходим к следующему цену чтобы продолжить выполнение программы то следующем фрагменте нужно еще раз нажать f 5 или зеленую стрелочку


Step 1 (S-38588) 43.png

[11:33 - 11:48] смотрим и действительно все работы с помощью этого метода можно найти то место где то что вы задумали не соответствует тому что делает ваша программа исправить ошибку в программе сейчас мы посмотрим 1 прикольную штуку который называется вечный цикл если вы работали в давосе как лет


[11:48 - 12:06] 30 назад то можно было бы намертво повесить компьютер сейчас к сожалению можно просто нажать крестик все делается очень просто возьмем нашу задачу самую 1 pro вывод всех чисел от 1 до 100 а помню там была 1 переменная начале равно единицы


Step 1 (S-38588) 44.png

[12:06 - 12:21] и мы писали что пока число меньше либо равно 100 выводить очередной значение вот оно и допустим мы забыли прибавлять единицу каждый раз допустим


[12:21 - 12:37] вау вот такой наш вечный цикл который печатать кучу единичек это будет продолжаться бесконечно понятно делать того что никогда у нас наша единичка не станет


Step 1 (S-38588) 45.png

[12:37 - 12:53] больше 100 а что дальше делать макушку закрываете у крестиком не очень хорошо что не может заглючить поэтому лучше вернуться сюда и в разделе отладка надо нажать остановить отладку shift f 5 тогда программа прервется


Step 1 (S-38588) 46.png

Step 1 (S-38588) 47.png

[12:53 - 13:10] иногда вечной цикла можно использовать с пользой давайте упростим его сделаем while 1 как мы знаем из прошлых вредных советов 1 это истина то есть пока истины мы выполнять вечный цикл в чистом виде на каждом шаге все таки будем увеличивать счетчик на единицу


Step 1 (S-38588) 48.png

[13:10 - 13:25] и если счетчик стал больше 100 выполним команду break прервать она включает выполнение цикла досрочно так скажем


[13:25 - 13:44] действительно работает но дело так они ж не нужно так как мы написали в начале программы было лучше но в некоторых ситуациях это имеет смысл например вы хоть он 1 в поисках кроссовок закончить этот магазин


Step 1 (S-38588) 49.png

Step 1 (S-38588) 50.png

[13:44 - 14:02] и понимаете что вы уже провели 13 часов в походе и хотите домой и вы пишете о том что пока не нашли фиолетовые кроссовки ходим по магазинам но если на очередном шаге время превысил 12 часов пойдем домой пишем проект


[14:02 - 14:18] существует еще 1 оператор правления работы цикла он зайца continue продолжить когда мы доходим до его выполнения цикла начинается заново то есть проверка условия все что идет после него в теле цикла не выполнять наша задача про покупку фиолетовый кроссовок это может выглядеть так


[14:18 - 14:36] мы приходим в магазин если не там или нет и так пока не найдем но если магазине очень 100 человек то мы сразу идем следующей не узнала есть они там или нет а пешим решение такой задачи пусть нам дана последовательность оканчивается 0


Step 1 (S-38588) 51.png

[14:36 - 14:54] необходимо вывести все положительные числа которые встречались как это будет выглядеть примерно для очередного число начале не положим что нибудь что нибудь печатать - единицы пока наша очередная число не равно 0


Step 1 (S-38588) 52.png

[14:54 - 15:10] делаем следующее есть что то новое значение если оно меньше либо равно 0 делаем континью то есть приходим снова проверка условия


[15:10 - 15:25] то что после этого if будет выполняться только если начали на число было больше 0 можно печатать прямо внутри цикла запускаем


[15:25 - 15:43] отлично работает конечно злоупотреблять break continue не стоит того что они ухудшают читаемость он в частности наш программ можно написать гораздо проще если число больше 0


Step 1 (S-38588) 53.png

Step 1 (S-38588) 54.png

[15:43 - 15:59] то печатаем дела и каких кантине проверим


Step 1 (S-38588) 55.png

[15:59 - 16:12] отлично на этом на сегодня все вас сегодня опять сложные практические задачи он что следующее занятие будет проще так что старайтесь и все будет хорошо пока


Step 1 (S-38588) 56.png