[МУЗЫКА] Мы создали функцию, которая обрабатывает телефонные номера, но пока только для цифр 2 и 3. Но это мы сделаем потом. Сейчас важнее другое. Сейчас наша функция просто печатает результат, мы его никак использовать не можем, мы можем на него только посмотреть, а хотелось бы иметь возможность его использовать. Вот давайте вспомним, как работает, например, функция int. Мы можем ее значение, результат, который она показывает, присвоить какой-то переменной. Например, если нам ввели год, то мы можем сказать, какая-нибудь переменная year равна значению, которое нам дает функция. Допустим, посмотрим, давайте сделаем print. Как будет выглядеть переменная year? Вот мы смогли присвоить переменной year значение — целое число, которое получилось после вызова функции int. Давайте попробуем по аналогии присвоить значение, которое печатала переменная phone_adaptation какой-нибудь функции, например, new number. Не функции, конечно, переменной. Заодно назовем ее просто number. Номер телефона. Можно сказать, phone number, но не в том сейчас суть. Распечатаем, что получится: print, number, телефонный номер имеется в виду. Запускаем. Ошибка. Phone_adaptation is not defined. Кстати, хорошая ошибка, хорошо, что она у нас появилась. Мы же сейчас в новом блокноте, и он совершенно не обязан помнить, что мы уже когда-то запускали эту функцию и определяли эту функцию, что важнее. Поэтому нужно обязательно запустить код с определением функции, а потом уже пытаться разбираться со значением. Запустим. Она сработала, но вместо значения переменной вывела none. Этот вывод у нас появился из-за того, что функция просто печатает что-то. Если мы это уберем, давайте уберем, сохраним то, как теперь у нас должна работать функция, и запустим код заново, то у нас просто вывелся год правильно, а номер телефона вывелся неправильно. Давайте вернем, чтобы у нас все-таки печатало, что нужно. В чем дело? Дело в том, что функция int возвращает это число, а наша функция ничего не возвращает, или можно сказать, возвращает none. Чтобы она вернула номер телефона, нам нужно в явном виде это написать. Напишем мы это с помощью слова return, которое переводится как «верни». Вот наша известная, знакомая нам функция, а перед функцией принято писать, что эта функция делает, какие параметры принимает на вход и какие значения она возвращает. Вот мы и прописали. Я заранее прописала, чтобы сейчас время не тратить, но показываю, что вначале мы должны определить, указать, что именно делает эта функция. Эта функция обрабатывает телефонный номер. Входные ее параметры — это строка с номером телефона, в котором есть буквы, а возвращает она обработанную строку, где все буквы заменены на соответствующие цифры. Вот у нас первые шаги уже указаны правильно, а чтобы последний был правдой, нужно прописать, что она должна вернуть обработанный номер телефона. Напишем return, а обработанный номер телефона содержится у нас в переменной new_number. Запускаем. Определение функции сохранилось, и теперь давайте посмотрим, получится ли присвоить ее результат какой-то переменной. Напишем, что здесь у нас number, и попробуем его распечатать, print number. Получилось, смотрите. Мы распечатали то, что вернула нам функция. Мы просили вернуть ее new number, она нам и вернула new number. На самом деле скобки здесь совершенно не нужны. Вот так все тоже будет прекрасно работать. Запустим. И еще раз запустим. Да, все работает. Скобки после return ставить не надо. Теперь посмотрим, зачем мы вообще все это сделали. Затем, чтобы наша программа обработки телефонного номера выглядела понятнее и компактнее. Помните, у нас был номер телефона отправителя, потом какие-то инструкции, потом номер телефона получателя. И выглядело это громоздко. А теперь мы сделаем, чтобы это выглядело гораздо более компактно. Сначала нам нужно ввести номер телефона отправителя, то есть phone_number_sender — номер телефона отправителя. Вводим какую-то строку, там какой-то input. Потом мы должны обработать тот номер телефона, который нам ввели. То есть мы вызываем функцию phone_adaptation для вот этой строки с отправителем. И присвоим ее какой-нибудь переменной, например, new_phone_number_sender. На самом деле, чем длиннее мы пишем названия переменных, тем нам понятнее, а смотреть на это становится не очень удобно. Вот смотрите, сейчас оно у меня даже за пределы экрана уйдет. Давайте назовем ее хотя бы new_number_sender хотя бы вот так, чтобы оно на экран умещалось. Посмотрим, что получилось, напишем print, чтобы было видно, как теперь выглядит номер телефона отправителя. То есть мы ввели номер телефона с буквами, преобразовали так, чтобы все буквы превратились в цифры, и смотрим, как теперь выглядит номер телефона, где все буквы превратились в цифры. Это все пока про отправителя. Потом у нам какой-то другой код программы. Вот просто мы печатаем, что здесь происходят какие-то другие инструкции, какая-то информация по ссылке обрабатывается. Скобочку не забудем закрыть. И делаем ровно то же самое с получателем. Вводим номер телефона получателя через input. Обрабатываем номер телефона получателя с помощью функции phone_adaptation, то есть та же самая строчка, только везде вместо отправителя у нас будет получатель. Опять она перестанет умещаться, давайте я буковкой r просто здесь помечу, что это получатель, чтобы у нас код умещался на экран. То есть здесь нужно искать баланс между понятными названими переменных и не слишком большой длиной этих названий. И посмотрим, что получилось. Распечатаем то, как у нас преобразовался телефон получателя. Работать будем со строчкой, давайте откуда-нибудь скопирую, чтобы не переписывать все символы в номере телефона. Еще раз: можно отделить пробелами все про получателя. Точнее, все про отправителя, какая-то другая информация по ссылке, и все про получателя. Все — это что? Вводим номер телефона, обрабатываем, печатаем, что получилось. Давайте запустим, посмотрим. Так, вводим номер телефона сначала отправителя, допустим, он у нас будет вот таким. Вариантов не так много, потому что пока у нас можно использовать цифры только 2 и 3. Соответственно, буквы от a до f, примерно. Так, вот преобразовалось. Отлично. Произошла обработка информации по ссылке, и в конце мы также вводим номер телефона получателя. У них хотя бы номера телефонов не совпадают, это хорошо. И вот какая короткая программа получилась по сравнению с тем, что у нас было. Здесь, конечно, хотелось бы опять добавить инструкции тому, кто вводит данные, потому что непонятно, в каком порядке что вводить. Если бы мы это прописали, у нас получился бы довольно-таки длинный в строчку код. Зато было бы все полностью понятно. Давайте-ка запустим. Опять вводим номер телефона отправителя. Здесь мы хотя бы знаем, что мы вводим, да? То есть, тут я прочитала и сразу знаю, о чем здесь речь. И вот у нас даже появилась информация, что телефон отправителя на самом деле такой. Теперь мы вводим номер телефона получателя, и мы знаем, что мы делаем, и видим, какой он получился у нас. То есть вводить информацию для пользователя очень даже полезно. Но, чтобы наша программа была наиболее удобной, мы должны все-таки ввести обработку не только букв, соответствующих цифрам 2 и 3, но и всем остальным цифрам тоже. Вернемся к нашей функции. И давайте сюда ниже пропишем все остальные буквы и цифры. Хорошо бы, чтобы у нас где-то сохранился этот фрагмент кода, чтобы нам не пришлось сейчас заново это все выписывать. Скопируем, добавим сюда и сделаем необходимые отступы. Все, определяем функцию. Надеемся, что теперь она работает, и тогда мы сможем обработать номера с другими буквами, не только от a до f. Давайте проверим, сможем ли мы вот такой номер обработать. Добавлю здесь пробелов, просто чтобы нам было видно, что здесь происходит. Давайте. Так, вводим номер телефона отправителя. Давайте, он у нас будет таким. Сработало, и теперь попробуем номер телефона получателя ввести. Тоже сработало. Замечательно. На самом деле можно сделать еще чуть-чуть компактнее, а именно, не заводить отдельную переменную для каждого номера, а сразу input передавать внутрь как аргумент функции. Мы так уже делали на маленьком примере, здесь это тоже можно сделать. Выглядела бы наша программа вообще в пять строчек. Но то, что эти строчки длинные, связано исключительно с тем, что мы пытаемся назвать все переменные максимально подробно, чтобы понимать, с чем мы работаем. Вот видите, здесь phone_adaptation вызывается от input оба раза, и никакой предварительной информации о номере телефона пользователя нам сохранять в отдельную переменную не нужно. То есть в отдельную переменную сохранять не надо. Запустим и давайте посмотрим. Сработало. И с другим номером телефона. Тоже сработало. То есть мы сделали функцию более компактной, более читаемой, не функцию, а нашу программу. Мы сделали нашу программу более компактной и читаемой по сравнению с тем, что смотрели в самом начале. Но на самом деле можно ее сделать еще лучше. Скоро мы этим займемся. [МУЗЫКА]