[МУЗЫКА] [МУЗЫКА] Сейчас мы посмотрим, как преобразовывать вещественные числа в целые. Иногда возникает необходимость округлить, то есть получить какой-то целый результат вычисления, и для этого в Python существуют несколько способов. Во-первых, нам понадобится библиотека для этого. То есть библиотека — это какой-то набор уже написанных функций, который в нашем случае встроен в стандартную поставку интерпретатора, то есть ничего дополнительно устанавливать не нужно. Большинство библиотек скачиваются и устанавливаются отдельно. Это очень удобно — один раз написали какие-то люди, и потом весь мир пользуется. Наша библиотека содержит в себе много математических функций, в частности функцию округления, которую мы сейчас будем использовать. Библиотека подключается несколькими способами, первый из них — это import math. Библиотека называется math, и import — понятно, что импортировать. И теперь вы можете получить доступ ко всем функциям этой библиотеки. Сейчас я покажу, как это делается. Всего существует четыре способа округлять вещественные числа, превращать их в целые, и они все немного различаются. Давайте будем смотреть, как и что у нас делается. Первый способ — это int, то есть стандартная функция, которой мы преобразовывали, например, строку в целое число, ее уже можно вызвать, передав в качестве параметра вещественное число. Мы будем пробовать на трех разных вещественных числах, чтобы заметить все различия. Например, это будут числа 2,5, 3,5 и −2,5. Отрицательные числа тоже, естественно, можно округлять. Итак, это наша первая функция. Что делает функция int? Она округляет в сторону нуля, то есть просто отбрасывает вещественную часть. Посмотрим на результат выполнения: 2, 3, −2. Действительно, просто вещественная часть отброшена, и всё как бы округлилось в сторону нуля. Существуют и другие способы округлять. Давайте посмотрим. Если мы хотим вызвать функцию из какой-то библиотеки, мы должны сначала написать название этой библиотеки, то есть слово math, поставить точку. И вот здесь у нас появился список всех функций, которые содержатся в библиотеке math. Мы можем выбрать отсюда. Если, например, вы что-то забыли, то можете просто выбирать. Ну или если мы начнем набирать название, то этот список сократится. В этом удобство среды разработки, если бы вы писали просто в текстовом редакторе, естественно, у вас не подсвечивался бы никакой список функций, ничего бы не показывалось. Итак, нас интересует функция floor — «пол» по-английски. floor — это округление вниз, к полу, в общем-то, довольно логично. Давайте проверим те же самые числа, чтобы наглядно видеть разницу между работой двух этих функций. Итак, те же самые три числа запускаем и смотрим. Отличие одно — для положительных чисел floor работает точно так же, как и int, то есть просто отбрасывается дробная часть, остается целая. А вот для отрицательных чисел у нас int округляет в сторону нуля, то есть делает их больше, а floor округляет вниз по-прежнему, то есть делает их меньше. И результат округления −2,5 оказался равен −3. Также есть функция округления вверх, которая называется ceil. [ЗВУК] Как видите, из-за наличия названий в библиотеке math, у нас каждый вызов функции занимает достаточно много букв, приходится каждый раз набирать название библиотеки, сейчас мы научимся от этого избавляться. Но сначала посмотрим, как оно работает. Здесь нужно ceil, округлило вверх, то есть ни одно значение не совпало со значением, округленным вниз. Совпадать они могут только в случае, если число уже было целым. И наконец, существует достаточно интересное округление, в некотором смысле математическое, но сейчас мы увидим, чем оно отличается от того, к которому мы привыкли в математическом округлении. Как в школе изучают, что такое округленное вещественное число? Если дробная часть меньше, чем 1/2, 0,5, то число округляется вниз, а если больше либо равно, то число округляется вверх. Так нас учили в школе. В Python это немного не так. Сейчас мы сначала увидим эффект, а потом разберемся и попытаемся объяснить то, что у нас получилось. Итак, вот мы написали округление round, надеемся, что это округление в каком-то смысле честное, ни вверх, ни вниз, а как нужно — к ближайшему целому. Итак, да я попытался подключить библиотеку math.round, а функция round у нас находится вне библиотеки, то есть это просто стандартная функция. Но ничего страшного, я увидел ошибку. Мне написала, что у модуля math нет такой функции. И я просто удаляю, запускаю заново и получаю то, что нужно. Итак, мы надеялись получить 3, 4 и, по-видимому, даже не знаю что. Для отрицательных чисел, честно говоря, я не помню, как должно работать округление по российским правилам, но, видимо, до ближайшего целого с округлением вверх, то есть −2 мы должны были получить. Но вместо этого мы получили 2, 4, −2. Это достаточно странный и сложнообъяснимый факт, поэтому оставим все догадки, я просто знаю, как оно работает. В случае, если у нас 0,5, то round округляет в сторону ближайшего четного числа. Вот так вот принято делать округление в частности в Phyton. Для всех остальных чисел, то есть, если бы мы, например, написали 2,9 или какие-то обычные десятичные, дробные части, отличающиеся от 0,5, то мы получили бы вполне ожидаемый результат, то есть ровно так, как работает округление наше школьное. То есть единственное отличие, это как раз в случае, когда ровно 0,5. Мы вам дадим задачку, где вы сможете придумать и реализовать свое округление по российским правилам. А сейчас поговорим немножко еще о библиотеке math. В ней, как мы видим на подсветке, на подсказках, есть очень много функций. Список функций приведен в тексте после этого видео, но вы можете в принципе набрать math и посмотреть, какие функции там есть. Это достаточно понятные в большинстве своем функции, которые умеют считать, например, логарифмы, тригонометрические, обратные тригонометрические вещи. Ну и некоторые из них не очень понятны, но опять же вы можете взять, набрать в поисковике и узнать, что же это такое. Функций очень много, поэтому рассматривать их мы подробно не будем. Единственное, на что нужно обратить внимание, что в тригонометрии везде используются радианы, а не градусы. То есть если вы привыкли пользоваться градусом, отвыкайте от этого. Правда, там есть функция преобразования радиан в градусы, собственно, вот она у меня — degrees. И обратная функция, сейчас я до нее дойду, radians, которая преобразует градусы в радианы. Поэтому если вы сильно привыкли к ним, то все-таки пользоваться можете, хотя, конечно, лучше отвыкать. И из полезных функций также есть функция sqrt — извлечение квадратного корня. В принципе, можно возводить с помощью возведения в степень, используя степень 1/2, и получать то же самое. Но более привычна запись sqrt — square root, квадратный корень. Вот он у нас, корень из двойки. Иногда оказывается, что некоторые функции из библиотеки используются очень часто. И писать каждый раз «название библиотеки, точка, название функции» получается долго. Вообще, для чего так придумано? Это сделано для того, чтобы если у вас в нескольких библиотеках есть функции с одинаковыми названиями, то вы могли бы к ним обращаться, указывая конкретную библиотеку и конкретную функцию в ней. Если же какие-то функции вы используете очень часто, то можно сделать такую штуку: from math (название нашей библиотеки), import и перечислить через запятую, какие функции мы хотим использовать. В нашем случае, например, floor, ceil и sqrt. И теперь мы можем убрать названия библиотеки math и просто пользоваться этими функциями, как будто они у нас стандартные. То есть мы импортировали названия этих функций из библиотеки, и теперь по таким названиям они у нас доступны. Код программы стал короче и понятнее, все продолжает работать. Ну и один очень плохой совет — я вам так не советую делать — есть возможность: from библиотека, import, звездочка. То есть импортировать вообще все, что там есть, и после этого у вас все функции станут стандартными, то есть вы сможете просто писать названия функций из этой библиотеки. Почему так не рекомендуется делать? Потому что в какой-то момент у вас могут в разных библиотеках оказаться функции с одинаковыми названиями. И тогда какая из них запустится, это будет уже не очень понятно и будет только запутывать. Поэтому старайтесь импортировать только те функции, которые вам нужны. Либо пользоваться просто импорт-библиотекой и каждый раз писать название библиотеки и имя функции. [МУЗЫКА] [МУЗЫКА]