Как сделать степень в питоне
Степень в Python — как возвести?
К огда я был студентом, мой преподаватель по методам программирования любил повторять: «В математике все идеи простые». Чаще всего, фраза звучала в момент объяснения новой сложной темы, а потому вызывала определённые внутренние противоречия.
С возведением в степень всё не так — это действительно простая операция.
История
Возведение в степень — частный случай умножения, поэтому данную операцию изначально не рассматривали, как самостоятельную. Но уже в работах Диофанта Александрийского степени отведено особое место. В частности «Отец Алгебры» применял понятия кубов и квадратов числа.
Эта операция была известна ещё в древнем Вавилоне, однако современный её вид устоялся лишь в XVII веке.
Как умножение позволяет сократить количество символов сложения:
6 + 6 + 6 + 6 + 6 + 6 = 6 * 6
Так и степень сокращает запись умножения:
До воцарения числового показателя, были и другие варианты его записи. Математики раннего Возрождения использовали буквы. Например, Q обозначала квадрат, а C — куб. Различные формы записи возведения в степень не обошли и языки программирования.
Для АЛГОЛа и некоторых диалектов Бейсика применяется значок ↑. В матлабе, R, Excel-е и Хаскеле используется «циркумфлекс» — ^ или «галочка». Этот символ популярен и вне программирования.
Определение
В Python возведение в степень записывается при помощи двойной «звёздочки» — » ** «
a = 2 ** 4 print(a) > 16
Вторая форма записи — встроенная функция pow():
# первый аргумент — основание, а второй — показатель b = pow(2, 4) print(b) > 16
Обратные операции
Извлечение корня
# корень четвёртой степени из 16 root = pow(16, (1/4)) print(root) > 2.0
Либо с применением оператора » ** «:
# корень кубический из 27 cub_root = 27 ** (1/3) print(cub_root) > 3.0
Для извлечения квадратного корня справедливы оба вышеуказанных способа, но существует и третий, специализированный. Для его применения требуется импортировать модуль math :
import math # квадратный корень из 100 sqr_root = math.sqrt(100) print(sqr_root) > 10.0
Логарифмирование
Логарифмирование — вторая обратная операция.
Логарифмом числа «b» по основанию «a» зовётся такой показатель степени, в который следует возвести «a», чтобы получить «b».
Здесь x — логарифм. Пример из математики — найдем значение выражения:
Легче всего эта запись читается в формате вопроса: «В какую степень нужно возвести 2, чтобы получить 16?». Очевидно, в 4-ю. Следовательно,
В питоне операция нахождения логарифма так же заложена в функционал модуля math:
import math # отыщем логарифм 100 по основанию 10 # 100 — основание логарифма, а 10 — аргумент log = math.log(100, 10) print(log) > 2.0
Степень
Целочисленная
В целочисленную степень можно возводить положительные и отрицательные int и float числа:
И функция pow() и оператор » ** » умеют возводить комплексные числа:
# complex a = complex(2, 1) print(pow(a, 2)) > (3+4j) print(a ** 2) > (3+4j)
Показатель степени может быть положительным, отрицательным и нулевым:
Результат не определён, когда 0 возводят в отрицательную степень:
Ошибка деления на ноль возникает из-за следующего свойства степени:
Рациональная
Возведение числа в рациональную степень напрямую связано с извлечением корня из этого числа отношением:
Если рациональный показатель отрицательный, а основание равно нулю, то Питон все ещё будет выдавать ошибку:
В случае, когда основание меньше нуля, числитель показателя нечётный, а знаменатель, напротив, чётный, результат получается комплексным. Но это свойство рациональных степеней учитывается только в функции pow() :
print(pow(-5, (5/4))) > (-5.286856317202822-5.286856317202821j) print(type(pow(-5, (5/4)))) >
В остальном возведение в рациональную степень работает, как и для целочисленной:
print(0 ** (3/2)) > 0.0 print(pow(1, (23/24))) > 1.0 print(10 ** (6/7)) > 7.196856730011519
Вещественная
В начале автор объявил, что возведение в степень — штука несложная. Так вот, для вещественных степеней это уже не совсем так. Идеи, заложенные в эту операцию, хоть и просты, но их много, и каждая из них достойна собственной статьи. Описать вкратце разложение в ряд Тейлора и численное интегрирование не получится. Это будет не справедливо, как по отношению к вам, так и к математике. Поэтому, выделим главное:
Python умеет возводить в вещественную степень даже вещественные числа (пусть и псевдо)
Сделать такое инструментами математики ой как непросто:
# возведём число Пи в степень e print(pow(math.pi, math.e)) > 22.45915771836104
Ноль в степени ноль
Дискуссии по поводу значения 0 в степени 0 продолжаются уже больше двух веков. Обычно значение нуля в нулевой степени принято считать неопределённым, но символическое соглашение о том, что «0 в степени 0 равно 1» помогает в записи формул и алгоритмов. Ровно поэтому так сделано и в Python:
Математические вычисления в Python 3
Программирование невозможно представить без работы с числами. Размеры экрана, выбор цвета путем присвоения числовых кодов, географическое расположение, деньги и очки, продолжительность видео – для всего этого используются числа.
Потому умение выполнять математические операции очень важно для программирования. Конечно, чем выше у вас навык математических вычислений, тем лучше для вас; однако совсем не обязательно уметь выполнять сложнейшие вычисления, чтобы быть хорошим программистом. Если у вас нет опыта работы в области математики, старайтесь представлять математику как инструмент или как способ улучшить ваше логическое мышление.
Данное руководство научит вас работать с двумя наиболее распространёнными числовыми типами данных Python:
Операторы Python
Оператор – это символ или функция, которая выполняет то или иное действие над данными. К примеру, символ + – это оператор сложения.
В Python присутствуют как общие, так и специальные математические операторы.
Ниже приведена таблица наиболее распространённых математических операторов Python.
Операция | Результат |
x + y | Сложение (сумма x и y) |
x – y | Вычитание (разница между x и y) |
-x | Смена знака x |
+x | Тождественность x |
x * y | Умножение x на y |
x / y | Деление x на y |
x // y | Получение целой части от деления x на y |
x % y | Остаток от деления x / y |
x ** y | Возведение в степень |
Также руководство охватывает использование операторов присваивания.
Сложение и вычитание
Операции сложения и вычитания в Python выполняются точно так же, как и в обычной математике. Вы даже можете использовать Python вместо калькулятора.
Также вы можете объявить переменные и указать их в функции print:
a = 88
b = 103
print(a + b)
191
Целые числа бывают положительными и отрицательными. Попробуйте сложить следующие числа:
Числа с плавающей точкой складываются аналогичным образом:
e = 5.5
f = 2.5
print(e + f)
8.0
В результате сложения чисел с плавающей точкой также получается число с плавающей точкой, потому Python выводит 8.0, а не 8.
Синтаксис вычитания отличается от сложения только оператором. Попробуйте отнять 32 из 75.67:
Примечание: Если в операции присутствует хотя бы одно число с плавающей точкой, в результате Python также выведет число с плавающей точкой.
Унарные арифметические операции
Унарное математическое выражение состоит только из одного компонента или элемента. В Python плюс и минус вместе со значением могут быть использованы в качестве одного элемента, это позволяет показать тождественность значения (+) или изменить его знак (-).
Тождественность используется нечасто. Плюс можно использовать с положительными числами:
Если вы используете плюс с отрицательным числом, он также вернёт тождественное (в этом случае – отрицательное) число.
Минус позволяет изменить знак. Если вы добавите минус к положительному значению, в результате будет отображено отрицательное значение:
Если добавить минус к отрицательному значению, в результате получится положительное число:
Умножение и деление
Операции умножения и деления, как сложение и вычитание, выполняются в Python так же, как в обычной математике. Для умножения Python использует *, для деления – /.
k = 100.1
l = 10.1
print(k * l)
1011.0099999999999
При делении в Python 3 частное всегда возвращается в виде числа с плавающей точкой, даже если вы делите целые числа:
m = 80
n = 5
print(m / n)
16.0
Это одно из главных различий между Python 2 и Python 3. Python 3 возвращает дробный результат, потому при делении 11 на 2 вы получите 5.5. В Python 2 деление привязано к типам данных, потому при делении целого числа невозможно получить число с плавающей точкой; поэтому при делении 11 на 2 Python 2 возвращает 5.
Читайте также: Python 2 vs Python 3
Когда числа по обе стороны символа деления являются целыми, выполняется деление floor, то есть, для фактора х Python 2 возвращает наибольшее целое число меньше или равное х. К примеру, при делении 5 / 2 таким числом будет 2.
Чтобы выполнить деление floor и получить только целую часть числа, Python 3 использует оператор //. К примеру, разделив 100//40, вы получите 2.
Деление по модулю
Оператор % – это модуль, который возвращает остаток от деления. К примеру, это позволяет найти числа, кратные одному и тому же числу.
o = 85
p = 15
print(o % p)
10
При делении 85 на 15 получается 5 и 10 в остатке.
Попробуйте разделить числа с плавающей точкой:
q = 36.0
r = 6.0
print(o % p)
0.0
Число 36.0 делится на 6.0 без остатка, потому в результате получился 0.0.
Возведение в степень
Оператор ** в Python возводит число в степень. Например, выражение 5 ** 3 значит, что 5 нужно возвести в третью степень. В математике это выглядит так: 5³. В Python можно получить тот же результат (125), умножив 5*5*5.
s = 52.25
t = 7
print(s ** t)
1063173305051.292
Приоритет операций
Как и в математике, в Python нужно помнить о том, что операции выполняются в порядке их приоритета, а не по порядку справа налево.
Сначала выполняется умножение (10*5=50), а затем сложение (10+50). Потому результат будет такой:
Чтобы сначала выполнить операцию сложения, а затем умножить полученный результат на 5, нужно взять сложение в скобки:
u = (10 + 10) * 5
print(u)
100
Математические операции имеют такой приоритет:
Операторы присваивания
Наиболее распространённым оператором присваивания является знак равенства (=). Он присваивает переменной слева значение справа. К примеру, в выражении v = 23 переменной v было присвоено значение 23.
В программировании часто используются составные операторы присваивания, которые выполняют операцию со значением переменной, а затем присваивают этой переменной полученное новое значение. Составные операторы объединяют арифметический оператор с оператором =. Например:
Составной оператор += выполнил сложение, а затем присвоил переменной w, значение, полученное в результате сложения.
Составные операторы часто используются в циклах.
for x in range (0, 7):
x *= 2
print(x)
0
2
4
6
8
10
12
Это позволяет автоматизировать процесс умножения чисел в заданном диапазоне.
В Python есть составные операторы присваивания для каждой математической операции:
Операторы присваивания позволяют постепенно увеличить или уменьшить значение, а также автоматизировать некоторые вычисления.
Заключение
Теперь вы умеете выполнять вычисления в Python. Читайте также:
Как сделать степень в питоне
Python поддерживает все распространенные арифметические операции:
Сложение двух чисел:
Вычитание двух чисел:
Умножение двух чисел:
Деление двух чисел:
Целочисленное деление двух чисел:
Данная операция возвращает целочисленный результат деления, отбрасывая дробную часть
Возведение в степень:
Получение остатка от деления:
При последовательном использовании нескольких арифметических операций их выполнение производится в соответствии с их приоритетом. В начале выполняются операции с большим приоритетом. Приоритеты операций в порядке убывания приведены в следующей таблице.
Пусть у нас выполняется следующее выражение:
Здесь начале выполняется возведение в степень (5 ** 2) как операция с большим приоритетом, далее результат умножается на 4 (25 * 4), затем происходит сложение (3 + 100) и далее опять идет сложение (103 + 7).
Чтобы переопределить порядок операций, можно использовать скобки:
Следует отметить, что в арифметических операциях могут принимать участие как целые, так и дробные числа. Если в одной операции участвует целое число (int) и число с плавающей точкой (float), то целое число приводится к типу float.
Арифметические операции с присвоением
Ряд специальных операций позволяют использовать присвоить результат операции первому операнду:
Присвоение результата сложения
Присвоение результата вычитания
Присвоение результата умножения
Присвоение результата от деления
Присвоение результата целочисленного деления
Присвоение степени числа
Присвоение остатка от деления
Функции преобразования чисел
Ряд встроенных функций в Python позволяют работать с числами. В частности, функции int() и float() позволяют привести значение к типу int и float соответственно.
Например, пусть у нас будет следующий код:
Мы ожидаем, что «2» + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И чтобы все заработало как надо, необходимо привести строку к числу с помощью функции int():
Аналогичным образом действует функция float(), которая преобразует в число с плавающей точкой. Но вообще с дробными числами надо учитывать, что результат операций с ними может быть не совсем точным. Например:
В данном случае мы ожидаем получить число 0.40002, однако в конце через ряд нулей появляется еще какая-то четверка. Или еще одно выражение:
В этот случае для округления результата мы можем использовать функцию round() :
Представление числа
При обычном определении числовой переменной она получает значение в десятичной системе. Но кроме десятичной в Python мы можем использовать двоичную, восьмеричную и шестнадцатеричную системы.
Для определения числа в двоичной системе перед его значением ставится 0 и префикс b :
Для определения числа в восьмеричной системе перед его значением ставится 0 и префикс o :
Для определения числа в шестнадцатеричной системе перед его значением ставится 0 и префикс x :
И с числами в других системах измерения также можно проводить арифметические операции:
Встроенные функции Python 3 для работы с числами
Python 3 предоставляет большое количество встроенных функций, которые вы можете использовать в программах. Некоторые из них позволяют преобразовывать типы данных, другие предназначены только для одного типа данных (например, строк).
Данное руководство ознакомит с некоторыми встроенными функциями для работы с числовыми типами данных в Python 3:
Все эти методы делают разработку программы более гибкой.
Абсолютная величина
Абсолютная величина – важный аспект вычислений и анализа.
Рассмотрим такой пример: вам нужно проехать 58 км, вместо этого вы проехали 93 км. Чтобы узнать, сколько км осталось, нужно вычесть из расстояния (58 км) количество километров, которое вы проехали (93 км). В данном случае в результате будет отрицательное число. Но проехать отрицательное количество километров невозможно. Попробуйте решить эту задачу с помощью abs():
Функция abs() используется в тех ситуациях, когда результат не может быть отрицательным числом.
Частное и остаток от деления
Деление floor (возвращает частное), и деление по модулю (возвращает остаток), тесно связаны между собой, потому функция, которая сочетает в себе обе эти операции, будет очень полезна.
Для этого Python предоставляет встроенную функцию divmod().
Функция divmod() работает с двумя значениями:
Она выполняет такие операции:
Предположим, вы написали книгу, которая состоит из 80000 слов. На одной странице можно разместить либо 300, либо 250 слов. Нужно посчитать, сколько страниц получится в первом и во втором варианте. Попробуйте сделать это с divmod():
words = 80000 # количество слов в книге
per_page_A = 300 # вариант А, 300 слов на странице
per_page_B = 250 # вариант B, 250 слов на странице
print(divmod(words,per_page_A))
print(divmod(words,per_page_B))
(266, 200)
(320, 0)
Если на каждой странице будет по 300 слов, в книге будет 266 страниц, и ещё одна страница будет заполнена на две трети (итого 267 страниц). Если на каждой странице будет по 250 слов, в книге будет ровно 320 страниц.
Функция divmod() может работать с целыми числами и с числами с плавающей точкой. Например:
a = 985.5
b = 115.25
print(divmod(a,b))
(8.0, 63.5)
Где 8.0 – частное, 63.5 – остаток.
Возведение в степень
В Python существует оператор ** для возведения числа в степень. Но также вы можете использовать встроенную функцию pow().
К примеру, вы исследуете бактерии, и вам нужно подсчитать, сколько бактерий будет в конце дня, если утром была одна бактерия, а количество бактерий в час увеличивается вдвое.
hours = 24
total_bacteria = pow(2,hours)
print(total_bacteria)
16777216
К примеру, в обычной математике 3 в кубе записывается так:
Это равно 3 x 3 x 3 (27).
Чтобы вычислить 3³ в Python, нужно записать это так:
Округление десятичного числа
При работе с десятичными числами важно иметь возможность быстро округлить его до N знаков после запятой. Строенная функция round() выполняет эту задачу. При этом ей необходимо два числа: A – число, которое нужно округлить, B – количество знаков после запятой.
i = 17.34989436516001
print(round(i,4))
17.3499
bill = 87.93 # общая сумма счёта
tip = 0.2 # 20% чаевых
split = 3 # количество человек
total = bill + (bill * tip)
each_pay = total / split # посчитает, сколько должен заплатить каждый
print(each_pay) # сумма без округления
print(round(each_pay,2)) # округлённая сумма
35.172000000000004
35.17
В результате получилось число с большим количеством десятичных знаков. Функция round() округлила его до двух знаков после запятой.
Чтобы округлить десятичное число до целого числа, задайте 0 в качестве второго параметра (в данном случае тип данных не преобразуется, после запятой будет 0):
Функция round() может работать и с целыми числами. Если в качестве первого параметра задано целое число, в результате функция также вернёт целое число.
Сумма членов
Функция sum() позволяет вычислить сумму членов составных числовых типов данных: списков, кортежей и словарей.
some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9] print(sum(some_floats))
49.5
Точно так же это работает с кортежами и словарями:
Функции sum() можно задать два аргумента. Второй аргумент – это число, которое нужно прибавить к сумме членов списка/кортежа/словаря. Например:
Базовые математические операции в Python
У мение эффективно применять математические операции в рамках программирования – важный навык, который необходимо развивать, потому как с числами предстоит работать постоянно. Алгоритмы, функции, теория множеств, алгебра логики, комбинаторика и статистика — программисты пользуются ими регулярно и повсеместно.
Но не всё так страшно. Да, понимание математики на высоком уровне помогает стать высококвалифицированным программистом, но оно не является для этого обязательным условием. Тем не менее базовые вещи знать придётся. А в основе всех мощных математических инструментов лежат простые и понятные операции.
Сложение (+)
И самая простая и понятная из них — сложение. Никаких «подводных камней»: берём два или более чисел, пишем между ними знак » + » и присваиваем результат выражения переменной (или сразу выводим сумму на экран):
x = 5 y = 3 z = x + y print(z) > 8
Сложим несколько вещественных чисел и выведем их на экран без предварительной инициализации результирующей переменной:
q = 4.5 w = 2.5 e = 2.5 r = 0.5 print(q + w + e + r) > 10.0
Вообще говоря, если хотя бы одно из слагаемых — число вещественное, то вещественным будет и весь результат.
num1 = 10 num2 = 15 num3 = 10.0 sum = num1 + num2 + num3 print(sum) > 35.0 print(type(sum)) >
Вычитание (-)
Вычитание – это обратная операция сложению. Оператором выступает знак «-«:
Умножение (*)
Как и две предыдущие операции, умножение в Python не таит в себе никаких скрытых или неочевидных особенностей. Умножаем два или более чисел при помощи оператора «звёздочка» ( * ):
Деление (/)
Сложение, вычитание и умножение тривиальны, а вот с делением не всё так просто. В Python существует три вида деления и столько же разных операторов. Начнём с истинного деления, за которое отвечает оператор » / «. Его главным отличием является то, что, вне зависимости от типов операндов, будет возвращен вещественный результат ( float ).
print(8/2) > 4.0 # делимое и делитель — int числа, а частое — float print(type(8/2)) > print(8/3) > 2.6666666666666665
Этот вид деления наиболее близок к обычному и знакомому нам математическому. И здесь тоже нельзя делить на ноль:
print(8/0) > ZeroDivisionError: division by zero
💁 Немного истории. В старых версиях Питон оператор «/» выполнял операцию классического деления: т.е. он делил целочисленно и усекал дробную часть в том случае, когда делимое и делитель были целыми. Если же операнды принадлежали к множеству вещественных чисел, то проводилось деление с сохранением дробной части, и результат был float.
Разработчики отказались от классического деления в Python 3.0 и вместо него добавили истинное деление. Архитекторы языка пошли на такой шаг по той причине, что в предыдущей модели классического деления результаты напрямую зависели от типов операндов. Из-за этого возникали трудности с их предварительной идентификацией и оценкой, что было особенно критично для Питона, как для языка с динамической типизацией.
Целочисленное деление (//)
print(15//2) # видно, что результат округлился в меньшую сторону > 7 # и остался целочисленным, поскольку и делимое, и делитель — int числа print(type(15//2)) >
При изменении любого из операндов на вещественное число, результат также изменится и станет float :
print(15//3.1) > 4.0 print(type(15//3.1)) >
Об округлении вниз важно помнить, когда работа идёт с отрицательными числами:
На ноль всё ещё нельзя делить:
print(15//0) > ZeroDivisionError: integer division or modulo by zero
Остаток от деления (%)
Остаток от деления ещё называют делением по модулю. Оператор » % » сначала делит, а затем возвращает остаток.
print(21 % 3) > 0 print(21 % 5) > 1 print(21 % 0) > ZeroDivisionError: integer division or modulo by zero
Остаток может не быть целочисленным:
print(21.3 % 3) > 0.3000000000000007
Но вся прелесть данного оператора заключается не в возвращаемом им значении остатка.
Главная фишка деления по модулю в том, что с его помощью легко проверяется факт делимости одного числа на другое
А отсюда вытекают и проверки на чётность/нечётность:
import random def parity_check(num): «»» функция, проверяющая четность числа. Любое четное число делится на 2 без остатка. «»» if num % 2 == 0: return ‘Число чётное’ else: return ‘Число нечётное’ # сгенерируем случайное число и проверим работу функции rnum = random.randint(0, 100) print(rnum) print(parity_check(rnum)) > 62 > Число чётное
💭 Проверка числа на чётность/нечётность будет часто встречаться в вашей работе.
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» ( ** ) выполняет классическое математическое возведение числа «a» в степень «b»:
a = 2 b = 10 print(a ** b) > 1024
И показатель степени, и основание могут быть отрицательными:
# степень 0.5 аналогична квадратному корню a = 100 b = 0.5 print(a ** b) > 10.0 a = 0.5 b = 2 print(a ** b) > 0.25
Операндов у возведения в степень также может быть несколько. В таком случае, оператор » ** » работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
print(2 ** 2 ** 3) # Сначала выполняется 2 ** 3, а затем уже 2 ** 8. > 256
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим: