[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.00,Default,,0000,0000,0000,,К сожалению, у нас пока нет особых поводов для радости. Dialogue: 0,0:00:04.00,0:00:07.00,Default,,0000,0000,0000,,Себастьян говорит, что пройдет еще несколько лет, прежде чем у меня появится Dialogue: 0,0:00:07.00,0:00:11.00,Default,,0000,0000,0000,,свой собственный беспилотный автомобиль, но главная проблема в том, Dialogue: 0,0:00:11.00,0:00:13.00,Default,,0000,0000,0000,,что мы еще не поговорили о том, как использовать процедуры. Dialogue: 0,0:00:13.00,0:00:17.00,Default,,0000,0000,0000,,Мы всего лишь научились создавать их; пока мы не сможем их использовать, Dialogue: 0,0:00:17.00,0:00:19.00,Default,,0000,0000,0000,,у нас не будет веской причины для радости. Dialogue: 0,0:00:19.00,0:00:22.00,Default,,0000,0000,0000,,Мы вскоре научимся ими пользоваться и снова сможем широченно улыбаться. Dialogue: 0,0:00:22.00,0:00:25.00,Default,,0000,0000,0000,,А сейчас мы собственно и узнаем, как использовать процедуру. Dialogue: 0,0:00:25.00,0:00:32.00,Default,,0000,0000,0000,,Для этого нам понадобится <имя процедуры>, за которым следует Dialogue: 0,0:00:32.00,0:00:36.00,Default,,0000,0000,0000,,открывающая скобка и список <входных данных>. Dialogue: 0,0:00:36.00,0:00:40.00,Default,,0000,0000,0000,,В принципе их может быть сколько угодно, но их количество должно совпадать с Dialogue: 0,0:00:40.00,0:00:42.00,Default,,0000,0000,0000,,тем, что ожидает процедура. Dialogue: 0,0:00:42.00,0:00:44.00,Default,,0000,0000,0000,,Эти входные данные иногда называются «операндами». Dialogue: 0,0:00:44.00,0:00:46.00,Default,,0000,0000,0000,,А иногда – «аргументами». Dialogue: 0,0:00:46.00,0:00:48.00,Default,,0000,0000,0000,,Мы не будем спорить, что правильнее. Dialogue: 0,0:00:48.00,0:00:50.00,Default,,0000,0000,0000,,Мы просто будем называть их входными данными. Dialogue: 0,0:00:50.00,0:00:52.00,Default,,0000,0000,0000,,Вообще-то вы уже использовали похожую запись. Dialogue: 0,0:00:52.00,0:00:57.00,Default,,0000,0000,0000,,Еще в разделе 1 вы узнали, как использовать метод find() строковых переменных. Dialogue: 0,0:00:57.00,0:00:59.00,Default,,0000,0000,0000,,В find() передаются один или два входа. Dialogue: 0,0:00:59.00,0:01:01.00,Default,,0000,0000,0000,,Первый – это строка. Dialogue: 0,0:01:01.00,0:01:04.00,Default,,0000,0000,0000,,Строка, которую вы ищете – это первый параметр, Dialogue: 0,0:01:04.00,0:01:07.00,Default,,0000,0000,0000,,а необязательный второй – это целое число, позиция, с которой нужно начать Dialogue: 0,0:01:07.00,0:01:09.00,Default,,0000,0000,0000,,поиск данной строки. Dialogue: 0,0:01:09.00,0:01:13.00,Default,,0000,0000,0000,,В лекциях раздела 1 мы нашли множество применений методу find(), а вы закрепили эти знания, Dialogue: 0,0:01:13.00,0:01:15.00,Default,,0000,0000,0000,,выполняя домашнюю работу. Dialogue: 0,0:01:15.00,0:01:17.00,Default,,0000,0000,0000,,find() слегка отличается от процедур, которые вы определяете самостоятельно. Dialogue: 0,0:01:17.00,0:01:19.00,Default,,0000,0000,0000,,Во-первых, он встроен в язык. Dialogue: 0,0:01:19.00,0:01:22.00,Default,,0000,0000,0000,,Во-вторых, помимо уже упомянутых, у нас есть Dialogue: 0,0:01:22.00,0:01:25.00,Default,,0000,0000,0000,,еще один вход – вот этот. Dialogue: 0,0:01:25.00,0:01:31.00,Default,,0000,0000,0000,,У нас есть строка, в которой мы осуществляем поиск – к примеру, Dialogue: 0,0:01:31.00,0:01:34.00,Default,,0000,0000,0000,,переменная page – которая по сути является просто еще одним входом. Dialogue: 0,0:01:34.00,0:01:38.00,Default,,0000,0000,0000,,Позже мы поговорим о том, чем отличается такая запись, но в целом она Dialogue: 0,0:01:38.00,0:01:41.00,Default,,0000,0000,0000,,очень похожа на вызов процедуры, у которой один параметр находится здесь, Dialogue: 0,0:01:41.00,0:01:43.00,Default,,0000,0000,0000,,а остальные два – вот здесь. Dialogue: 0,0:01:43.00,0:01:46.00,Default,,0000,0000,0000,,Есть и отличия, но в этом разделе мы не будем на них останавливаться, Dialogue: 0,0:01:46.00,0:01:50.00,Default,,0000,0000,0000,,однако в дальнейшем вы узнаете, что на самом деле происходит при вызове метода. Dialogue: 0,0:01:50.00,0:01:55.00,Default,,0000,0000,0000,,У процедур, которые вы объявляете самостоятельно, нет Dialogue: 0,0:01:55.00,0:01:56.00,Default,,0000,0000,0000,,объекта, от имени которого они вызываются. Dialogue: 0,0:01:56.00,0:02:00.00,Default,,0000,0000,0000,,Есть только сама процедура и ее аргументы, или операнды, или входы – Dialogue: 0,0:02:00.00,0:02:03.00,Default,,0000,0000,0000,,как вам больше нравится – которые передаются в нее. Dialogue: 0,0:02:03.00,0:02:06.00,Default,,0000,0000,0000,,Посмотрим, как это работает, на примере простой процедуры. Dialogue: 0,0:02:06.00,0:02:10.00,Default,,0000,0000,0000,,Я определю процедуру rest_of_string(), и мы снабдим ее Dialogue: 0,0:02:10.00,0:02:13.00,Default,,0000,0000,0000,,параметром s; это значит, что у нее один вход и мы будем обращаться к Dialogue: 0,0:02:13.00,0:02:16.00,Default,,0000,0000,0000,,его значению через имя s. Dialogue: 0,0:02:16.00,0:02:21.00,Default,,0000,0000,0000,,Мы заставим ее возвращать все символы строки от первой [не нулевой!] позиции до ее конца. Dialogue: 0,0:02:21.00,0:02:25.00,Default,,0000,0000,0000,,Для этого мы будем использовать оператор индексации строк – return s[1:]. Dialogue: 0,0:02:25.00,0:02:31.00,Default,,0000,0000,0000,,Это даст нам ту же строку без первой буквы, то есть все символы Dialogue: 0,0:02:31.00,0:02:33.00,Default,,0000,0000,0000,,от позиции 1 до конца строки. Dialogue: 0,0:02:33.00,0:02:35.00,Default,,0000,0000,0000,,Вот их мы и вернем. Dialogue: 0,0:02:35.00,0:02:39.00,Default,,0000,0000,0000,,Итак, на выходе rest_of_string() будет новая строка, начинающаяся Dialogue: 0,0:02:39.00,0:02:42.00,Default,,0000,0000,0000,,со второй буквы входной строки. Dialogue: 0,0:02:42.00,0:02:45.00,Default,,0000,0000,0000,,Вот пример использования этой процедуры. Dialogue: 0,0:02:45.00,0:02:47.00,Default,,0000,0000,0000,,Мы можем вызвать ее напрямую. Dialogue: 0,0:02:47.00,0:02:51.00,Default,,0000,0000,0000,,Мы можем написать print rest_of_string. Dialogue: 0,0:02:51.00,0:02:53.00,Default,,0000,0000,0000,,Это наша процедура. Dialogue: 0,0:02:53.00,0:02:56.00,Default,,0000,0000,0000,,Теперь нужно поставить открывающую скобку и передать в нее входное значение. Dialogue: 0,0:02:56.00,0:02:59.00,Default,,0000,0000,0000,,У rest_of_string() один параметр, так что нам понадобится передать в нее Dialogue: 0,0:02:59.00,0:03:02.00,Default,,0000,0000,0000,,одно значение, и оно должно быть строкой. Dialogue: 0,0:03:02.00,0:03:05.00,Default,,0000,0000,0000,,Мы передадим в процедуру строку 'audacity'. Dialogue: 0,0:03:05.00,0:03:07.81,Default,,0000,0000,0000,,Когда мы вызываем процедуру, контроль переходит Dialogue: 0,0:03:07.81,0:03:10.00,Default,,0000,0000,0000,,к телу процедуры. Dialogue: 0,0:03:10.00,0:03:10.57,Default,,0000,0000,0000,,Мы можем представить, что сейчас делает интерпретатор. Dialogue: 0,0:03:10.57,0:03:17.00,Default,,0000,0000,0000,,Вместо выполнения кода, интерпретатор сделает переход. Dialogue: 0,0:03:17.00,0:03:21.00,Default,,0000,0000,0000,,Когда мы вызовем процедуру, он перейдет к выполнению кода внутри нее. Dialogue: 0,0:03:21.00,0:03:26.00,Default,,0000,0000,0000,,Он присвоит параметрам поданные на вход значения. Dialogue: 0,0:03:26.00,0:03:30.00,Default,,0000,0000,0000,,Мы можем представить это как операцию присваивания, которая присваивает s Dialogue: 0,0:03:30.00,0:03:31.97,Default,,0000,0000,0000,,переданное в процедуру входное значение. Dialogue: 0,0:03:31.97,0:03:36.00,Default,,0000,0000,0000,,Теперь нам нужно выполнить тело процедуры. Dialogue: 0,0:03:36.00,0:03:39.00,Default,,0000,0000,0000,,В данном случае оно состоит из одной команды – вот этой команды return. Dialogue: 0,0:03:39.00,0:03:43.00,Default,,0000,0000,0000,,Нам нужно вычислить это значение, s[1:]. Dialogue: 0,0:03:43.00,0:03:47.00,Default,,0000,0000,0000,,Оно будет равно строке 'udacity'. Dialogue: 0,0:03:47.00,0:03:49.00,Default,,0000,0000,0000,,Теперь перехойдем к команде return. Dialogue: 0,0:03:49.00,0:03:51.00,Default,,0000,0000,0000,,return означает, что мы переходим обратно. Dialogue: 0,0:03:51.00,0:03:56.00,Default,,0000,0000,0000,,Мы возвращаемся к месту вызова процедуры, но уже Dialogue: 0,0:03:56.00,0:03:58.00,Default,,0000,0000,0000,,с его результатом. Dialogue: 0,0:03:58.00,0:04:03.00,Default,,0000,0000,0000,,Когда мы переходим обратно, значение вызова становится равным значению, Dialogue: 0,0:04:03.00,0:04:04.00,Default,,0000,0000,0000,,которое мы вернули. Dialogue: 0,0:04:04.00,0:04:07.00,Default,,0000,0000,0000,,В данном случае это строка 'udacity'. Dialogue: 0,0:04:07.05,0:04:08.56,Default,,0000,0000,0000,,Итак, у нас пока нет собственной машины-беспилотника, Dialogue: 0,0:04:08.56,0:04:10.87,Default,,0000,0000,0000,,но теперь вы умеете определять и использовать процедуры. Dialogue: 0,0:04:10.87,0:04:12.74,Default,,0000,0000,0000,,Это очень мощная концепция. Dialogue: 0,0:04:12.90,0:04:14.99,Default,,0000,0000,0000,,Все, чем мы будем заниматься в рамках этого курса, как и деятельность Dialogue: 0,0:04:14.99,0:04:18.53,Default,,0000,0000,0000,,практически любого компьютерного программиста сводится к определению Dialogue: 0,0:04:18.53,0:04:20.70,Default,,0000,0000,0000,,процедур и их использованию. Dialogue: 0,0:04:20.70,0:04:22.78,Default,,0000,0000,0000,,А теперь у нас должна появиться широкая улыбка. Dialogue: 0,0:04:22.78,0:04:26.78,Default,,0000,0000,0000,,Мы можем думать о процедурах как о коде, преобразующем входные данные в выходные. Dialogue: 0,0:04:26.78,0:04:30.40,Default,,0000,0000,0000,,Мы также можем думать о людях как о существах, занимающихся тем же самым. Dialogue: 0,0:04:30.40,0:04:33.06,Default,,0000,0000,0000,,У нас есть входные значения, поступающие через глаза, через Dialogue: 0,0:04:33.06,0:04:35.69,Default,,0000,0000,0000,,рот – наверное, даже через нос. Dialogue: 0,0:04:35.69,0:04:39.08,Default,,0000,0000,0000,,Я не буду пытаться изобразить выходные данные человека-процедуры, но раз уж Dialogue: 0,0:04:39.08,0:04:41.50,Default,,0000,0000,0000,,процедуры играют настолько важную роль, мы посвятим им несколько Dialogue: 0,0:04:41.50,0:04:44.50,Default,,0000,0000,0000,,следующих заданий, чтобы убедиться, что вы хорошо их понимаете.