Step 2 (S-100214)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/24464/step/2

Step 2 (S-100214) 1.png

[00:00 - 00:18] сначала пишем самый простой объект литератора наш объект каждый раз когда он изображает следующий элемент быть совершено случайное число из диапазона от 0 до единицы давайте для начала пишем пустой класс random и трейдер мы ожидаем от экземпляров этого класса что нибудь от нибудь знать вызвать функцию next и она будет возвращать


[00:18 - 00:35] случайное число из диапазона 0 1 пока что если мы в данный момент запустил функцию мы увидим тащит она говорит что экземпляр нашего класса равным и - это на самом деле не является итератором того чтобы экземпляр нашего класса стала театром необходимо внутри нашего класса определить метод next


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


[00:51 - 01:07] то есть на самом деле когда мы вызываем функцию next от какого то объекта икс это эквивалентно записи вызвать метод но ниже подчеркивание подчеркивание от самого объекта икс то есть таким образом мы считаем что икс является литератором


[01:07 - 01:27] тогда когда у него есть данный метод next теперь давайте определим нужно на функциональность мы хотим чтобы вместо на равно совершал случайное значение из диапазона 0 1 будем использовать функцию random из библиотеки равным давайте сделаем фромм рандом


[01:27 - 01:46] и здесь мы будем возвращать сопсна значение функции равным 3 увидимся в том что при запуска на будем получать различные значения случайно из диапазона 0 1 давайте обратим внимание на то что в данный момент там литератор будет генерировать бесконечно последовательность


[01:46 - 02:00] потому что мы не определили у него поведения когда он должен бросать ошибку стать потерпевшим давайте напишем конструкторы нашего класса наш конструктор будет принимать 1 дополнительный аргумент это будет число к это будет именно


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


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


[02:35 - 02:52] это мы также должны запомнить что мы вывели то есть увеличить счетчик на 1 в том случае если я наши же равен числу элементов которые мы планировали перечислить с помощью нашего театра то мы должны бросить ошибку 100 протираем


[02:52 - 03:08] данный код успешно запустить сначала должны передать число как конструктор пускай мы хотим вывести 3 случайного числа затем давайте выведем 3 случайных часа с помощью используя наш итератор о чем в другой вывести 4 чтобы 900 в том что произойдет ошибка 100 потеряешь


[03:08 - 03:27] когда вы на шкаф запустим убедимся в том что мы действительно сначала в или ты случайного числа из диапазона 0 1 а затем произошла ошибка статусе ration хорошо мы написали итераторы которое перечисляет случайно элемента до тех пор пока не выпадет нужная нам число элементов а так мы можем ему теперь сразу его использовать в цикле for


[03:27 - 03:42] для того чтобы мы могли использовать наш литератор в цикле for мы должны уметь вызывать функцию от нашего объекта икс если мы правильно исполнить данный код то мы опять же видим т р который говорит нам что экземпляр класса автор не является и - и был


[03:42 - 04:00] то есть он является счастливым и мы не можем перечислить в алименты с помощью цикла for чтобы мы могли вызвать функцию и от нашего объекта икс то есть чтобы мы могли посчитать что по нашему объекту можно итерироваться мы решаем проблему подобным образом так и с методом next мы на самом деле


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


Step 2 (S-100214) 2.png

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


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


Step 2 (S-100214) 3.png

Step 2 (S-100214) 4.png

[04:51 - 05:08] метод который возвращает нам итераторов а для того чтобы объект убрался итератором у него должен быть определенный метод next давайте попробуем определить а как ее сверкает и те для кого нибудь нашего собственного класса давайте попробуем написать класс my list for место таким образом


[05:08 - 05:27] чтобы каждый раз когда мы итерировались по объекту класса мои сны перебирали элементы парами прежде всего стоит отметить что умер держа определен в нашем классе list поэтому если бы мы использовали наследования но при этом не ответили начнет и тяжелее самого самолета допустим пас


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


Step 2 (S-100214) 5.png

[05:45 - 06:01] который бы разрешал нам литератор который вел себя нужным вам образом 2 часа опишем класс итераторы которое понимает а список элементы которого мы хотим перебирать пальцами в конструктор давайте сделаем в нашем театре примерно тоже самое что написали и до этого


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


[06:19 - 06:34] 2 элемента из нашего списка целиком а если все таки больше или равно то давайте бросим ошибку стать потерпевшим осталось лишь убедиться в том что то что мы написали в действительности работает в паре элементов


[06:34 - 06:53] экземпляре объекта мои список 1 2 3 4 когда мы увидим на экран пары объединяются в том что мы перебираем объект изнашивались ставили на парами она культиватора которые вы написали еще или недостаток если передать в конструктор мои лист


[06:53 - 07:12] нечетные числа элементов наши театр сломается когда пытается вывести последнюю пару дайте просто забавен ведет только не с нашего списка попробуем запустить данный код увидимся в том что когда он сформирует 1 для пары и начнет попытку сформировать 3 пару мы получим индекс да в том что последний элемент нашего списка кажется здесь а как следствие


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


[07:31 - 07:35] если мы перебираем днем элементы с помощью цикла for