Добрий вечір Добрий вечір пані топанова Добрий вечір Добрий вечір добрий вечр так за декілька хвилин ми з вами розпочнемо якщо у когось є питання будь ласка задавайте Єгор я щось провтикав твою руку будь ласка задавай питання А ви можете зараз подивитися повідомлення яке Вам відправляв ухилі будь ласка Так одну секунду Зараз так Ага бачу зараз прочитаю секунду ну Єгор в цілому я тобі так скажу в принципі Ти спокійно можеш Ну спробувати зробити ще додаткові обмеження як ти мені написав Ну тобто щось там додати ще Да я так зрозумів ти мав на увазі саме ще обмеження по довжині в принципі це задачу вирішить Ну в принципі але ще раз диви проблема в тому що я поки що пораджу вам на даній стадії от навчання розкладати своє рішення на частини тобто не намагатися скоротити до одного рядка да Це трошки менше коду виходить це круто виглядає але ну як сказати це вас зараз заплутує бо такий код сприймається і читається для вас складніше ято розумію що ти там написав І в чому саме у тебе проблема м Давай так проблема у тебе в тому що твій алгоритм от в тому рядку кода Який в тебе один єдиний він робить подвійну копію одного і того самого елементу м якого от Давай я продемонструю зараз намалюю так буде простіше Дивіться це до речі проблема стосується всіх так стоп е а що в мене таке що в мене така погана трансляція ви зараз коли я транслюю екран бачите по боках екрана ще чорні Такі полоси здорові чи ні ні ні у мене просто видно мій екран і більше ніяких там полос по боках немає да так так все супер значить це знов щось оновилося і якісь додаткові речі мені показує Ну ладно так р будь ласка Ну тільки невелики зверху Та знизу та або але вони не заважають Ага супер Ну знизу та згори мені не показує що в мене є я просто дивлюсь у мене є тут типа як сказати відображення моєї трансляції і в мене щось тут збоку чорні полоси на цьому відображенні я подумав що і вам це видно так тож бо давайте трохи малювати малюємо так ще раз повторюю стосується всіх раджу всім уважно подивитись що мається на увазі дивіться ця проблема була не тільки в тебе Єгор А ще у декількох людей причому це одна і та ж сама проблема наприклад У нас є рядок в якому два символи це питання стосується останнього ДЗ другого рівня тобто задача другого рівня наприклад там є обмеження за довжиною в 10 символів Окей це нормально а є наприклад ще момент коли там же ж не сказано ну найнижч обмеження що там один символ або два символи їх немає просто і от всі хто вирішує задачу певним чином От так наприклад як у тебе Єгор як там ще У декількох людей якщо ставиш два символа в рядку наприклад дві літери то ваш алгоритм по у відповіді дві літери L і одну літеру О це є помилка помилка в тому що при зрізі коли ваш алгоритм саме виконує зріз у вас виконується зріз спочатку з оцього елемента до оцього включно ну тіпа так середина знаходиться середина точніше а потім ще і оцей елемент зрізається як друга половина один тобто у вас спочатку зрізається два елемента і це є права половина а потім ще зрізається один елемент це є ліва і от звідси з'являється додаткова копія ще одного елемента для вирішення цієї проблеми є кілька шляхів або ну просто зробити обмеження за довжиною додаткові наприклад окрім десятьх Я маю на увазі або поправити зрізи тобто щоб ваш зріз зрізав чітко починаючи з половини рядка наприклад коли в рядку символа то за формулою яку я вам показував на тому занятті Ні мені це не подобається отак от за формулою у нас виходить що 2 поділити 2 без остачі це буде нуль правильно тобто в даному випадку для двох символів формула Ой я написав нуль 2 по 2 буде у нас О я щось тупанув трохи тобто і зріз тоді треба поправити так щоб він чітко брав тільки останній символ рядка А все що до нього це буде інша половина рядка Тобто це стосується конкретно там заданої довжини всіх рядків це не стосується це от є там виключний випадок який я ж кажу ваш алгоритм не покриває в цьому та і є проблема Так я сподіваюсь Єгор ти мене зрозумів чи не дуже Ну так так супер ми з вами ну ці дезешки в деталях все одно будемо там пізніше розглядати але не зараз от Якраз це цей випадок про який я казав це один з варіантів рішення когось у кого там називається код отакво lesson forcepy то це якраз ваш код перевіряв якщо не помиляюсь Єгор це якраз твій був так Окей поїхали далі на попередньому занятті Так це не ваша група оце ваша ми з вами пробіглись по практиці Тобто ми розглядали практичні задачі ну скажемо я імпровізував вигадуючи різноманітні задачі різноманітної складності і ми їх з вами потроху вирішували ну такий у нас заняття практиком був Потім у нас ще одне заняття буде теж з практики але трошки інакшого форма там буде марафон Тобто ви самостійно будете практичні задачі вирішувати ну схоже на те що ми з вами робили тільки там буде відсутній один важливий елемент я тобто я вам допомагати не буду це буде саме самостійне вирішення задач ну на час в тому Марафоні я вам Потім поясню перед початком марафону як він проходить що що вам треба робити власне і як потім все це оцінюється бо система оцінювання там дуже цікава і вона буде стосуватися персонально кожного Тобто там не буде скажемо першого другого 10-го місця ні там буде тільки ваша персональна оцінка тобто неважливо який ви там перший задачі вирішили другий там буде саме ваш рівень оцінюватись тобто такий марафон скажемо на особовий залік Як то кажуть супер то ми з вами до цього в усіх попередніх заняттях потихеньку розглядали різноманітні частини мови програмування Python ну такі самі початкові оператори вводу-виводу логічні оператори умовні оператори потім ми з вами час приділили рядкам тобто більш детально ними зайнялись ви окремо самотужки розглядали функції потім ми їх трошки з вами закріпляли те що ви самостійно розглянули і те що я вам радив самостійно точніше не самостійно а трошки закріпили в практикумі Тобто це вже Теж круто і ми сьогодні переходимо до більш складних видів алгоритмів а саме циклічних алгоритмів ну і зараз якраз про це побалакаємо Так це у нас що там п'яте Да так що таке цикли і взагалі що таке алгоритми в цілому і які ми вже з вами розглянули 100% на якомусь там занятті з інформатики в школі в універі неважливо де ви там зараз навчаєтесь Євген питання будь ласка що очаєще це 4х Що ви написали коли на відповіді до домашки моєї не зрозумів умова не виконує обмеження зазначені ТЗ Так і що на на кштати на кшталти не менше 4х не менше чотирьох Угу чотирьох то це кількість чотирьох ну числівник угу а чотирьох Угу щоб не менше чотири було Зараз секунду я перечитаю бо я щось тебе не зовсім розумію один момент будь ласка я знайду Там просто в кінці це не 4х цечотири і буква х чотирьох Ну так я ж кажу це числівник Ну щось я прям запута розумію більше як на англійському бо означає по суті коли добавляєш більше по суті 2х означає те що в два рази більше Я так звик просто я зрозумів Так де дзешка точніше питання стосується четвертого ДЗ чи іншого чи третього Євген що четверте четверте дез Так зараз секунду А я бачу що ти мене ще закинув так умова не виконує обмеження обмеження зазначені в ДЗ коли в завданні є Щось на кшталт на це наприклад ну наприклад або щось подібне Я мав на увазі щось подібне до не менше чотирьох не менше наприклад чотирьох ну числа чотири Да дивіться До речі Євген гарне запитання зараз я поясню всім коли у вас в умовах задачі сказано там не менше детьох або не менше 20тьох давайте отак от візьмо не менше 20тьох що це означає це трошки граслів але що таке не менше 20тьх це що нам треба поставити Більше Менше більше або дорівнює менше або дорівнює Який з цих знаків обрати з цих чотирьох Я маю на увазі оце різні знаки Ну і ці два тобто Який з цих чотирьох треба обрати не менше 20тьх наприклад не більше менше ще раз будь ласка останні останній да оцей менше або дорівнює так мається на увазі чи оцей останній так оцей четвертий Давайте я їх пронумерую щоб легше було так перший другий вторий чи четвертий так ще раз будь ласка хто мені допомагав будь ласка ще раз скажіть який саме чотири так чотири менше або дорівнює тобто під словами не більше 20ятьох це менше або дорівнює 20 Саме так тобто одночасно наше Число там або довжина чогось неважливо чого вона повинна не бути більше 20х але 20 може бути оце називається не більше чогось там або наприклад не менше 20ятьх якщо б не менше 20ятьх нам треба було то більше або дорівнює 20ть тобто від 20тьох і далі це я ще раз повторюю трохи граслів Вона завжди буде вам зустрічатися в будь-яких задачах обмеженнях і так далі це не тільки стосується задач програмування це в цілому будь-яких задач Так я бачу там хтось руку піднімав У кого є ще питання Єгор А в мене питання стосовно останнього домашнього за завдання стосовно останнього рівня які я не зрозумів трохи умови що там потрібно саме зробити щоб алгоритми підпадали працювали з з Любою кількості символів так останніх так останняє четверта завдання да домашнє третій рівень правильно е диви в третьому рівні необхідно вирішити перші два рівні тобто щоб повністю закрити третій рівень по умовах треба вирішити перші два тобто окремо вирішуєш задачу першого рівня окремо задачу другого рівня якщо ти вирішуєш обидві задачі Ти отримуєш третій рівень все А в задачах вже першого точніше в задачі першого рівня і другого є обмеження по довжині рядка там прям прописано чітко В умові От зараз я покажу ось оця умова тобто тут чітко написано що перша задача да от створити рядок розмір якого не менше п'ятьох і не більше 15 Я щойно розповідав Як це не більше і не менше Тобто це граслів але це означає для нас як для розробників певні оці логічні дії тобто менше або дорівнює більше або дорівнює це все якраз тут ба треба застосувати в другому рівні теж є обмеження рядка за довжиною і тут написано не більше детьох символів ну або не менше 10ти я бачите інколи в числівниках ставлю там додаткову літеру в кінці щоб було зрозуміло а інколи ні щось от У мене не працює це на стіні основі так ще якісь питання є так Окей тоді поїхали далі по сьогоднішній темі тож бо по сьогоднішній темі Я ще раз повторюю Які наприклад ми з вами алгоритми вже розглянули тобто до цього Це був лінійний алгоритм так давайте Спочатку англійською потім українською так лінійний алгоритм лінійний алгоритм 100% ще раз повторюю на якомусь занятті з інформатики що в школі Що неважливо де б ви там не навчалися ви 100% про це чули це найпростіший алгоритм який можна собі уявити в цілому ну взагалі тобто лінійний алгоритм там де дії виконується лінійно ми з вами лінійні алгоритми виконували скажемо на першому занятті ми брали printт чітко щось виводили там писали Ще один нт під ним і в ньому щось виводили це приклад найбанальнішого лінійного алгоритму або наприклад в другому занятті ми з вами робили приклад калькулятора так от в прикладі калькулятора Давайте я його краще копіпастну як приклад лінійного алгоритму оце частина є лінійною Тобто це лінійний алгоритм ми чітко вводимо число один число два потім дію якусь вибираємо це все лінійні дії Тобто кожна дія гарантовано виконується після закінчення попередньої дії тобто дії виконуються незалежно одна від одної по черзі Тобто чому незалежно Нам все одно що ми там ввели не ввели в попередньому оцьому в попередній дії в попереднє значення ми ну тобто наше введення і наша робота над введеннями на робота нашого алгоритму ніяка від цього не залежить абсолютно Тобто це звичайний лінійний алгоритм дії виконуються по черзі гарантована кожна Одна за іншою дії ніяк не залежать одна від одної тобто вони ніяк не пов'язані ніяк між собою не конфліктують і так далі Тобто нам все одно це самі звичайнісінькі лінійні дії в житті лінійних алгоритмів ну зустріти дуже важко це буде бо життя у нас все ж таки дуже бентежне і складне і лінійні дії ну скажемо якщо і зустрічається то як правило як виключення якесь правил Ну можна щось зимітувати скажемо давайте лінійний алгоритм заварити каву Я беру каву візерна потім наступна Дія - це перемолоти цікаво візерна так милимо цікаво візерна Потім те що ми намололи собі Да отой кавовий пил який у нас вийде або порошок ми засипаємо в кавоварку і потім варимо каву тобто ставимо там на плиту або вмикаємо в електромережу нашу кавоварку Хоча зараз з такими приколами зі світлом в електромережа особливо там нічого не повмикаєш Отже варимо тіпа каву все це лінійний процес у нас кожна дія виконується Одна за одною але ще раз повторюю життя у нас трошки складне і бентежне тому оцей алгоритм це ну як сказати так абстрактно що це не справжнє тому що у нас тут дії пов'язані між собою Тобто якщо я не помолов каву то в кавоварку я не засиплю і не зварю каву тобто тут все ж таки трошки пов'язані дії між собою тому я привів найпростіший приклад і його не розкривав що там а можливо в нас кави взагалі не було то що тоді робити тому ще раз повторюю це як виключення може існувати лінійні але в програмуванні лінійний алгоритм - це нормальна практика тобто він цілком собі має місце бути далі наступний алгоритм який ми розглянули вже починаючи з другого заняття потім третього і четвертого заняття Тобто ми на трьох цих заняттях розглядали і використовували і закріплювали цей алгоритм це умовний алгоритм або алгоритм розгалудження ну англійською називається condition алгоритм тобто умовний алгоритм я слово алгоритм не буду повністю писати Я думаю тут і так все очевидно так і це у нас умовний або тобто умовний алгоритм або алгоритм розгалудження тут бачите трошки слова навіть місцями міняються щоб співзвучно було Отже цей алгоритм Ми почали на другому занятті а скажемо закріпили так дуже потужно закріпили на четвертому занятті там де саме у нас був практикум Тобто там ми з вами прямо використовували цю всю штуку Отже на даний момент у нас відомо два алгоритми лінійний там де дії виконуються поступово а умовний алгоритм тут у нас дії виконуються не поступово і не факт що взагалі виконається наприклад в цьому алгоритмі у нас виконання дій негарантоване у нас наприклад користувач може ввести дію ділення і оцей алгоритм не гарантує виконання жодної з цих дій тобто умовні алгоритми допомагають нам зімітувати ну або не зімітувати а визначити таку ситуацію там де у нас можливий скажемо не можливий а можливі варіанти розвитку Рі іх подій отак можливі варіанти розвитку різних подій тобто умовні алгоритми допомагають нам створювати розгалудження Ну тому ту це слово я і використав в більшості випадків Да в україномовній літературі Я бачив слово розгалудження і умовний Там звісно ще багатко слів можна навигадувати але от саме в літературі яка присвячена програмуванню от більш за все бачив Отакі слова отже розгалудження мається на увазі що в нас наш код може виконати скажемо оцей момент виконати оцю дію цю проігнорувати а другий раз ми запускаємо той же самий код в залежності від дії користувача від його вибору у нас навпаки може все помінятися у нас може перший алгоритм і перша умова ніяк абсолютно не бути виконаними тобто проігнорується а другий якраз спрацює і виконає оцю дію Тому це і розгалудження тому що тут немає скажемо гарантій що конкретно оцей елемент або оце оця частина кода буде стовідсотково виконана тут гарантій немає але такі алгоритми і такий вид алгоритмів дозволяє нам в програмуванні е як сказати побудувати логіку роботи оце важливо саме за допомогою умовних алгоритмів ми будуємо ту саму логіку бо ще раз повторюю ми в програмуванні завжди намагаємось відобразити змоделювати зімітувати те що у нас повинно виконуватись або виконується в реальному житті Тобто ми намагаємось це імітувати ну як ви розумієте в реальному житті простих дій лінійних майже немає бо це як виключення швидше і у нас багато умовностей завжди от знову таки можемо повернутись до кави наприклад кавові зерна я можу взяти кавові зерна якщо вони в мене є І от знов таки слово якщо тобто У мене є певна умовність певна скажемо залежність від чогось тобто якщо у мене є кавові зерна Я беру їх і мелю або перемелює а отут друге питання чи є в мене кавомолка чи не зламалась Вона і так далі тобто в мене ще ряд умовності виникає Тому все в мене розгалуджується тобто тут я навіть три умови вигадав Так у мене є кавомолка значить я помилов каву і оцей кавовий порошок засипав в кавоварку і тут знов таке питання чи є в мене кавоварка чи не зламалась вона ее Ну і так далі чи не брудна Вона і я можу ще вигадувати скільки завгодно цих умов Окей підемо далі кавоварка У мене є вона справна Я поставив її на плиту варити каву тобто вариться кава знов таки поставив на плиту чи є газ чи є світло Ну щоб зварити ту каву короче знову таки багато багато багато варіантів звісно в програмуванні Ми так з вами складно не будемо Отакі ланцюжки умов виконувати бо я вам тільки один хід або один варіант розвитку подій описав А у мене ж тут є купа інших наприклад кавових зерен У мене немає значить я йду в магазин Я їх там придбаю ну в магазин в крамниці неважливо я їх там придбав прийду назад знов перевірю чи вони в мене є і потім тільки буде молоти тобто в житті у нас занадто багато умовностей щоб простими отакими алгоритмами все це описати а в програмуванні ми це будемо намагатися зробити саме за допомогою умов оцих if El Else тобто умовних операторів в інших мовах програмування є ще деякі інші умовні оператори вони називаються оператори множинного вибору але в мові python вони не присутні їх можна тут зробити іншими способами але це ми потім з вами розглянемо пізніше коли деякі структури ну структури даних вивчимо складні от через них ми зможемо це зробити Окей поїхали і сьогодні третій вид алгоритма Ігор питання а множиний вибор це для таких дуже великих ланцюжків Да Це саме для величезних Я б так сказав ланцюжків там де можливий і ми знаємо скажемо з десяток варіантів розвитку подій і для кожного з цих варіантів різна дія виконується тоді це можна зробити як оператор множинного вибору Ну я ж кажу я вам покажу як його можна в пайсоні Ну так скажемо зімітувати за допомогою певних структур даних але ну самого такого оператора тут на жаль не присутньо прикольний оператор але от чомусь в мову pyon він не прийшов і мене увазі не прийшов звідки з плюсів звісно бо мова python в цілому на плюсах написано Ну на C на c++ а там цей оператор є так циклічний алгоритм це третій алгоритм з можна сказати з найголовніших і найбазовіших алгоритмів в цілому будь-якої мови програмування неважливо якої І я так скажу що навіть і в житті це застосовується всі ці три алгоритми вони є невід'ємною частиною будь-якої скажемо роботи дії умови і так далі навіть будь-якої життєдіяльності Я б сказав неважливо це програмування чи реальне життя всі ці три алгоритми застосовуються нами кожен день кожну хвилину кожну секунду навіть якщо ми про це не здогадуємося У нас є наприклад Наш організм який виконує всі ці алгоритми Ми навіть я ж кажу можемо цього не усвідомити але в нас ці алгоритми постійно працюють ми ними постійно користуємось без них ну важко уявити собі навіть сам процес життя навіть не людини а хоча б там якогось Я не знаю мікроорганізму тож бо все це напряму пов'язано з нами ну невід'ємно пов'язано з програмуванням так само для програмування ці три види алгоритмів лінійний умовний і циклічний вони є стовпами просто на яких стоїть все програмування тобто ці алгоритми вони невід'ємні неминучі і так далі я б міг ще багато епітетів вигадати але досить і цих Отже що таке циклічний алгоритм на що він потрібен Як це працює в людті можна це представити дуже простим прикладом а наприклад а скажемо тренування з пробіжки пробіжка зранку там або ввечері або коли ви там ще бігаєте і чи бігаєте взагалі наприклад там пробіжка ранкова займає ну точніше не займає а складає 3 км наприклад бігу звичайного просто потрусити вийти тобто я наприклад бажаю пробігти 3 кме далі щоб пробігти ці 3 км Мені потрібно виконати певні дії які саме зробити один крок зробити другий крок зробити третій крок і в залежності від того яка довжина мого кроку ну скажемо візьмемо 1 ме у мене крок Мені потрібно цей один і той самий крок один і той самий механізм повторити 3000 разів тобто 3000 разів Я повторюю один і той самий абсолютно одну і ту саму дію постійно 3000 разів на протязі всіх ну на протязі всієї пробіжки зранку і у мене виходить закінчення тренування Я пробіг 3 км зробивши 3 000 кроків ну це я звісно трошки опустив нюансів у мене крок там може бути не завжди 1 мтр ну в цілому для досвідчених для досвідчених бігунів А у них крок завжди ну майже завжди сталий тобто досвідчені бігуни вони Ну як то називають поставлений крок у них тобто вони майже завжди роблять однакови довжини крок неважливо там 1 м це чи 50 см неважливо я ці нюанси опустив ще раз повторю я не вдаюсь такі подробиці тобто я так абстрактно про це думаю Отже це є приклад найпростішої циклічної дії будь-яка інша циклічна дія скажемо обертання Землі навколо Сонця це теж цикл у нас цей цикл займає 365 днів в деяких випадках 366 днів Ну ото Коли у нас як отой рік називається невисокосний Як же це українською правильно називається забув м неважливо Отже планета Земля має свій цикл скажемо зірка Сонце має свої цикли роботи там а наша зірка Сонце вона обертається навколо центра нашої галактики тобто центра ну наша галактика на називається Чумацький шлях там в центрі є якийсь об'єкт надважкий навколо якого обертається наше сонце Як не дивно да сонце наша зірка Отже Всюди є цикли вони неминучі в нашому організмі навколо нас е Я не знаю в наших механізмах електроніці яку ми використовуємо і так далі Всюди є цикли цикли умови лінійні алгоритми і так далі Ну і в програмуванні це теж все існує Я сподіваюсь ви це гарно усвідомлює тож би поїхали далі Це я вам максимально простими словами пояснював концепт цих всіх елементів Я маю на увазі алгоритмів видів Отже поїхали тепер простий приклад в програмуванні циклічних дій наприклад я бажаю як ми з вами на першому занятті робили Вивести на екран якусь фігуру скажемо найпростіший варіант вивести квадрат Ну да в мене квадрат такий собі вийшов Давайте я тут трохи підшаманю Десь ще отак от два штуки додам О плюс-мінус це схоже на квадрат Я не вдаюсь в подробиці не рахую скільки тут і тут символів по висоті чисто візуально це схоже на квадрат мені Цього досить Отже маючи певний набір дій Я бачу що ці дії абсолютно однакові А якраз цикли вони і необхідні для виконання або повторів однотипних А в деяких випадках ідентичних дій однотипних мається на увазі що ці дії можуть бути схожі за типом тобто щось виводять Але мати в деяких умовностях або в деяких моментах різний результат про це Я теж вам зараз покажу що я маю на увазі тобто поки що ми розглядаємо цикл з точки зору або з думкою що це однакові дії але потім я вам покажу що тут можна теж хитрувати як теж покажу Отже найпростіший цикл з якого все починається особливо в мові Python це цикл for а він Так і називається цей цикл е це цикл з відомою кількістю повторів він так називається і має такий таке значення Але в програмуванні в цілому є три основних типи циклів і ми Якраз сьогодні всі ці три і розглянемо так цикл з відомою кількістю повторів так супер відома кількість повторів Да що означає відома кількість повторів на найпростіший приклад який я вам наводив це був біг тобто щоб мені виконати ранкову пробіжку Мені потрібно зробити 3000 кроків у мене відома кількість повторів прям на на самому початку моєї пробіжки тобто я знаю свій кінцевий результат якого я повинен досягнути і просто мені лишається повторити ці 3 000 дій по одному кроку щоб виконати цю пробіжку так от цикл for найпростіший в мові python Він і так само знає скільки кроків він повинен чітко виконати завжди тобто не буває такої ситуації коли цикл 4 не знає скільки крокі він виконає Він завжди це знає Отже цей цикл записується наступним чином сам оператор Так і називається далі назва змінної будь-яка я почну зі змінної I зараз поясню чому далі оператор і ставиться і ми показуємо Скільки кроків повинен виконати наш цикл тобто от прямо тут після оператора in в мові python Це трошки дивним чином виконується необхідна функція Range в які я ми щось запишемо а щось це буде кількість кроків в даному моменті я потім трошки нижче поясню в деталях що це за rреangeж і як ним користуватися тобто в мові python виглядає це саме таким чином в інших мовах програмування схожим чином але не потрібно використовувати наприклад щось подібне до rренch Range - це дуже специфічна функція і звідкиля вона там взялась і навіщо потрібна теж потроху в курсі з вами дізнаємось бо це складна штука Це теж структура даних Не питайте чому потім буду пояснювати зараз не звертайте на це уваги Отже зараз мій цикл Так а хто це у нас руку підняв Аніщенко будь ласка а можна будь ласка ще раз спитати то я не дуже розумію як ви ставите цей рештку а хштег комбінація клавіш або я це виконую в англі розкладці ctrl/ash сash мається на увазі це символ отака нахилена риска тобто Ctrl Slash або наприклад я ставлю перед рядком Shift 3 комбінацію клавіш Тобто це один ну хештег ставиться А якщо я бажаю кілька рядків то ctrl/ash на виділених рядках Добре дякую Євген показати щось я я просто написав 9999 і ін Range 999 просто не можна доскровуватися до кінця Ну так це нормально бо ти занадто багато кроківказати поки що не треба ви можете поекспериментувати ми з вами тут на моєму екрані будемо ну скажемо в менших масштабах експериментувати бо 999 якщо там Ну багато дев'ят поставити ми довго з вами будемо чекати поки воно закінчить Отже що я бажаю зробити от У мене є отакий момент Як мені тепер оце все виконати скажемо всього двома рядками коду тобто повторити певну кількість однакових дій я візьму просто оператор print сюди вставлю скільки тут разів було раз 2 3 4 5 окей я тут замість детьох поставлю П'ять Коли я виконаю цей код я на екрані побачу такий самий результат Якби я це написав руками в п'ять рядків коду а тут всього в два Я думаю ви розумієте сенс цього Чому Бо наприклад коли мені треба буде 150 дій виконати або 3000 дій виконати щоб це ні Наприклад щоб пробіжку зробити то мені б довелось 3000 отаких рядків коду писати або два рядки коду тобто 2 проти 3 000 Незалежності від того що ми там робимо я які дії виконуємо якщо ми їх пишемо руками кожну окрему дію нам потрібно написати всю кількість цих дій А якщо ми це робимо циклом нам банально в циклі треба зазначити більшу кількість кроків і всео Тобто Це занадто очевидно для зручності використовувати Ну ніж здається Тобто це супер очевидно ми з вами будемо дуже часто А я вам так скажу що З сьогоднішнього заняття на кожному занятті в кожному домашньому завдання і так далі будемо використовувати цикли тобто завжди завжди починаючи з цього заняття ми будемо це робити це неминучий факт бо цикли вони вирішують дуже багато проблем з повторами тобто цикл запам'ятаєте що це для повторення якихось дій дії можуть бути різними в даному випадку я вам показав повторення лінійної дії самої звичайної але я ж таким же самим чином можу запхати туди умову і щось з умовою вже робити А це ми трошки пізніше і глянемо тобто дії я туди можу покласти різні Я з такими успіхами Можу один цикл покласти інший тобто я можу в цикл покласти інший цикл і це теж буде нормально тобто повторення циклів таке теж буває Ну все по черзі Отже Що таке цикл що це за змінна з цього я почну ця змінна це фактично номер кроку цикла цю змінну на початках можна називати ітератор потім трошки далі буде зрозуміло Чому тільки на початках потім пізніше її треба Ну це не зовсім ітератор це так так е або по-простому це в нас буде лічильник циклів або змінна яка зберігає А номер кроку цикла ну або поточного кроку так змінна яка номер точного кроку цикла о підійде чому саме ай чесно сказати сам гадки не маю як навчився ну скажемо як навчився в певний момент я читав багато книжок Ну на той момент коли я на інтернет був тільки скажемо в мріях він потім пізніше звісно з'явився але на той момент я читав книжки з програмування і отам всюди починали цикли з А тобто це якась зміна з якої все починається але от я думаю що розробники саме ай поставили тому що індекс ітератор або щось подібне тобто з цього слова починається типа назва зміни ви звісно можете назву змінною цикла зробити будь-яку яка Вам підходить по сенсу назви тобто щоб вона логічно була названа ви можете будь-яку назву ну чомусь починається з I я вирішив не порушувати традиції з тих книжок які я читав тому і вам теж першу показав ай Але ви маєте право будь-яку зміну там зробити далі що таке номер крокоциклу на що він потрібен що він нам допоможе зробити Ну наприклад Давайте я просто назву нам цю змінну просто тому що що можу зараз це ніякого особливого сенсу немає але я так можу зробити так далі Ну давайте виведемо цю нам на екран до речі запам'ятайте що ця змінна вона присутня тільки всередині цикла Тобто там де є після for один відступ в Tab тобто один відступ в один Tab це означає що ця змінна тут доступна якщо я перейду нижче цикла ця змінна все вона вже недоступна вона присутня тільки в циклі є нюанси про які я вам пізніше буду розповідати ще про ці змінні але поки що працюйте за такою логікою Отже якщо я зараз запущу цей алгоритм програма неважливо я побачу що в мене цикл виконує рівно 10 кроків на кожному кроці у мене виводиться номер кроку циклу номер крока цикла Ну нічого дивного починається з нуля в принципі як і індексація тобто тут теж йде порядковий відлік з нуля і до 10 до 10 Як ви бачите 10 не включно але кроків буде 10 бо ми почали з нуля закінчимо дев'яткою тобто останній крок цикла під номером девть а по кількості кроків буде 10 ну тобто Це трошки плутанини вносить але я думаю в цілому вам зрозуміло Отже цей номер кроку цикла ми можемо використо як заманеться Це просто якесь ціле число яке починається з нуля продовжується до зазначеної нам кількості якщо я наприклад поставлю 150 то воно продовжиться до 150 тобто максимальний номер буде 149 бо я почав з нуля ну тобто тут все супер очевидно то почав з нуля закінчив 149м номером все тобто цей цикл виконав 150 кроків супер але це не все чому все дуже банально тому що оцей rреange Він має деякі налаштування Range - це не проста функція або ще щось подібне і я вам так скажу це взагалі не функція це клас називається але що таке класи ми з вами колись там потім десь там далеко вивчимо але не зараз точно Це вже буде Коли ооп програмування будемо розглядати Отже Range поки що можемо називати це функцію це спеціальна функція яка може генерувати чисельну послідовність це важливо саме чисельну послідовність якщо я виведу на екран воно мені покаже що це чисельна послідовність від нуля до 1 150 не включено звісно Окей як я цим можу скористатися або користуватися ореangee є три види налаштувань перший якщо я зазначаю чітко число це буде означати що буде будуватися чисельна послідовність від нуля до 10 10 не включно Тобто Це очевидно давайте о так от поставлю да до 10 далі тут є друге налаштування за допомогою якого я можу контролювати початок генерації давайте напишу буде з генеровано [музика] числову довність від нуля до так до 10ти так не включено далі я можу змінити початок генерації наприклад згенерувати там з чотирьох потім по ставити кому до скажемо 12 щоб це ні тобто в мене тепер початок буде не з нуля як тут автоматично було отримано Тобто там алгоритм Сам вирішив що з нуля бо я не зазначив це а тут я чітко зазначив Почни з чотирьох закінчи до 12 тобто тут буде з ту давайте теж з нуля поставимо так з чотирьох до 12 тобто тут буде так буде згенеровано числову послідовність не буду це повністю писати від 4х до 12 не включно знаєте що це мені нагадує зрізи які ми робили в рядках от дуже на це схоже і правила такі самі Далі є третє налаштування Range яке зробить нам як і в зрізах частоту або frequency або періодичність тут як завгодно можна це назвати тобто зчотирьох до 12 з кроком або з інтервалом з інтервалом два буде згенеровано числову послідовність від чотирьох до 12 не включно з інтервалом між числами в два тобто те саме що і в зрізах як цим можна користуватися ну Повірте це дуже потужна штука яка нам допоможе зробити дуже Багатько корисних речей Ну давайте от одразу прикладів наробимо з вами так цикл 4 Ну давайте я просто поки на екран повиводжу а там далі побалуємось на скажемо на певних задачах покажу вам ну на практиці прям чо б це ні такс А давайте ай зроблю не знаю От рука чухається натиснути кнопку а і назвати Так змінно отже давайте почнемо там з третього по 10 ну тобто з трьох до 10ти тобто у мене номер крока цикла почнеться з трьох і буде по одиниці змінюватись тобто тут у мене періодичність одиниця Як ви бачите гарантовано з трьох до дев'яти типа щоб це Ні я можу тобі собі так дозволити далі з періодичністю Наприклад якщо я поставлю період або частоту два тобто 3 5 7 9 тобто кожне наступне число починається з трійки буде ВіДі ізнятися Від попереднього на два це і є наша періодичність тобто період завжди двійка або частота двійка короше це можна називати як завгодно тобто 2 2 2 і так далі і тому подібне Окей А Чи можемо ми скажемо навпаки як в зрізах все це розвернути да можемо дійсно ми можемо почати з 10 продовжувати до Я не знаю пяти по мінус одному чому то й ні 10 9 8 7 6 Да ми ж від 10ти почали і до пти продовжували да продовжували Можемо і так собі дозволити зробити Окей А Чи можемо ми скажемо [музика] від -10 до -ну5 по міну3 наприклад да можемо -10 ой точніше 10 і с от Давайте я до двох продовжу щоб там більше чисел влізло 10 7 4 зновтаки період -3 тобто бачите вже не плюс там два не один не три а -ну3 тобто період між цими числами -3 або крок -3 або ще як можна це по-різному називати далі чи можуть бути індекси від'ємними легко або кроки цикла наприклад можу почати з -ну10ть продовжувати до двох по по три почав з -нус10тьх з періодом т і продовжую до двох Два не включене Як ви зрозуміли тобто Да я можу так зробити давайте поставлю до п'ятьох щоб ви побачили це давайте навіть до 10тьох тобто тут як гадаєте яка кількість кроків буде зараз у цикла ід мінус де до 10х ну очевидно що буде 20 але якщо я поставлю період три то буде явно не 20 а менше як мінімум в трич менше так -10 -7 -4 -1 2 5 8 тобто у нас період завжди плюс3 сім виходить Бо у нас восьмачка ж в кінці вона до детьох ще йде так супер Це я вам так супер прості примітивні приклади навів як цим можна скористатися або використовувати як це можна це ще раз повторюю Дуже схоже на зрізи між рядками які я вам тут демонстрував тобто правила ті ж самі просто не індекси не зрізає там щось з рядка А просто дозволяє нам покрокувати в циклі Окей А поїхали далі як ми це можемо використати от Саме цей цикл бо це я вам тільки один Вид а їх три зараз всі потроху розглянемо Наприклад ми пам'ятаємо з вами Що рядки мають індекси від нуля і до там скільки символів в рядку отже як цим можна скористатися наприклад є у нас рядок який би такий рядок будь ласка питання цикли можна використовувати щоб пробити якісь ігр правильно Не обов'язково ігри але чому б це можливо зробити можливо Так звісно буде якісь ді дії поки не буде якась кількість хп Наприклад щоб той ні або наприклад скажемо поки користувач щось там робить або поки у користувача там скажемо є на циклічно програвати анімацію вистрілу Наприклад якщо ми беремо якийсь шутан так наприклад да Тобто [музика] ange я не знаю як тоді Ну я навів трошки інакший приклад його легше заінтерпретувати ніж з життями з набоями в зброї шутані в якомусь тобто поки є набої в зброї зброя стріляє тобто програється анімація вистрілу або стрілянини поки не закінчаться набої як тільки набої закінчилися то все Зупинити цю анімацію або якщо наприклад користувач відпустив кнопку стріля ну стрільби то теж припинити анімацію Ну то вже трошки інакш приколи Зараз ми до цього дійдемо що таке переривання циклів Отже на простому прикладі демонструю потім ми з вами будемо до більш складніших переходити є у мене рядок рядок ми знаємо що це перерахована структура даних індексовано і так далі як я можу це поєднати з циклом Наприклад якщо я бажаю А давайте тут отак зробимо я бажаю порахувати в цьому рядку яка кількість літер в цьому рядку наприклад звісно я можу заразрука все порахувати і очима своїми Да тут Скільки тут у нас 6 п 3 і п 4 13 літер окей Все відповідь закінчена розходимось всім до побачення і так далі але ні звісно нам же ж треба написати алгоритм який це за нас порахує А що скажемо якщо в рядку було б ну такий текст 1ся на 20 символів і там не факт що всі будуть літери як би ми дізнали дізнались би кількість ми б з вами руками рахували це Повірте занадто довго А комп'ютер впорається якщо правильно алгоритм написати за мілісекунди тобто набагато швидше нас Отже поїхали в даному випадку cкл 4 Чоб це ні беремо від чого до чого От наприклад Range питання Скільки кроків повинен зробити цей цикл Ну давайте зробимо 10 кроків я просто поки що не знаю не знаю як це виявити або порахувати цю кількість кроків щоб порахувати тут кількість літер далі що далі б я повинен зробити мені потрібна якась змінна до цикла яка буде зберігати фінальний результат Ну давайте напишемо count наприклад letters що в цені так спочатку в мене ця кількість невідома ставлю нуль Це очевидно Я не знаю скільки в мене літер навіть гадки не маю бо тут рядок може бути Який завгодно тобто я намагаюсь написати універсальний одразу алгоритм і ви теж ніколи не намагайтеся підігнати свій алгоритм під якусь конкретну відповідь Це так не працюватиме це буде працювати тільки для конкретно підігнаного випадку не для всіх в більшості випадків я вам саме ставлю задачі таким чином щоб ви писали універсальні алгоритми Ви повинні просто навчитися інакше програмування не вийде тобто програмування не може бути піді но завжди під якийсь конкретний результат ваші алгоритми повинні бути універсальними Отже створив змінну далі що мені тут ще не вистачає Мені не вистачає логіки типа цикл Окей я дії зможу повторювати А які дії як я можу визначити що цей символ рядка є літера чи не літера і питання наступне А як мені взяти окремий символ рядка ято не знаю але є спосіб так як у мене цикл починається з нуля продовжується до 10ти це схоже на індекси да на індекси рядка Давайте спробуємо це зробити так Ну да від нуля до 10ти все ми в цьому пересвідчились поїхали далі як я тепер можу окремий символ рядка взяти Я знаю що рядок індексована структура даних ну тобто має цю властивість беру рядок ставлю квадратні дужки і питання який індекс сюди вставити а індексом У мене буде номер крока цикла і таким чином мені цей цикл допоможе це називається перебрати всі символи рядка ну зараз не всі а 10 тільки чому 10 очевидно бо в мене цикл всього 10 кроків виконую якщо я зараз запущу цей код ми побачимо перші 10 символів рядка по черзі виведені на екран пробіл теж символ Не забувайте тому тут порожнеча я за це Отже номер крока цикла можна вико використати для того щоб брати за індексом елемент щоб це ні наприклад це один з варіантів один з багатьох мільйонів можливих варіантів Як це можна застосувати Тепер у мене питання от я беру один символ як я повинен пересвідчитись в тому що це літера або не літера для цього в нас є функції наприклад функція і Альфа ця функція у рядків може перевіряти або весь рядок на те що там тільки одні літери містяться або конкретний символ або навіть частину рядка Якщо б я зробив зріз в даному випадку буду перевіряти конкретно зазначений за індексом символ і повертати меніт абофse в даному випадку Як ви бачите перші шість символів рядка оце слово fiels це є літери я можу навіть отак знаєте написати щоб це було очевидніше Давайте так через кому тобто літера рядка да тру це літера літера рядка да тру це літера літера літера літера літера потім пробіл це не літера цифра це не літера і так далі Окей логіку наче побороли далі як я тепер повинен рахувати кількість а отут якраз поєднання алгоритмів Ну я вам так скажу в принципі в більшості випадків у вас не буде ніколи чистих алгоритмів або чистих циклів або чистих лінійних алгоритмів або умовних в більшості випадків у вас буде мікс з цих трьох видів алгоритмів я не скажу що це буде прям супер завжди це неминучий факт але в більшості випадків це буде суміш цих видів алгоритмів в даному випадку це яраз так і буде я сюди запишу умову тобто якщо у мене оцей символ рядка є літера Я буду в цю змінну додавати пс1 за кожну літеру чому саме П1 бо тут Я одну літеру точніше один символ рядка розглядаю чи літера це чи ні Якщо б розглядав два символи я б плюс два додавав би це називається накопичувальний алгоритм Давайте я поки що по-простому напишу тобто до попереднього значення цієї змінною додам одиничку і запишу В цю ж змінну і так буду перезаписувати поки не знайду всю кількість так давайте напишемо так count letters підійде так і тут через кома ми з вами оту змінну count letters зазначимо Окей показує сть літер Ну це ж не сть літер в цьому рядку це ж неправда да це ну маячня якась бо тут 13 літер як порахувати всі тобто з логікою ми розібрались ми використали if ми використали дію тобто коли у нас символ є літерою у нас спрацьовує тьсяя Дія це робиться на кожному кроці цикла тобто ще раз я повторюю що цикл може повторювати не тільки скажемо лінійні алгоритми от як я отут виконував він може і умови повторювати і умови точніше дії в умовах і так далі тобто в даному випадку цикл у нас 10 разів виконає Цю умову для кожного символа по окремості Євген будь ласка питання коли постину коли я щось пишу То щось є якись автокоректор що це за автокоректор пишеш куди Ну просто коли я щось пишу доповняється якщо натисну Ната це працює пайчарм пайчарм - це середовище для розробки Тобто це от весь цей інтерфейс який ви перед собою бачите це ви що називали нейронка чи що Ніні Ні це називається інтерпретатор це ну трошки схоже на нейронку але до нейронки не дотягує занадто просте що вє нейронка інтерпретаторі це не це не нейронка не плутайте А що вообще є неронкою є що є нейронна мережа Угу складне питання дивіться нейронна мережа - Це складне поєднання алгоритмів Тобто це ну Ви не повинні думати зараз що це штучний інтелект що там прям мізки є Які працює як у нас ні нейронна мережа - це купа алгоритмів можна це представити як скажемо мільйони або мільярди if els El оце можна так представити якщо супергрубо це зробити то нейронна мережа - Це просто мільйони десятки сотні або мільярди іфів еліфів та елси всіляких оце можна по ну типа так інтерпретувати по-простому але насправді нейронка - це трошки складніше ніж просто набір умов там є таке поняття Як навчання я вам не зможу зараз простими словами навчання пояснити нейронок як воно впливає на ці умови як вони змінюються і так далі тобто нейронка може коротше нейронна мережа - це програма яка на етапі навчання має скажемо мільйон Ну давайте так 10 млн if els в кожному там програміст прописав якусь умову але нейронка під час навчання може міняти кожну з цих умов кожну з цих 10 мільйонів умов сама Тобто це Вона навчається вона коригує ці умови які са мого початку були задані програмістом оце нейронна мережа Вона тіпа підлаштовується під ті дані які їй згодовують для навчання ну це так називається згодовують це трошки сленгу Ну мені складно вам буде пояснити повністю як працює нейронка це непростий процес чому Бо щоб розуміти як воно працює я вам так скажу більшість людей які створили нейронні мережі вони вже самі взагалі не розуміють як всередині працює нейронка бо це занадто складно для нас але основні принципи є для того щоб розуміти хоча б основні принципи ну скажемо одного програмування мало там є ще скажемо стек наук які потрібно розуміти там купа математики купа теорії керування купа баз знань не баз даних а баз знань це є такий прям предмет Можливо у вас в універі теж буде якщо у вас щось в вашій спеціальності Буде схоже з нейронками короше це дуже величезний комплекс наук Я пам'ятаю теж в університеті прям ну мені це подобалось от саме теорія керування потім нейронки мені це подобалось але я тоді не бачив в цьому Сенса дарма зараз вони вистрілили отже давайте повернемось до оцього тож бо цикл допомагає нам для Кожного елемента виконати оцю умову і дію Ну якщо умова виконається звісно Тобто ми для кожного конкретного елемента тобто комп'ютер по черзі кожен символ перевіряє цієї умови і це робить циклічно 10 разів але ж ми знаємо що тут не 10 символів то як тепер питання поєднати кількість кроків цикла і кількість елементів в рядку все дуже просто можемо записати Щось на кшталт count наприклад щось таке ми можемо взяти функцію len отримати кількість символів рядка і застосувати цю змінну отут во ВС тепер у нас гарантовано буде перевірено кожен символ рядка не 10 кроків цикл виконає а рівно стільки скільки є символів в цьому рядку Ну якось так і як ви бачите відповідь у нас буде 13 літер і це є правда з оцих 23 символів які є присутні в цьому рядку 13 є літерами всі інші це інакші символи не літери явно це найпростіший спосіб застосування циклаф ми все по чарзі розібрали по одному символу з рядка копію точніше символа отримали переглянули її оцією логікою і підрахували кількість далі отут є нюанс я вам сказав що це класика да дійсно це класичний запис на чення є некласичний запис коли ми використовуємо алгоритм накопичення Ну наприклад на кожному кроці цикла при виконанні цієї умови додаємо одиницю до тої самої змінної і записуємо в цю саму змінну це називається накопичення ми можемо це написати отак тобто В умові python оце можна скоротити до оцього тобто сенс В тому що ще раз ми зва нтажуємо спочатку старі дані зі змінною додаємо туди одиницю і перезаписуємо в ту ж саму змінну це як ви бачите низка дій різних і вона може об'єднуватись оце вже називається бінарний оператор це бінарний оператор скажемо додавання чому бінарний бо тут і робота з пам'яттю і математика Ну так назвали коротше це однаково тут можна це виконувати хоч з мінусом хоч з множенням хоч з діленням неважливо яку ви математичну дію те але працює це однаково ще раз повторюю це коли нам потрібно завантажити старі дані з цієї змінною щось з ними зробити і записати назад В цю ж змінну то тоді оці бінарні оператори плюс мінус помножити і обов'язкова дія привласнення І що там робити наприклад додати число одиницю або ще щось подібне це називається да накопичення і бінарні оператори Як ви бачите працює так само але пишеться коротше це Певний метод скорочення звісно ви можете і класично писати це не помилка просто більше писати як я вам і обіцяв потроху буду вам показувати скорочення це якраз один з тих моментів Окей А зараз є якісь питання по тому що я розповів може щось було незрозуміло так Окей А якщо поки що питань нема робимо невеличку перерву через 5 хвилин я повернусь і ми продовжимо Так пані та панове Зараз буде швидесенький чек на присутність і на готовність продовжити так будь ласка тицніть Так якщо ви тут і готові продовжити або ні так бачу більшість з вас вже тут хто натиснув ні У кого є питання будь ласка чому не готові ще но шутка Я зрозумів так добре тоді раз більшість тут поїхали перший цикл for з його особливостями ми роздивилися тобто з аспектами роботи з ним а тепер поїхали до наступного цикла який називається for але записується так само як цикл for але це тільки у випадки мови pyon дада цикл саме називається forч на відміну того що ми бачили але це той самий цикл for якби це зараз дивно не прозвучало цикли однакові пишуться однаково але працюють по-різному трошки по-різному Так це цикл з відомою структурою даних здавалось би з відомою кількістю повторів і відомою структурою даних на черізниці небагато але Повірте вона суттєва Отже цикle for і цикle for each в мові python пишуться абсолютно однаково я вам в цілому по секрету так скажу що в мові python присутній тільки цикл for а циклф то бліда ітація циклуфор от чесно вам скажу Тобто там все настільки от скажемо з цим циклфор погано що це прям бліда імітація справжнього циклафор в mві pyon не існує Це просто імітація через цикл форич але про це ми з вами ще побалакаємо пізніше чому саме імітація чому я її так називаю і чому вона такою є ми з вами пізніше подискутуємо але не Сьогодні поки що ми розглянемо так як є і не будемо паритись над цим Отже записується цикл форич наступним чином візьмемо попередню задачу осью там де ми рахували кількість літер рядка я візьму той же самий рядок я візьму ту ж саму змінну куди ми будемо підраховувати кількість літер і далі запишу те ж саме цикл тобто я створю якусь змінну знову таку скажемо Давайте я назву її елемент або символ і замість Range після in я використаю сам рядок тобто от прямо так запишу сам рядок що це буде для нас означати я в циклі зазначив відому структуру даних Тобто це натяк на те що структура даних у нас існує до цикла ми знаємо які там є символи і звісно циклфор так само точніше цикл форич знає так само які там символи Є і фактично він по черзі буде брати один символ рядка по черзі на кожному кроці і робити з ним тут все що завгодно але звісно там буде братися копія символу рядка Давайте перевіримо це тобто в змінну символ Ну я скорочено написав буде отримано один символ рядка на кожному кроці Ну от всі ми їх і побачили Отже я можу рішення переписати трошки інакше я буду писати тепер якщо у мене оцей змінна символ є літера бо це в мене буде кожен символ рядка по черзі то я в свою змінну count letters п 1 зроблю ну на Ну і все і виведу відповідь на екран супер відповідь та сама коду написав менше все завдяки тому що я брав Не за індексом копію елемента рядка А напряму через цикл forч тобто цикл forч він може прийняти структуру даних перераховано головне тобто рядок якраз попадає під ці обмеження та ці правила і взяти кожен окремий елемент починаючи з нульового за індексом звісно індексами тут гадки не маємо який там індекс він нас в цілому не цікавить Ми беремо кожен окремий символ по черзі і я вам наступне скажу що різниця між циклом for та forч Вона здається поки що не суттєвою але це тільки на початку трошки з досвідом ви різницю побачити і вона дійсно там суттєва я вам так скажу як треба онтуватися в цих двох циклах коли у вас в задачі або в вашому рішенні яке ви вигадали необхідні індекси елементів то тоді тільки цикл точніше циклф там де ми можемо спокійно оперувати індексами робити з ними все що завгодно А коли у вас не йдеться в задачі про індекси і в вашому рішенні так само не йде Ну як сказати ви не спира на індекси вони вам взагалі не потрібні то тоді це буде цикл орич тому що цикл forорич він взагалі гадки немає які там індекси він їх не бачить він бачить копію одного конкретного елемента рядка на кожному кроці про індекси цих елементів Він навіть не здогадується тобто в цикліф ми маємо доступ до індексів і ми можемо ними оперувати а в циклі форич ні далі другий нюанс який я вам пораджу це така знаєте порада на основі того досвіду вивчення цих циклів які я теж колись проходив тобто мені так простіше було інтерпретувати звісно ви можете свій спосіб вигадати свою логіку свою інтерпретацію але мені отака інтерпретація вона була мені зрозуміло наступний прикол пов'язаний з тим що типа якщо нам потрібно перебрати весь рядок взагалі кожен символ чітко взя вяти щось там з ним зробити ну копію Я маю на увазі символа рядка взяти якось її дослідити то тоді в більшості випадків я вам так скажу в 99% випадків цикл for для вас буде вигідніший ніж цикл for Тому що тут трошки менше писанини і не треба заморочуватись з індексами але це за умови якщо нам потрібен весь рядок і кожен його символ по черзі Якщо нам це в задачі не потрібно то отут вже 50х50 тут вже або цикл вам підійде абофрич якщо повністю рядок не треба розглядати А треба там конкретні частини його і Якось це треба там виконати і так далі але мова про індекси скажемо не йде то тоді все одно ви вирішуєте 50х50 або той або той вам підійде яким легше буде зінтерпретувати подібне рішення порада така я розумію трошки розпливчаста але ще раз там де мова йде про індекси одразу вам треба цикл forфорич задіювати Навіть можна не задумуватись поки що про це якщо у вас в задачі йде мова про перебрати всі елементи рядка по черзі гарантовано то тоді цикл forри в більшості випадків вам підійде А якщо задача така з прикольними умовами і там чітко не зазначено чи всі символи чи індекси потрібні чи ні О тамм вже 50х50 тут вам вже тільки допоможе попередній досвід вирішення задач більш скажемо точно вибрати собі цикл е поки що в більшості випадків у вас буде все навпіл або той або той цикл в задачі я буду в більшості випадків чітко писати Що саме потрібно виконати тобто уважно просто читайте умову там буде зрозуміло в більшості моментів який цикл саме потрібно використати але це поки що потім задача трошки ускладняться отже А поїхали далі так А де мій тут [музика] малюнок Так його викинемо А тобто цикл forч отримує кожен конкретний по черзі елемент рядка копію його ну і можна з ним з тою копією робити все що завгодно Це ніяк не відобразиться на самому рядку так супер і останній вид цикла останній вид цикла ми з вами розглянемо ну більш детально трошки пізніше але поки що Давайте його запишемо називається цикл while в мові Python вінки в одному вигляді доступний саме в такому А в інших мовах програмування цей Wi розкладається на два цикли на do while Та просто while ну на do while і while do якщо можна так висловитись здається одне і те саме але різниця є так це у нас буде цикл з перед умовою фактично цикл while в мові Python - це цикл Який Ну скажемо схрещено або поєднано з умовою або з умовним оператором if дуже на це схоже і це дійсно плюс-мінус так і є І чим він відрізняється це цикл зпере мовою та невідомою кількістю кроків ви в мене Спитаєте як це невідомою кількістю кроків все дуже просто на початку роботи цикла ми гадки не матимемо скільки кроків він виконає от абсолютно гадки не матимемо і спрогнозувати ну це можна буде припустити спрогнозувати але чітко сказати Ні ми не зможемо наприклад де такий цикл може застосовуватись І в чому він ну нам допоможе давайте припустимо якусь реальну подію в нашому житті скажемо Окей мене мучить спрага я скажемо ну зараз спекотно на вулиці Я наприклад ранкову пробіжку пробіг там 3 км сонечко вийшло припекло мені і мене мучить спрага я прийшов додому мені дуже хочеться пити Я підходжу наприклад до ємності з водою і ну скажемо не наливаю там а просто прям з самої євності Ну звісно так робити погано але мене дуже мучить спрага все нема сил себе тримати в руках я просто з цієї ємності починаю пити і от питання Скільки ковтків я виконаю перш ніж мене перестане мучити спрага я га Не маю я буду пити до тих пір поки в мене не пропаде відчуття спраги оце цикл Wi Я повторюю одну і ту саму дію тобто виконую ковток ще ковток ще ковток ще ковток Поки в мене не виконається умова що відчуття спраги пропало оце цикл while в реальному житті тобто виконуємо доти доки умова у нас не виконала в мові pyon і в цілому в програмуванні while так само працює доти доки умова виконується тобто перед умова спочатку перевіряється умова потім виконується дія Потім знов умова дія умова дія і на кожному кроці цей цикл спочатку перевіряє умову а потім виконує дію або повтор дії отже як як як піде так скажемо Окей Ну давайте щось таке зробимо [музика] якесь число створимо давайте отаке якесь число і наприклад Давайте я буду викидати кожну останню Я думаю останню зробити Да я буду викидати кожну останню цифру числа доти доки в мене число більше детьох або більше 20х давайтетак во так Поки в мене число більше 20х тобто поки умова не виконалась що вона більше 20тьх я буду викидати одну останню цифру числа це можна дуже легко зробити за допомогою бінарної дії наприклад давайте навіть цілочислено зробимо так от поділимо на на 10 цілочислено і потім подивитися що в мене Останеться ну залишиться в результаті 13 Окей тобто з мого числа на кожному кроці було викинуто одну цифру можна до речі навіть подивитися на ці цифри які ми викидаємо так це відсоток 10 ну тобто мод візьмо Так ми викинули першу двійку Да це так потім ми викинули трійку цифру три і потім ми виконали нуль Окей типа чо б це й ні тобто цей цикл у нас виконувався доти доки виконувалась умова що нам один у нас більше 20тьох як тільки умова всьо Ну і наш цикл теж зупинився Тобто це цикл зперед умовою доти доки виконується або не виконується умова тут там є два різні налаштування у нас виконується дія як тільки умова Все або виконалась або не виконалась значить у нас закінчення дій цикла цей цикл трошки складніший здається але тільки на перший погляд на наступному занятті ми з вами більш детально присвятимо час вайлу я покажу як ним краще користуватися на прикладі певних задач а сьогодні давайте присвятимо час саме та forри вирішимо кілька задач як приклади і зіграємо в гру яку гру Я зараз розповім вам і навіщо в неї грати теж так Ну давайте кілька таких задач на цикли forта [музика] for дайте-ка [музика] подумати А давайте прямо таку складну задачу яка здається невирішабельною прямо зі стартом замінити Кожен другий символ рядка [музика] на велику літеру якщо цей символ є літерою [музика] так ну виглядає непогано так замінити Кожен другий символ рядка на велику літеру якщо цей символ літера Давайте так ще допишу відповідь отримати одним рядком отак щоб ми не відкрутилися від тої умови що нам потрібно точно використати якийсь цикл питання тепер в циклі який саме for або for І отут я вам так скажу в деяких задачах можливо використати і той і той цикл вони будуть скажемо заміняти один одного А в деяких задачах ні в даному випадку можна в принципі Кожен другий Нам потрібен в принципі я вам так скажу можна тут застосувати і той і той цикл але зручніший буде форич чому ой точніше не Фрич а for чому саме for буде зручніший причина банальна тому що нам потрібно якось брати Кожен другий символ і при цьому нам ще й потрібно відповідь в одному рядку зібрати Тобто нам потрібно якось брати всі символи по черзі але деякі з них перетворювати на великі літери Якщо це літери наприклад Кожен другий символ а деякі ні тобто все починається з малюнку от знов таки раджу тут намалювати це буде супер зручно ой трошки занадто було так давайте намалюємо намалюємо щось скосив я Ну нічого там косо трохи підійде так далі слово якесь наприклад от є в мене багатсько тут символі різноманітних тепер моя задача якось з цим щось зробити Що означає кожен другий Ну по-перше я б індекси спочатку розглянув так давайте індекси 0 1 2 3 4 5 6 7 віім символів у мене виходить значить Кожен другий почну Я з нульового за індексом і Кожен другий або частота або інтервал 2 у мене буде отут во наступний символ отут во потім отут во а отого вже немає символа все ну тут все очевидно тобто мій алгоритм повинен буде взяти оці символи Це я тільки приклад наводжу я буду знов таки писати універсальну відповідь універсальний алгоритм Отже Кожен другий символ частота два Я повинен ці символи взяти перетворити на великі літери і записати їх сюди ж назад в рядок А оце вже трошки складніше ніж хотілося б але все одно це все ну Спокійно можна виконати А як ми можемо це зробити наприклад в даному випадку скажемо викидаємо цей елемент на його місце ставимо новий ну руками це скажемо отак от на малюнку дуже просто виглядає але питання як це в програмі зробити рядок та незмінна структура даних але Вихід є ми з вами на попередньому занятті розглядали як ми можемо взяти рядок розрізати навпіл і обміняти місцями його половини в принципі тут ми так само з вами будемо робити ми будемо брати відрізати від рядка конкретний символ і на його місце додавати до рядка або дописувати в рядок інший символ ну тобто той же символ який ми звідти вирізали але його копію вже збільшено ну тобто перетворено на як це називається на велику літеру Ну нехай буде велика літера отже як би це виглядало в коді це явно цикл який повинен виконати якусь кількість кроків для конкретного рядка тобто перше з чого б я почав знову таки б створив би рядок Давайте інpт зробимо щоб у нас не було навіть Як то кажуть навіть можливості побачити що там зарядок у нас буде Так інпут нам рядок нам користувач щось там введе далі цикл ще раз повторюю я буду використовувати тут cкle for Тому що мені потрібно Кожен другий символ брати і ще якось розрізати рядок на частини А тут логіка буде наступна Я кожен раз буду рядок розділяти на декілька частин от як ми з вами навпіл розділяли тільки Тепер я буду не на рівні частини розділяти А на різні частини і завжди буду викидати один символ на його місце новий і перетворювати на велику літеру якщо це літера звісно такс А так довжина рядка Ну давайте len ср поставимо а буду записувати в змінну краще можна звісно було оце напряму запхати в rнч о такво але ну я краще зроблю це декларативно якщо бажаєте можете потрошку спробувати скорочувати код тобто тут не обов'язково цю зміну створювати але я створю просто щоб вам було зрозуміліше що я роблю тобто поетапно виконаю дії Так отже поїхали далі далі Мені необхідно розривати рядок на частини фактично тобто Мені потрібно взяти Кожен другий а от Кожен другий отут Мені потрібна умова будь ласка питання Я тіки що щось на подобає цього написав що ви зараз пишете так супер можеш код скинути в чатик Давай [музика] подивимось чо стала стрчка пустою зараз а а чого став пустою А хто стало порожнь Я не зрозумів вона сталось Вона я писав тут код а вже немає натисни Ctrl Z комбінацію клавіш і воно поверне тобі код що ти його випадково вибі а бачу бачу бачу бачу бачу так супер Окей поки що продовжуємо далі поки я в чатику не бачу ніякого коду Отже а Ми створюємо спочатку умову як ми будемо бра брати Кожен другий бо наш оцей воцикл зараз бере будь-який елемент я визначаю умову Кожен другий Кожен другий - це той який поділяється на два без остачі Це очевидно дивіться ну0 на д без остачі 2 на 2 без остачі 4чти і 6 на 2 без остачі так само поділяється Отже зробимо Тут те саме далі як я буду рядок поділяти на частини Спочатку я від рядка Давайте так буду назвати Left Part тобто ліва частина рядка я буду зрізати все що до цього символа от саме зрізати брати копію рядка щоб зрізати так до цього символа це від початку до I а воно там щось нам зріже е Як ви зрозуміли від початку до I воно зріже нам той самий символ який нам і потрібно перетворити е далі Так ану Зачекайте той самий символ потім ми візьмемо конкретний символ да воно спрацює так лівий потім той символ який нам потрібно перетворити якщо він літера так а як би це назвати Target А давайте цільовий символ який нам і потрібно перетворити так Це в нас буде конкретно оцей за індексом символ який ми знайшли що він Кожен другий типа потім праву частину те що все ну все що лишається в рядку окрім лівої частини самого символа і все що інше лишається так right Тобто ми зрізаємо починаючи з наступного символа від оцього во і до кінця рядка так I +1 це наступний символ від поточного який ми змінюємо і до кінця Окей розрізали рядок на три частини тепер назад збирає відповідь окрім того що таarget симvл нам потрібно перетворити на велику літеру всь а дивіться функцію apper я сказав Якщо це літера але функція аer вона і не спрацює для будь-якого іншого символа окрім літери тобто я можу не перейматися тут мені не потрібна додаткова логіка функція аer працює тільки для літер Якщо там буде цифра цифра не зміниться абсолютно У мене якраз Тут таке буде окей далі третім етапом як ви бачите на три етапи розділив розріз рядка на частини перетворення цільового елемента на велику літеру якщо це літера і третій етап збірка назад фінального рядка тобто беру назад рядок один і тепер перезаписую беру ліву частину додаю до неї поточний Ой я тут написав так беру ліву частину рядка додаю поточнону поточний символ змінений якщо він змінився звісно і додаю праву частину все як ви бачите да дій багато але вони логічні я порізав рядок на частини щоб всунути сюди новий символ А старий звідти фактично викинути Окей давайте подивимось так Це в нас вже буде видозмінений рядок Ну так Ну давайте оцей меній приклад Ot 2 3е Як ви бачите гарантовано Кожен другий у нас символ перетворився F о D а трійка у нас ніяк не перетворилася бо це не літера тобто трійку воно взяло за алгоритмом але трійка не перетворилась на велику літеру бо це не літера Окей то Тобто ми бачимо що у нас виконано логічне рішення Я не кажу що тут не можна було ще щось написати або Наприклад взяти цикл for взагалі і через нього вирішити До речі через for теж можна Який ще наприклад існує варіант рішення цієї задачі у нас є інший варіант ми можемо не писати умову ми можемо робити налаштування через Range почати з нульового за індексом елемента продовжувати до кінця рядка включно Кожен другий елемент тоді нам просто треба виконати Цю умову все рішення те саме але я позбувся умови ну Давайте перевіримо на всякий випадок як ви бачите відповідь не змінилася але ми виконали умову у циклів і у багатьох задач точніше не у циклів А у багатьох задач є кілька варіантів рішень оце Перший варіант він логічний Я побудував логіку я взяв цикл за допомогою цієї логіки отримав Кожен другий елемент і потім виконував дію для цього елемента але знаючи З сьогоднішнього заняття що в мене є налаштування Range різноманітні там де я можу виставляти оці інтервали які схожі на зріз то я можу цим скористатися я можу не брати всі елементи ряд я можу частину цих елементів пропустити Тобто взагалі їх не роздивлятися Ну як сказати обмеживши просто індекси якими я буду користуватися тобто тут у мене тепер буде взято Кожен другий індекс рядка А не всі поспіль як в попередньому варіанті чесно сказати вигідніше буде другий варіант чому все дуже просто цей цикл виконає рівно стільки кроків кількість символів в рядку а оцей цикл він виконає рівно в половину менше кроків від довжини рядка тому що він візьме просто не всі поспіль розташовані індекси а Кожен другий тобто цей цикл вигідніший він спрацює швидше Наприклад якщо взяти рядок довжиною там 10 мльнв символів То цей цикл буде повільніший ніж цей бо цей банально виконає в половину менше кроків а Повірте менше кроків швидше працює з циклом форич не буду показувати там алгоритм вийде такий собі я вже так собі в мізках його прикинув він ну Повірте тут краще форичне застосовувати немає сенсу Ну да він тут прям погано підійде тут краще циклф так добре це одна з можливих задач Я просто хотів з вами її розібрати е ну на реальному прикладі Я маю на увазі далі ми з вами ще в наступному занятті з циклами попрацюємо не переймайтеся домашнє завдання буде поки що простеньке на цикли але як ви вже потрошку звикаєте в третьому рівні треба буде або подумати або зробити перші два рівні так Чи є зараз якісь питання з приводу вирішеної задачі або роботи циклів for for або while так якщо зараз питань Поки що немає Немає давайте зіграємо в гру Так зараз я зроблю так я сподіваюсь ви чули про таку штуку як кахут ми з вами звісно в кахут будемо грати не на будь-яку тематику А на тематику мови програмування python Так зараз я тільки авторизуюсь Зачекайте трохи Так зараз виберу щось цікаве нам такс давайте виберемо оцей перший підійде так дивіться Зараз я в чатик закинув посилання Зараз воно сформується Так ви можете сюди підключитись до цього кахуту з чого завгодно Я маю на увазі з будь-якого пристрою телефон ноутбук неважливо ви можете Перейти за посиланням яке я дав там вже буде автоматичне G PIN цей задіяно вам необхідно ввести своє прізвище або ініціали щоб я міг вас розрізнити Ну бажано прям прізвище хоча б ім'я плюс або прізвище та ініціали це теж буде нормально так реєструйтесь будь ласка Євген питання Можна я через телефон та без проблем з будь-якого пристрою з якого тобі зручно головне ре qr-код да ти можеш qr-код відсканувати і підключитися без проблем головне зазнач прізвище та ініціали щоб я вас міг розрізняти якщо що Я на накритиity Я ще раз повторюю необхідно зазначити прізвище та ініціали або прізвище та ім'я або просто прізвище оке окей окей зараз зараз за Навіщо це робиться Я зараз вам покажу коли ми зіграємо в кахуд у вас у кожного після гри в кахуд буде певний рейтинг Тобто ви наберете певний рейтинг відповідей А за ці рейтинги потім можна буде отримувати бонуси до перевірок ДЗ що за бонуси я поясню після закінчення кахуту покажу приклад І поясню так я так зрозумів це всі хто бажає зіграти в кахут так хто це я Вибачте я хворію просто складно говорити без проблем підпишісь будь ласка прізвище ініціала або прізвище та ім'я А як перейменувати А я тебе скинув заново Зайди за посиланням і зроби ще раз повторюю це важливо щоб ви потім отримали свої бонуси за гру в каahут тобто за кожну гру в кахут Ви отримаєте певні бонуси які саме вам розповім пізніше після кахуту Тобто це певна можливість як можна підвищити рейтинг своїх дзешок Ну якщо наприклад по якихось причи ви там неправильно вирішили або не знаєте як правильно вирішити І от в кахутах можна заробляти бонуси на перевірку ДЗ так як в це грати у вас зараз з'явиться питання у вас з'явиться зараз питання потім варіанти відповідей ви на своєму пристрої просто тицяйте варіант відповіді або там червоний або синій або наприклад там в деяких кахутах буде чотири різних варіанта відповідей то вам треба правильний просто обрати якщо зображення дуже мілке Подивіться на свій девайс або на мій екран повинно бути видно просто натискаєте на варіант відповіді який вважаєте за правильний і чекаєте на інших так Ну як ми бачимо тут чомусь розділилися 50х 50 тобто цей момент виконати можна чому ми бачимо що це рядок літера wv і рядок помножається на число рядок помножити на число можна це називається оператор дуплікації А хто сказав що не можна помножити на кілька чисел ви ж пам'ятаєте як в математиці в принципі так і в програмуванні від обміну місцями від кількості множників у нас нічого не зміниться Тобто це дію можна виконати ми просто помножимо на оце потім на оце потім на оце все або одразу можна сказати так спочатку Т числа перемножаться А потім все це помножиться на рядок можна і так зробити тобто тут неважливо результат все одно не зміниться від цього Так поїхали наступне питання до речі тут є да ще час не забувайте що час на питання обмежений тобто тут бачимо таймер коли він закінчується на питання вже відповісти Не можна так що буде в консолі після виконання такого коду Тобто який результат на вашу думку ми отримаємо цей синенький зелененький червоненький чи жовтенький тобто replace що він у нас там робить треба пригадати lй ви самотужки повинні були розглядати lace - це функція яка дозволяє замінити символ або символи рядка зазначені наприклад цей символ заміниться на цей і там ще є додаткове налаштування в реплейсі одиничка Ну не одиничка а число туди можна поставити це скільки разів виконати таку заміну наприклад в даному випадку у нас перша літера о заміниться на велику і все на цьому реплей закінчить свою роботу бо тут написано один раз виконати таку заміну якщо б тут одинич не стояла то у нас би обидві літери о замінилися на великі але замінилися у копії рядка сам рядок звісно не зміниться тобто в консолі ми побачимо змінену копію рядка після реплейса Ну ми ще з вами з реплейсом попрацюємо не переймайтеся так який буде результат що ми виконаємо таку дію між двома рядками Так звісно результатом буде конкатинація двох рядків тобто Фактично конкатинація - це просто зліпляться ці два рядки між собою запам'ятайте що рядки - це не числа Це просто набір символів які ми можемо за допомогою цієї дії А це називається дія конкатинації між рядками просто зліпити їх в один рядок не Дода не відняти нічого іншого тут зробити не можна просто зліпити тобто синій варіант не підходить бо це математика математики тут немає це програмування і це дія конкатинації тобто два рядки просто зліплюються в один так що отримаємо у відповіді ой-ой-ой тут так складно все написано спочатку треба сюди дуже уважно подивитися що це я вам подібні речі показував просто я їх до цього розписував по різних рядках тому я вам сьогодні і казав що дивіться однорядкові варіанти коду їх дуже складно читати і я знаю чому бо я теж цей момент проходив в свій час так дійсно у нас вийде Код Asian ope Тобто це означає що оця частина рядка це права половина рядка права половина рядка - це у нас слово е ну якщо порахувати по кількості символів поділити на два Ну як я вам там розмальовував тоді пам'ятаєте на попередніх заняттях далі ми додаємо три перші символи саме перші три перетворені на великі літери тобто перші три - це у нас ope тобто спочатку йде as права половина і потім три перші символи рядка великі літери ну перетворені на великі літери все це й буде відповідь тобто нічого страшного просто треба було все по поличках розкласти і подумати так яка кількість літер видалиться з рядка що означає видалиться ще раз повторюю lй може заміняти але заміняє тільки у копії Чи можемо ми замінити з символ на нічого тобто чи це можливо Чи це законно І чи це взагалі спрацює на це питання ви можете відповісти тільки якщо експериментували над а функціями рядків жодної літери не буде видалена Чому Відповідь банальна тому що всі ці дії виконуються над копі рядка тобто результат нікуди не запишеться а в цілому концепт замінити символ рядка на нічого Він працює Повірте і ми так з вами будемо це використовувати але трохи пізніше Тобто ми можемо дійсно взяти будь-який символ рядка і замінити його на нічого Але якщо ми результат не запишемо назад в сам рядок тобто не поставимо тут дію привласнення то це ніяк не відобразиться на самому рядку тобто змін ми не поба якщо не запишемо відповідь запам'ятайте рядок незмінювана структура даних якщо дію Ми цю або результат дії над копії не записали нікуди результату ми не побачимо це неминучий факт так Чи можливо виконати зріз отакий во це до речі питання когось З вас хтось мені з вас таке питання задавав на занятті Я вже точно не пам'ятаю хто так Да ми можемо такий зріс виконати тобто помилки не буде але ми нічого не отримаємо відповіді чому тому що мінус5ятий за індексом елемент рахуємо -1 -2 -3 -4 -5 ну з кінця це оця літера а супер далі другий за індексом елемент 0 1 2 це у нас літера і це другий за індексом елемент і якщо ми почнемо зріс з п'ятого за індексом елемента і будемо рухатись в кінець рядка Ми ніколи не досягнемо другого за індексом рядка ще раз рядок - це не коло в якому отак от е скажемо по по периметру кола розташовані символи там о п Ні це не коло не сприймайте це колом це погана інтерпретація забудьте про це рядок - це лінія в якій ми робимо зріз і якщо ми не можемо досягнути з мінуспти двох такий зріз виконається але в результаті він нічого не поверне бо немає символів в такому зрізі вони просто відсутні бо неможливо так зробити нема там символів між цими двома індексами мається на увазі при зрізі так код виконається без помилок Якщо так його написати і виконати якесь число вводиться знак якийсь обирається дуже цікаво так помилка дійсно тут буде в коді помилка все ну занадто очевидно Чому не можна використати змінні які не об'явлені Тобто ми не можемо використати оцю умову використати тут змінні скажемо додати їх бо змінних ще не існує до цього моменту змінні існують Аж о там знизу дивіться програмування це саме таким чином працює Якщо змінні створені до умови то їх можна В умові використати якщо змінних там не створено Це помилка не можна використати того що ще не створено в коді Я бачив руку питання будь ласка мене в мене було питання Я не зовсім зрозумів чому не як це працювало у попередньому питанні зріс А так ще ще раз От у нас там є слово якесь так Operation Да у нас там Слово було так що ми бачимо у нас там зріз від мінус пятого до другого він неможливий чому Бо мінус пятий так мінус перший мінусдгий мінус третій тобто мінус пятий це ми з кінця відраховумо мінус пятий літера а Окей це у нас мінус пята за індексом літера ну або символ рядка мінуспятий з нього ми повинні почати зріз зріз у нас прямий що означає прямий значить він буде рухатись з зазначеного за індексом символа до кінця рядка кінець рядка отут во давайте намалюємо це кінець рядка супер далі індекс де я повинен закінчити зріз отут це другий індекс це індекс два тобто нульовий перший другий це літера і оцво це другий за індексом елемент яким я повинен закінчувати зріз але рядок це не коло ще раз ми можемо почати з мінус 5того і рухатись до кінця але ж рухаючись до кінця ми тут не досягнемо другого за індексом елемента його тут не існує Ніде в принципі бо він знаходиться раніше ніж у нас початок зрізу Тому цей зріз не поверне помилки а поверне нічого порожнечо бо неможливо зрізати символи від мінус 5ятого до другого за індексом елементу тому що зріз починається з зазначеного індекса рухається в кінець а в кінці нема другого індекса тобто саме таким чином це і спрацює Єгор а тобто цей рахунок не може йти у другу сторону так Так але якщо б ми наприклад інакше написали якщо б ми тут поставили ще періодичність і скажемо скажемо поставили б тут -1 тоді б це спрацювало ми б могли з мінус пятого досягти другого за індексом елементу чому бо ми б перевернули зріз оцим ну оцією частотою або оцим періодом ми б тоді зріз починали з зазначеного за індексом символа і рух би до початку рядка А отут можна дістати другий за індексом елемент тобто Оце воно було б Аріна будь ласка питання Я вибачаюсь В мене на мобільному інтернеті якось в мене вилетіла типа оця шту А ні все все я можу дальше проходити так добре якщо у вас викидає Да ви просто потім Заходьте за тим же самим гемпном і воно повинно вас під тим же самим акаунтом пустити Добре дякую Так поїхали далі так чи знайде наступна програма індекси літери а О до речі знаєте що це прикольне питання але ми ще його не розглянули Я чомусь забув про це Давайте ми проігноруємо просто це поїхали далі а просто то питання викинемо та і все так чи буде відповідь типу інt уважно Подивіться Ін - це ціле число мається на увазі чи буде оця змінна містити ціле число після от виконання таких дій Чи не буде Чи буде звісно ні все супер просто тут все занадто очевидно дія дленя проста дія ділення в програмуванні завжди повертає не ціле число Там ніколи в житті не повернеться ціле число це дія спеціально так розроблена вона ніколи не поверне ціле число у відповіді тобто у відповіді Ми отримаємо 5 кра0 це не ціле число це флот число для програмування це адекватна дія і це правильне рішення звісно для нас як для людей це трошки не звично Але це так це дія чітко повертає тип флот навіть якщо тут натіло поділиться ця дія автоматично не буде в ін перетворювати число у відповіді завжди не ціле завжди флот але якщо б я поставив там дію цілочисленого ділення то тут навпаки завжди ціле число навіть якщо націло не ділиться тобто тоді Да було б ціле число це такий знаєте я в кахуті буду завжди вам писати такі питання там де є нюанси які я розглядав з вами А ви могли трошки їх підзабути Це зроблено для того щоб ви швидше їх запам'ятали Окей тут теж знов [музика] подумати що виведе в консолі тобто число потім щось ми з ним зробили і потім ми вивели його в консолі поділени на 10 націло як я сьогодні розповідав скажемо там хвилину попередньому питанні поділити націла Це означає не задіювати і не показувати не цілу частину відповіді так Да ми тут дійсно отримаємо 24 чому 24 тому що ще раз більшість того що ми розглядали поки що це незмінювані змінні або незмінювані структури даних змінна нам о вона не змінювана поки я отут от не написав дію привласнення оця дія ну її результат нікуди не запишеться вона автоматично в цю змінно Не запишеться тому ця дія ні на що не впливає тобто тут одразу треба було дивитись сюди Тобто можна оцю дію просто проігнорувати бо вона нічого нам не зробить А отут ми вже бачимо що 246 поділе націло на 10 це означає результатом буде просто викидання шістки і у нас лишиться 24 тобто не ціла частина яка у нас буде якраз 0,6 після такої дії вона викидається така дія цілочисленого ділення просто ділить нацело це тут невеличкий такий п'єдестал Поздоровляємо Максима з перемогою але це не зовсім перемога зараз поясню чому в цьому курсі в цілому всі бонуси які ви будете отримати всі кахути в які ви будете грати і марафони буде враховуватись ваш персональний рейтинг правильної кількості відповідей тобто у нас з вами рейтингова система не скажемо перше друге третє місце місце взагалі не має значення головне ваш рейтинг тобто ваш персональний рейтинг От наприклад Максим відповів правильно Ну не на 60 Там ми одне питання пропускаємо значить на 70 від від питань правильно відповів значить у нього рейтинг цього кахута 70 на що це впливає зараз покажу для вашої групи після заняття буде зроблена така спеціальна таблиця Ні не така А отака отака спеціальна таблиця з рейтингом кожен гравець в кахут буде отримувати свій рейтинг Давайте я краще оцей розглянемо да це більш наближений Там просто та група вже закінчила там багато чого запо не дуже вам буде зрозуміло Отже наприклад зараз Максим в кахут набрав рейтинг від 70 до 79% значить він отримає одиничку от в цьому рейтингу що означає ця одиничка дивимось вниз тут написано за вісім Ігор з рейтингом 70-79% ви можете отримати 20 поінтів знижки на будь-яке дз ці поінти неможливо розірвати Тобто ви можете ці поінти використати на одне конкретне ДЗ якось так тобто використати і забути про це але я перероблюю зараз цю систему потім пізніше вам розповім як я її переробив Тобто ви отримаєте наприклад вісім Ігор зіграєте з таким рейтингом ви зможете отримати 20 поінтів знижки тобто Наприклад якщо ви ДЗ вирішили скажемо на 60 тобто другий рівень ДЗ вирішили а наприклад бажаєте більше отримати Ви можете мені сказати там я хочу за кахут використати свої 20 понтв у вас буде доступ до цієї таблиці ви завжди зможете моніторити Що у вас там змінилось в рейтингу і я наприклад такий Окей у тебе в кахуті там є вісім ігр від 70 до 79% і ти можеш використати ці 20 поінтів тобто я вам поставлю за дз не 60 а 80 поінтів тобто плюс 20 чисто за ігри вкаху Тобто Це оці бонуси Також ви зможете бонуси Як ви бачите за марафони отримувати марафони у нас будуть пізніше Потім я вам розповім про це тобто у вас така буде табличка вашого персонального рейтингу за допомогою якого ви зможете потім за цим рейтингом отримати знижки на дз Я думаю тут плюс-мінус Зрозуміло Але я ще раз потім все одно це вам повторю і нагадаю так чи лишились на сьогодні якісь питання Окей якщо питань на сьогодні немає тоді всім Гарного вечора до зустрічі Вже наступного тижня Хоча ні стоп у нас сьогодні А на сьогодні тільки вівторок я щось прогавив момент я думав середа а тоді до п'ятниці в кінці тижня ми з вами побачимось на наступному занятті доброгобачення Гарного вечора побачення дякую