Умножение в питоне как пишется

Последнее обновление: 20.06.2017 арифметические операции python поддерживает все распространенные арифметические операции: сложение двух чисел: print6 2 8

Последнее обновление: 20.06.2017

Арифметические операции

Python поддерживает все распространенные арифметические операции:

  • +

    Сложение двух чисел:

    print(6 + 2)  # 8
  • Вычитание двух чисел:

    print(6 - 2)  # 4
  • *

    Умножение двух чисел:

    print(6 * 2)  # 12
  • /

    Деление двух чисел:

    print(6 / 2)  # 3.0
  • //

    Целочисленное деление двух чисел:

    print(7 / 2)  # 3.5
    print(7 // 2)  # 3
    

    Данная операция возвращает целочисленный результат деления, отбрасывая дробную часть

  • **

    Возведение в степень:

    print(6 ** 2)  # Возводим число 6 в степень 2. Результат - 36
    
  • %

    Получение остатка от деления:

    print(7 % 2)  # Получение остатка от деления числа 7 на 2. Результат - 1
    

    В данном случае ближайшее число к 7, которое делится на 2 без остатка, это 6. Поэтому остаток от деления равен 7 — 6 = 1

При последовательном использовании нескольких арифметических операций их выполнение производится в соответствии с их приоритетом.
В начале выполняются операции с большим приоритетом. Приоритеты операций в порядке убывания приведены в следующей таблице.

Операции

Направление

**

Справо налево

* / // %

Слева направо

+ —

Слева направо

Пусть у нас выполняется следующее выражение:

number = 3 + 4 * 5 ** 2 + 7
print(number)  # 110

Здесь начале выполняется возведение в степень (5 ** 2) как операция с большим приоритетом, далее результат умножается на 4 (25 * 4), затем происходит сложение
(3 + 100) и далее опять идет сложение (103 + 7).

Чтобы переопределить порядок операций, можно использовать скобки:

number = (3 + 4) * (5 ** 2 + 7)
print(number)  # 224

Следует отметить, что в арифметических операциях могут принимать участие как целые, так и дробные числа. Если в одной операции участвует
целое число (int) и число с плавающей точкой (float),
то целое число приводится к типу float.

Арифметические операции с присвоением

Ряд специальных операций позволяют использовать присвоить результат операции первому операнду:

  • +=

    Присвоение результата сложения

  • -=

    Присвоение результата вычитания

  • *=

    Присвоение результата умножения

  • /=

    Присвоение результата от деления

  • //=

    Присвоение результата целочисленного деления

  • **=

    Присвоение степени числа

  • %=

    Присвоение остатка от деления

Примеры операций:

number = 10
number += 5
print(number)  # 15

number -= 3
print(number)  # 12

number *= 4
print(number)  # 48

Функции преобразования чисел

Ряд встроенных функций в Python позволяют работать с числами. В частности, функции int() и float()
позволяют привести значение к типу int и float соответственно.

Например, пусть у нас будет следующий код:

first_number = "2"
second_number = 3
third_number = first_number + second_number

Мы ожидаем, что «2» + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку.
И чтобы все заработало как надо, необходимо привести строку к числу с помощью функции int():

first_number = "2"
second_number = 3
third_number = int(first_number) + second_number
print(third_number)	# 5

Аналогичным образом действует функция float(), которая преобразует в число с плавающей точкой. Но вообще с дробными числами надо учитывать, что результат операций с ними
может быть не совсем точным. Например:

first_number = 2.0001
second_number = 5
third_number = first_number / second_number
print(third_number)	# 0.40002000000000004

В данном случае мы ожидаем получить число 0.40002, однако в конце через ряд нулей появляется еще какая-то четверка. Или еще одно выражение:

print(2.0001 + 0.1)  # 2.1001000000000003

В этот случае для округления результата мы можем использовать функцию round():

first_number = 2.0001
second_number = 0.1
third_number = first_number + second_number
print(round(third_number, 4))  # 2.1001

Первый параметр функции — округляемое число, а второй — сколько знаков после запятой должно содержать получаемое число.

Представление числа

При обычном определении числовой переменной она получает значение в десятичной системе. Но кроме десятичной в Python мы можем использовать двоичную,
восьмеричную и шестнадцатеричную системы.

Для определения числа в двоичной системе перед его значением ставится 0 и префикс b:

x = 0b101 	# 101 в двоичной системе равно 5

Для определения числа в восьмеричной системе перед его значением ставится 0 и префикс o:

a = 0o11 	# 11 в восьмеричной системе равно 9

Для определения числа в шестнадцатеричной системе перед его значением ставится 0 и префикс x:

y = 0x0a		# a в шестнадцатеричной системе равно 10

И с числами в других системах измерения также можно проводить арифметические операции:

x = 0b101	# 5
y = 0x0a	# 10
z = x + y	# 15
print("{0} in binary {0:08b}   in hex {0:02x} in octal {0:02o}".format(z))

Для вывода числа в различных системах исчисления используются функция format, которая вызывается у строки.
В эту строку передаются различные форматы. Для двоичной системы «{0:08b}», где число 8 указывает, сколько знаков должно быть в записи числа. Если знаков указано больше, чем
требуется для числа, то ненужные позиции заполняются нулями. Для шестнадцатеричной системы применяется формат «{0:02x}». И здесь все аналогично — запись числа состоит из двух знаков, если один знак не нужен, то вместо него вставляется ноль.
А для записи в восьмеричной системе испольуется формат «{0:02o}».

Результат работы скрипта:

15 in binary 00001111   in hex 0f   in octal 17

На этом занятии
рассмотрим виды и работу арифметических операторов в Python. И как уже
говорили, в этом языке имеется три базовых типа для представления чисел:

  • int
    – для
    целочисленных значений;

  • float
    – для
    вещественных;

  • complex
    – для
    комплексных.

С этими числами
можно выполнять следующие арифметические операции:

Оператор

Описание

Приоритет

+

сложение

2

вычитание

2

*

умножение

3

/, //

деление

3

%

остаток
деления

3

**

возведение
в степень

4

И введем несколько определений:

Операнд – то, к чему
применяется оператор. Например, в умножении 5 * 2 есть два операнда: левый
операнд равен 5, а правый операнд равен 2. Иногда их называют «аргументами»
вместо «операндов».

Унарным называется
оператор, который применяется к одному операнду.

Например, оператор унарный
минус «-» меняет знак числа на противоположный:

#унарный минус
a=1; a=-a 
print(a)

Обратите внимание как записаны два
оператора в одну строчку: они разделены точкой с запятой. Так тоже можно
делать. Если каждый оператор начинается с новой строки, то точку с запятой
ставить не обязательно, если пишем несколько операторов в одну строчку, то они
разделяются точкой с запятой.

Бинарным называется
оператор, который применяется к двум операндам.

Тот же минус существует и в
бинарной форме:

a = 1; b = 2
c = b-a #бинарный минус
print(c)

Раз мы начали
говорить об операциях + и -, то продолжим и отметим, что, в общем случае, можно
использовать унарный плюс и минус, например:

Конечно, +a это то же самое,
что и a, поэтому, в
основном, используется унарный минус. По приоритету унарные операции выше
бинарных операций. Например, вот такая запись:

означает, что число –a
возводится в степень 2, то есть, унарный минус имеет больший приоритет, чем
бинарная операция ** возведения в степень.

Если же
используются бинарные сложение и вычитание:

a=2; b=-10
print(a+b)
print(a-b)

то их приоритет
становится наименьшим среди всех арифметических операций (они выполняются в
последнюю очередь).

Следующая
бинарная операция умножение работает так, как мы привыкли ее использовать в
математике:

a=2; b=-5.8; c=2.3
print( a+b*c )

Здесь сначала
выполнится умножение, а затем – сложение. Если необходимо изменить приоритет
выполнения операций, то используются круглые скобки:

Далее, деление
двух чисел (или переменных) можно выполнить двумя способами. Первый –
традиционный, делает деление, привычное в математике, например:

получим
ожидаемый результат 1,5. Однако те из вас, кто имеет опыт программирования на
таких языках как С++ или Java, знают, что при делении двух
целочисленных значений, результат также получался целочисленным. Но в Python это не так! Его
арифметические операции работают в соответствии с классическими правилами
математики и деление здесь – это всегда полноценное деление двух значений,
какими бы они ни были.

Однако, если все
же требуется выполнить целочисленное деление (то есть, с отбрасыванием дробной
части), то используется такой оператор:

И, как видите,
теперь результат 1, а не 1,5. Причем, это целочисленное деление будет
выполняться и с вещественными числами:

Вот такие два
оператора деления существуют в Python.

Если же хотим
вычислить остаток от целочисленного деления, то используется оператор:

С положительными
целыми числами он работает также как и во многих других языках
программирования. Например,

и так далее, мы будем получать числа от
0 до 4. Но с отрицательными числами вычисления будут отличаться от того же
языка С++. Например,

-9 % 5 # (в С++ это -4, а в Python – это 1)

Почему так? Дело в том, что когда то
давно инженеры фирмы Intell неверно математически
реализовали данную операцию. И язык С++ как наследник этой интеловской
архитектуры реализует данную операцию путем вынесения знака «-» за скобки и
вычисления обычного остатка от деления. Язык же Python делает это так,
как принято в математике. Сначала находится ближайшее наименьшее число кратное
5. Это число -10 (для числа -9) и остаток берется как разность между этими
числами:

image001

то есть, остатки
всегда будут положительными в диапазоне от 0 до 4, как это и должно быть по
математике.

Все
рассмотренные операторы (*, /, //, %) имеют одинаковый приоритет и выполняются
слева-направо. То есть, если записать

то это следует
интерпретировать как формулу

image002

Следующая
операция – возведение в степень. В самом простом варианте она записывается так:

здесь x, y могут быть и
дробными числами. Например:

Это будет
соответствовать извлечению квадратного корня из 1,96. Если запишем такую
конструкцию:

то получим
кубический корень из 27. Причем, обратите внимание, круглые скобки у степени
здесь обязательны, т.к. приоритет операции ** выше, чем у деления. Если
записать вот так:

то это будет
эквивалентно такому выражению:

image003

Вот на это
следует обращать внимание. И еще один нюанс. Операция возведения в степень
выполняется справа-налево. То есть, если записать вот такую строчку:

Это будет
эквивалентно степени:

image004

Сначала (справа)
вычисляется 3**2 = 9, а затем, 2**9 = 512. Все остальные арифметические
операции работают слева-направо.

Используя
оператор присваивания совместно с арифметическими операторами, можно выполнять
некоторые полезные арифметические преобразования переменных. Например, очень
часто требуется увеличить или уменьшить некую переменную на определенное число.
Это можно сделать вот так:

i = 5; j = 3
i = i+1
j = j-2
print(i, j)

Но, можно и
короче, вот так:

i = 5; j = 3
i += 1
j -= 2
print(i, j)

Они довольно
часто используются в программировании. Также, помимо сложения и вычитания,
можно записывать и такие выражения:

i *= 3
j /= 4
print(i, j)
 
a = 5; b = 10
a **= 2
b //= 3
print(a, b)

То есть, здесь
до оператора присваивания можно записывать любую арифметическую операцию.

Все
рассмотренные арифметические операции можно выполнять и с комплексными числами:

a = 1 + 2j
b = 2 - 3j
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**b)

Кроме операции
целочисленного деления // и вычисления остатка от деления %. Дополнительно у
объектов комплексных чисел есть свойства:

a = 1 + 2j
b = 2 - 3j
print(a.real)
print(b.imag)

для взятия
действительной и мнимой части. И полезный метод:

sa = a.conjugate();
print(sa)

для получения
комплексно-сопряженного числа.

В языке Python имеются
встроенные функции для работы с числами. Наиболее полезные, следующие:

Название

Описание

abs(x)

вычисляет
модуль числа x

round(x)

округляет
x до ближайшего
целого

min(x1, x2,…,x_n)

находит
минимальное, среди указанных чисел

max(x1, x2,…,x_n)

находит
максимальное, среди указанных чисел

pow(x, y)

возводит
x в степень y

Также в языке Python имеется
стандартная библиотека math, которая содержит большое количество стандартных
математических функций. Чтобы ей воспользоваться, необходимо вначале программы
подключить эту библиотеку. Делается это с помощью ключевого слова import, за которым
указывается имя библиотеки:

После этого
становятся доступными следующие полезные функции:

Название

Описание

math.ceil(x)

возвращает
ближайшее наибольшее целое для x

math.floor(x)

возвращает
ближайшее наименьшее целое для x

math.fabs(x)

возвращает
модуль числа x

math.factorial(x)

вычисляет
факториал x!

math.exp(x)

вычисляет
e**x

math.log2(x)

вычисляет
логарифм по основанию 2

math.log10(x)

вычисляет
логарифм по основанию 10

math.log(x, [base])

вычисляет
логарифм по указанному основанию base (по умолчанию
base = e – натуральный
логарифм)

math.pow(x, y)

возводит
число x в степень y

math.sqrt(x)

вычисляет
квадратный корень из x

Тригонометрические функции

math.cos(x)

вычисляет
косинус x

math.sin(x)

вычисляет
синус x

math.tan(x)

вычисляет
тангенс x

math.acos(x)

вычисляет
арккосинус x

math.asin(x)

вычисляет
арксинус x

math.atan(x)

вычисляет
арктангенс x

Математические константы

math.pi

число
пи

math.e

число
e

Помимо этих есть
и другие математические функции. При необходимости, о них можно почитать в
официальной документации языка Python.

Применение этих
функций вполне очевидно, например, их можно вызвать вот так:

import math
a = 2.4
b = math.cos(a)
print(b)
print( math.floor(1.7) )
print( math.ceil(1.7) )
print( math.sqrt(2.56) )

И так далее. Вот так работают
арифметические операции в Python и вот такие математические
функции имеются в стандартной библиотеке math.

В данном уроке мы изучим работу с числовыми данными в Питоне. Python очень зрелый язык и, естественно, работа с числами в нём сделана удобно, но позволяет сделать очень многое. В данном языке, в отличие от многих других, типов числовых данных достаточно мало. Это целочисленный тип, реальные и комплексные числа. И если первые два типа представлены в любом языке, то комплексные числа – изюминка именно Пайтона.

Вещественные числа в Python

Вещественные числа это:
— Числа без дробной части. Могут быть как положительными, так и отрицательными. В Python представлены типом int. Пример: 0, -22, 48947364316
— Числа с дробной частью. Могут быть как положительными, так и отрицательными. В Python представлены типом float. Пример: 0.15, -5445454.45456465, 0.0

Создание int и float чисел

Питон помогает нам в работе с типами переменных. В этом его удобство, но это же и таит опасности. Огромная часть ошибок, возникающих в программном обеспечении, связана именно с типами данных.
Когда мы присваиваем переменной значение, Python сам определяет её тип:

                    
i = 5
x = 0.0
print('type(i):', type(i))
print('type(x):', type(x))
# Вывод:
type(i): <class 'int'>
type(x): <class 'float'>

Если честно, определение типа происходит раньше, ещё когда интерпретатор доходит до самого значения.

                    
print('type(7):', type(7))
print('type(-1.2):', type(-1.2))
# Вывод:
type(7): <class 'int'>
type(-1.2): <class 'float'>

Будьте внимательны: если указать значение в кавычках, интерпретатор воспримет их как строки.

                    
print('type('7'):', type('7'))
print('type("-1.2"):', type("-1.2"))
# Вывод:
type('7'): <class 'str'>
type("-1.2"): <class 'str'>

Как Вы уже видели выше, тип любого объекта можно проверить используя функцию type(). Даже тип самой функции type(). Даже тип типа))

                    
print('type(7):', type(7))
print('type(type):', type(type))
print('type(type(7)):', type(type(7)))
# Вывод:
type(7): <class 'int'>
type(type): <class 'type'>
type(type(7)): <class 'type'>

Интересной особенностью языка является то, что интерпретатор Python игнорирует нижние подчёркивания в составе чисел. Это помогает визуально разделять разряды больших чисел в тексте программы.

                    
a = 7_7
b = 999_999_999
c = 123_456.789_123
print('a:', a)
print('b:', b)
print('c:', c)
# Вывод:
a: 77
b: 999999999
c: 123456.789123

Арифметические операции над целыми и числами с плавающей точкой

Естественно, со всеми числовыми типами данных можно совершать арифметические операции.

Сложение

В Пайтоне сложение выполняется с помощью оператора +(странно, правда?).

                    
print('1+1:', 1 + 1)
print('1+0.0:', 1 + 0.0)
print('1.0 + 1.0:', 1.0 + 1.0)
# Вывод:
1+1: 2
1+0.0: 1.0
1.0 + 1.0: 2.0

Примечательно то, что если в любой арифметической операции участвует число с дробной частью, то результат приводится к типу float. Обратите внимание, что в числах с дробной частью, которые лежат в диапазоне от 1 до -1, ноль слева от точки можно опускать.

                    
print('0.12+0.1:', 0.12 + 0.1)
print('.12+.1:', .12 + .1)
# Вывод:
0.12+0.1: 0.22
.12+.1: 0.22

Вычитание

В Python для операции вычитания используется оператор -. Рассмотрим примеры.

                    
print('1 - 1.1:', 1 - 1)
print('1.1 - 1.1:', 1.1 - 1.1)
print('1 - 1.1:', 1 - 1.1)
print('1.1 - 1:', 1.1 - 1)
# Вывод:
1 - 1.1: 0
1.1 - 1.1: 0.0
1 - 1.1: -0.10000000000000009
1.1 - 1: 0.10000000000000009

Положительные числа получаются в случае вычитания маленького числа из более крупного. Если же из маленького наоборот вычесть большое, то результатом будет отрицательно число. По аналогии с операцией сложения при вычитании если один из операндов является числом с плавающей точкой, то и весь результат будет такого типа. И да, с типом float бывают проблемы. Подробнее об этом мы рассказывали в одном из предыдущих уроков.

Умножение

Для умножения в Python применяется оператор *.

                    
print('1 * 1.1:', 1 * 1)
print('1.1 * 1.1:', 1.1 * 1.1)
print('1 * 1.1:', 1 * 1.1)
print('1.1 * 1:', 1.1 * 1)
# Вывод:
1 * 1.1: 1
1.1 * 1.1: 1.2100000000000002
1 * 1.1: 1.1
1.1 * 1: 1.1

Если перемножить два целых числа, то результатом будет целое число. Если же использовать число с плавающей точкой, то результатом будет также число с плавающей точкой.

Деление

В Python деление выполняется с помощью оператора /.

                    
print('1 / 1.1:', 1 / 1)
print('1.1 / 1.1:', 1.1 / 1.1)
print('1 / 1.1:', 1 / 1.1)
print('1.1 / 1:', 1.1 / 1)
# Вывод:
1 / 1.1: 1.0
1.1 / 1.1: 1.0
1 / 1.1: 0.9090909090909091
1.1 / 1: 1.1

В отличие от трех предыдущих операций при делении результатом всегда будет число с плавающей точкой. Также нужно помнить о том, что на 0 делить нельзя, иначе Python вернет ошибку ZeroDivisionError. Вот пример такого поведения.

                    
print('1 / 0:', 1 / 0)
# Вывод:
Traceback (most recent call last):
File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 1, in
print('1 / 0:', 1 / 0)
ZeroDivisionError: division by zero

Process finished with exit code 1

Деление без остатка

При обычном делении с использованием оператора / результатом будет точное число с плавающей точкой. Но иногда достаточно получить лишь целую часть операции. Для этого есть операции интегрального деления. Стоит рассмотреть ее на примере.

                    
print('1 // 1.1:', 1 // 1)
print('1.1 // 1.1:', 1.1 // 1.1)
print('1 // 1.1:', 1 // 1.1)
print('1.1 // 1:', 1.1 // 1)
# Вывод:
1 // 1.1: 1
1.1 // 1.1: 1.0
1 // 1.1: 0.0
1.1 // 1: 1.0

Результатом такой операции становится частное. Остаток же можно получить с помощью модуля, о котором речь пойдет дальше.

Остаток от деления

Для получения остатка деления двух чисел используется оператор деления по модулю %.

                    
print('1 % 1.1:', 1 % 1)
print('1.1 % 1.1:', 1.1 % 1.1)
print('1 % 1.1:', 1 % 1.1)
print('1.1 % 1:', 1.1 % 1)
# Вывод:
1 % 1.1: 0
1.1 % 1.1: 0.0
1 % 1.1: 1.0
1.1 % 1: 0.10000000000000009

На этих примерах видно, как это работает.

Возведение в степень

Число можно возвести в степень с помощью оператора **.

                    
print('1 ** 1.1:', 1 ** 1)
print('1.1 ** 1.1:', 1.1 ** 1.1)
print('1 ** 1.1:', 1 ** 1.1)
print('1.1 ** 1:', 1.1 ** 1)
# Вывод:
1 ** 1.1: 1
1.1 ** 1.1: 1.1105342410545758
1 ** 1.1: 1.0
1.1 ** 1: 1.1

Комплексные числа

Комплексные числа — это числа, которые включают мнимую часть. Python поддерживает и их.

                    
первая_переменная = 2 + 2j
вторая_переменная = 3 + 4j
сумма = первая_переменная + вторая_переменная
print("Сумма двух комплексных чисел равна: ", сумма)
# Вывод:
Сумма двух комплексных чисел равна: (5+6j)

В этом примере были созданы два комплексных числа. После этого было выполнено их сложение с помощью оператора +. Результат вывели на экран с помощью функции print().

Конвертация типов чисел

Конвертация типа — это метод конвертации числа из одного типа в другой. Для этого можно использовать функции float(), int() и complex().

                    
целое = 147
дробное = 147.741
комплексное = 147+741j

print('целое:', целое, 'тип:', type(целое))
print('дробное:', дробное, 'тип:', type(дробное))
print('комплексное:', комплексное, 'тип:', type(комплексное))

a = float(целое) # преобразование целого числа в число с плавающей точкой
b = int(дробное) # преобразование числа с плавающей точкой в целое число
c = complex(целое) # преобразование целого числа в комплексное
d = complex(дробное) # преобразование числа с плавающей точкой в комплексное

print('дробное:', a, 'тип:', type(a))
print('целое:', b, 'тип:', type(b))
print('комплексное:', c, 'тип:', type(c))
print('комплексное:', d, 'тип:', type(d))

# Вывод:
целое: 147 тип: <class 'int'>
дробное: 147.741 тип: <class 'float'>
комплексное: (147+741j) тип: <class 'complex'>
дробное: 147.0 тип: <class 'float'>
целое: 147 тип: <class 'int'>
комплексное: (147+0j) тип: <class 'complex'>
комплексное: (147.741+0j) тип: <class 'complex'>

Можно увидеть, как числа изменились за счет использования простых встроенных функций Python.

Случайные числа

Случайные числа используются в играх, криптографии и так далее. В Python нативной поддержки случайных чисел нет, но есть встроенный модуль random, который используется для работы с целыми числами. Рассмотрим пример генерации случайных чисел с помощью такого модуля.

                    
import random

print(random.randrange(1, 99999))
# Вывод:
5214

Встроенные математические функции

В Python есть множество встроенных функций для работы с числами. Вот самые важные из них.

round()

Функция round() используется для округления чисел с плавающей точкой до ближайшего целого. Пр этом тип данных не меняется. Целое число — это также число с плавающей точкой. Пример:

                    
целое = 147
дробное = 147.741

print('целое округлять нет смысла:', round(целое))
print('округлённое дробное:', round(дробное))
# Вывод:
целое округлять нет смысла: 147
округлённое дробное: 148

В выводе можно увидеть, что все числа с плавающей точкой были округлены до ближайшего целого.
А вот комплексное число округлять нельзя.

                    
комплексное = 147+741j
print('округлённое комплексное:', round(комплексное))
# Вывод:
Traceback (most recent call last):
File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 2, in
print('округлённое комплексное:', round(комплексное))
TypeError: type complex doesn't define __round__ method

Process finished with exit code 1

abs()

Эта функция используется для генерации абсолютного значения числа. Оно всегда положительное, хотя число можно быть как положительным, так и отрицательным. Пример:

                    
целое = -147
дробное = -147.741
комплексное = -147+741j

print('целое:', целое)
print('дробное:', дробное)
print('комплексное:', комплексное)
print('=' * 30)
print('целое по модулю:', abs(целое))
print('дробное по модулю:', abs(дробное))
print('комплексное по модулю:', abs(комплексное))
# Вывод:
целое: -147
дробное: -147.741
комплексное: (-147+741j)
==============================
целое по модулю: 147
дробное по модулю: 147.741
комплексное по модулю: 755.4402689822671

pow()

Функция pow() используется для возведения числа в степень. Она повторяет то, что можно сделать и с помощью оператора **.
Функции pow() нужно передать два параметра. Первый — число, которое нужно возвести в степень, а второе — сама степень. Пример:

                    
исходное_число = 8
степень = 2

print(pow(исходное_число, степень))
print(pow(исходное_число, степень) is исходное_число**степень)
# Вывод:
64
True

Библиотека math

В Python есть полноценная библиотека, с помощью которой можно выполнять почти любую математическую операцию — math. Все это есть в стандартной библиотеке, поэтому дополнительные действия выполнять не нужно. В модуле есть кое-какие константы, среди которых PI, e и так далее. Есть и кое-какие математические методы: log(), exp(), sqrt(), тригонометрические функции и так далее.

Иван Душенко

Автор статьи

Задать вопрос

Предисловие

Доброго времени суток, Хабр. Запускаю короткий курс статей, который охватывает ключевые навыки Python, необходимые для изучения Data Science. Данные статьи подойдут для тех, кто уже имел опыт в программировании и хочет добавить Python в свою копилку навыков.

Привет, Python!

Python был назван в честь популярного британского комедийного телешоу 1970-х «Летающий цирк Монти Пайтона», поскольку автор был поклонником этого телешоу.

Просто ради удовольствия попробуйте прочитать приведенный ниже код и предсказать, что он будет делать при запуске. (Если вы не знаете, это нормально!) Он приурочен скетчу Монти Пайтона про спам.

spam_amount = 0
print(spam_amount)

# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама)
spam_amount = spam_amount + 4

if spam_amount > 0:
    print("But I don't want ANY spam!")

viking_song = "Spam " * spam_amount
print(viking_song)
Output

But I don`t want ANY spam!

Spam Spam Spam Spam

Эта забавная программа демонстрирует многие важные аспекты того, как выглядит код Python и как он работает. Давайте подробнее рассмотрим код.

spam_amount = 0

Присвоение переменной: здесь мы создаем переменную с именем spam_amount и присваиваем ей значение 0 используя =, что называется оператором присваивания.  

Обратите внимание: если вы программировали на других языках (например, Java или C ++), вы могли заметить некоторые вещи, которые Python не требует от нас здесь:

• нам не нужно объявлять spam_amount перед присвоением ему значения

• нам не нужно указывать Python, на какой тип значения будет ссылаться spam_amount. Фактически, мы даже можем переназначить spam_amount для обозначения другого типа вещей, таких как строка или логическое значение.

print(spam_amount)

Вызов функций: print — это функция Python, которая отображает на экране переданное ей значение. Мы вызываем функции, добавляя круглые скобки после их имени и помещая входные данные (или аргументы) функции в эти скобки.

# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама)
spam_amount = spam_amount + 4

Первая строка выше — это комментарий. В Python комментарии начинаются с символа #.

Далее мы видим пример переопределения. Переопределение значения существующей переменной выглядит так же, как создание новой переменной — по-прежнему используется оператор присваивания =.

В этом случае значение, которое мы присваиваем spam_amount, включает простое арифметическое действие с  его предыдущим значением. Когда он встречает эту строку, Python оценивает выражение в правой части = (0 + 4 = 4), а затем присваивает это значение переменной в левой части.

if spam_amount > 0:
    print("But I don't want ANY spam!")

viking_song = "Spam Spam Spam"
print(viking_song)

Мы будем говорить об «условных выражениях» позже, но, даже если вы никогда раньше не программировали, вы, вероятно, можете догадаться, что тут происходит. Python ценится за его комфортность кода и простоту.

Обратите внимание, как мы указываем, какой код принадлежит if. "But I don't want ANY spam! " выведется, только если spam_amount положительный. Но дальше (например, print (viking_song)) код должен выполняться несмотря ни на что. Как мы (и Python) это различаем?

Двоеточие (:) в конце строки if указывает, что начинается новый «блок кода». Последующие строки с отступом являются частью этого блока кода. Некоторые другие языки используют {фигурные скобки} для обозначения начала и конца блоков кода. Использование в Python значимых пробелов может удивить программистов, которые привыкли к другим языкам, но на практике это приводит к более согласованному и читаемому коду, чем языки, которые не требуют отступов блоков кода.

Последующие строки, относящиеся к viking_song, не имеют отступа с дополнительными 4 пробелами, поэтому они не являются частью блока кода if. Мы увидим больше примеров блоков кода с отступом позже, когда мы будем определять функции и использовать циклы.

Этот фрагмент кода также является нашим первым знакомством со строками в ​​Python:

"But I don't want ANY spam!"

Строки можно помечать двойными или одинарными кавычками. (Но поскольку эта конкретная строка содержит символ одинарной кавычки, мы можем запутать Python, пытаясь заключить ее в строку, если мы не будем осторожны.)

viking_song = "Spam " * spam_amount
print(viking_song)

Оператор * можно использовать для умножения двух чисел (3 * 3 равно 9), но, что довольно интересно, мы также можем умножить строку на число, чтобы получить версию, которая повторяется столько раз. Python разрешает несколько маленьких трюков, подобных этому, где операторы типа * и + имеют разное значение в зависимости от того, к чему они применяются. (Технический термин для этого — перегрузка оператора)

Числа и арифметика в Python

Мы уже видели пример переменной, содержащей число выше:

spam_amount = 0

«Число» — неформальное название для такого рода вещей, но если мы хотим быть более техническими, мы можем спросить Python, как он описывает тип вещи, которым является spam_amount:

type(spam_amount)
int

Здесь int — сокращение от integer. Есть еще один вид чисел, с которым мы часто сталкиваемся в Python:

type(19.95)
float

float — это число с плавающей точкой, которое очень полезно для представления таких вещей, как вес или пропорции.

type() — еще одна встроенная функция, которую мы встречаем (после print()), и ее следует запомнить. Очень полезно иметь возможность спросить Python «к какому типу вещей относиться это?».

Естественное желание действий с числами — выполнять арифметические операции. Мы видели оператор + для сложения и оператор * для умножения. Python также покрывает остальные основные кнопки вашего калькулятора:

Оператор

Название

Описание

a + b

Сложение

Сумма a и b

a - b

Вычитание

Разница a и b

a * b

Умножение

Произведение a и b

a / b

Истинное деление

Частное a и b

a // b

Деление с округлением

Частное a и b, без дробных частей

a % b

Модуль

Целочисленный остаток от деления a на b

a ** b

Возведение в степень

a в степени b

-a

Отрицание

Противоположное к а

Одно интересное наблюдение заключается в том, что, в то время как ваш калькулятор, вероятно, имеет только одну кнопку для деления, Python может выполнять два вида. «Истинное деление» — это именно то, что делает ваш калькулятор:

print(5 / 2)
print(6 / 2)
2.5
3.0

Это всегда дает нам float

Оператор // дает результат, который округляется вниз до целого числа.

print(5 // 2)
print(6 // 2)
2
3

Вы можете придумать, где это будет полезно?

Порядок действий

В арифметике, которую мы изучали в школе, есть соглашения о порядке, в котором выполняются операции. В англоязычной литературе можно встретить технику запоминания порядка с помощью мнемоники, такой как PEMDAS — скобки, возведение в степень, умножение/деление, сложение/вычитание (Parentheses, Exponents, Multiplication/Division, Addition/Subtraction).

Python следует аналогичным правилам относительно того, какие вычисления выполнять в первую очередь. В основном они интуитивно понятны. 

8 - 3 + 2
7
-3 + 4 * 2
5

Иногда порядок операций по умолчанию не соответствует нашему желанию: 

hat_height_cm = 25
my_height_cm = 190
# Какой у меня рост в метрах в шляпе?
total_height_meters = hat_height_cm + my_height_cm / 100
print("Height in meters =", total_height_meters, "?")
Height in meters = 26.9 ?

Здесь вам пригодятся  круглые скобки. Вы можете добавить их, чтобы Python вычислял подвыражения в необходимом вам порядке.  

total_height_meters = (hat_height_cm + my_height_cm) / 100
print("Height in meters =", total_height_meters)
Height in meters = 2.15

Встроенные функции для работы с числами

Функции min и max возвращают минимум и максимум своих аргументов соответственно:

print(min(1, 2, 3))
print(max(1, 2, 3))
1
3

Функция abs возвращает абсолютное значение своего аргумента: 

print(abs(32))
print(abs(-32))
32
32

Помимо имен двух основных числовых типов Python, int и float также могут вызываться как функции, которые преобразуют свои аргументы в соответствующий тип:  

print(float(10))
print(int(3.33))
# Их даже можно вызывать для строк
print(int('807') + 1)
10.0
3
808

Послесловие

На этом первая статься подошла к концу. Спасибо всем кто читал и уделял время. Также надеюсь, что вы вынесли какую-либо полезную информацию и научились чему-то новому. Продолжайте развиваться и узнавать новое! До скорых встреч.

После завершения нашего предыдущего урока по переменным Python в этой серии вы должны хорошо разбираться в создании и именовании объектов Python различных типов. Давайте поработаем с ними!

Вот что вы узнаете из этого урока: вы увидите, как можно выполнять вычисления на объектах в Python. К концу этого урока вы сможете создавать сложные выражения, комбинируя объекты и операторы.

Содержание

В Python операторы — это специальные символы, которые обозначают, что должны выполняться какие-то вычисления. Значения, на которые действует оператор, называются операндами.
Например:

>>> a = 10
>>> b = 20
>>> a + b
30

В этом случае лператор + складывает значения операндов a и b. Операндом может быть буквальное значение или переменная, которая ссылается на объект:

>>> a = 10
>>> b = 20
>>> a + b - 5
25

Такая последовательность операндов, разделенных знаками операций, как a + b - 5, называется арифметическим выражением. Python поддерживает множество операторов для объединения объектов данных в выражения. Они показаны ниже.

Арифметические Операторы

В следующей таблице перечислены арифметические операторы, поддерживаемые Python:

Оператор

Пример

Смысл

Результат

+ (unary)

+a

Положительное значение

a
Другими словами, он на самом деле ничего не делает. В основном это существует ради дополнения отрицательных значений.

+ (binary)

a + b

Сложение

Сумма a и b

- (unary)

-a

Отрицательное значение

Значение равно a с обратным знаком

- (binary)

a - b

Вычитание

b вычитается из a

*

a * b

Умножение

Перемножение a и b

/

a / b

Деление

Частное от деления a на b.
Результат всегда относится к типу float.

%

a % b

Модуль

Остаток от деления a на b

//

a // b

Округляющее деление(также называется Целочисленное деление)

Частное от деления a на b, округлённое до ближайшего минимального целого

**

a ** b

Степень

Возведение a в степень b

 
Вот несколько примеров использования этих операторов:

>>> a = 4
>>> b = 3
>>> +a
4
>>> -b
-3
>>> a + b
7
>>> a - b
1
>>> a * b
12
>>> a / b
1.3333333333333333
>>> a % b
1
>>> a ** b
64

Результатом обычного деления(/) всегда является значение типа float, даже если операнды делится нацело:

>>> 10 / 5
2.0
>>> type(10 / 5)
<class 'float'>

Если результат деления по полу(//) положительный, то дробная часть как бы обрезается, оставляя только целую часть. Когда результат отрицательный, результат округляется до следующего наименьшего(большего отрицательного) целого числа:

>>> 10 / 4
2.5
>>> 10 // 4
2
>>> 10 // -4
-3
>>> -10 // 4
-3
>>> -10 // -4
2

Кстати, заметьте, что в сеансе REPL можно увидеть результат вычисления выражения просто набрав его после подсказки >>> не испольуя оператор print(), точно так же можно увидеть знчение переменной:

>>> 25
25
>>> x = 4
>>> y = 6
>>> x
4
>>> y
6
>>> x * 25 + y
106

Операторы сравнения

Оператор

Пример

Смысл

Результат

==

a == b

Эквивалентно

True если значение a равно значению b,
False в противном случае

!=

a != b

Не эквивалентно

True если a не равно b и
False в противном случае

<

a < b

Меньше

True если a меньше чем b,
False в противном случае

<=

a <= b

Меньше или равно

True если a меньше или равно b,
False в противном случае

>

a > b

Больше

True если a больше b,
False в противном случае

>=

a >= b

Больше или равно

True если a больше или равно b,
False в противном случае

Вот примеры используемых операторов сравнения:

>>> a = 10
>>> b = 20
>>> a == b
False
>>> a != b
True
>>> a <= b
True
>>> a >= b
False
>>> a = 30
>>> b = 30
>>> a == b
True
>>> a <= b
True
>>> a >= b
True

Операторы сравнения обычно используются в булевых контекстах, таких как условные операторы и операторы цикла, для процессом вычислений, как вы увидите позже.

Равенство для значений с плавающей точкой

Вспомните из более раннего обсуждения чисел с плавающей точкой, что значение хранится внутри для объекта float может быть не совсем таким, как вы думаете. По этой причине не рекомендуется сравнивать значения с плавающей точкой для точного равенства. Рассмотрим этот пример:

>>> x = 1.1 + 2.2
>>> x == 3.3
False

Бабах! Внутренние представления операндов сложения не совсем равны 1.1 и 2.2, поэтому вы не можете полагаться на x для точного сравнения с 3.3.

Предпочтительным способом определения того, являются ли два значения с плавающей точкой «равными», является вычисление того, находятся ли они близко друг к другу, с учетом некоторого допуска. Посмотрите на этот пример:

>>> tolerance = 0.00001
>>> x = 1.1 + 2.2
>>> abs(x - 3.3) < tolerance
True

Функция abs() возвращает абсолютное значение. Если абсолютное значение разности между двумя числами меньше указанного допуска, они достаточно близки друг к другу, чтобы считаться равными.

Логические операторы

Логические операторы not, or и and модифицируют и объединяют выражения, вычисленные в логическом контексте, для создания более сложных условий.

Логические выражения, включающие логические операнды

Как вы уже видели, некоторые объекты и выражения в Python на самом деле имеют логический тип. То есть они равны одному из объектов Python True или False. Рассмотрим на примерах:

>>> x = 5
>>> x < 10
True
>>> type(x < 10)
<class 'bool'>
>>> t = x > 10
>>> t
False
>>> type(t)
<class 'bool'>
>>> callable(x)
False
>>> type(callable(x))
<class 'bool'>
>>> t = callable(len)
>>> t
True
>>> type(t)
<class 'bool'>

В приведённых выше примерах x < 10, callable(x) и t являются логичскими объектами или выражениями.
Их интерпретация, включая not, or и and проста так, как операндами являются логические объекты:

Оператор

Пример

Интепретация

not

not x

True если x равно False,
False если x равно True
(Logically reverses the sense of x)

or

x or y

True если одно из x или y равно True,
False в противном случае

and

x and y

True если оба x и y равны True,
False в противном случае

 
Посмотрите, как они работают на практике.

not” и логические операнды

x = 5
not x < 10
False
not callable(x)
True

Операнд

Значение

Логическое выражение

Значение

x < 10

True

not x < 10

False

callable(x)

False

not callable(x)

True

or” и логические операнды

x = 5
x < 10 or callable(x)
True
x < 0 or callable(x)
False

Операнд

Операнд

Операнд

Операнд

Логическое выражение

Операнд

x < 10

True

callable(x)

False

x < 10 or callable(x)

True

x < 0

False

callable(x)

False

x < 0 or callable(x)

False

and” и логические операнды

x = 5
x < 10 and callable(x)
False
x < 10 and callable(len)
True

Операнд

Операнд

Операнд

Операнд

Логическое выражение

Операнд

x < 10

True

callable(x)

False

x < 10 and callable(x)

False

x < 10

True

callable(len)

True

x < 10 or callable(len)

True

Оценка небулевых значений в логическом контексте

Многие объекты и выражения не равны True или False. Тем не менее, они все еще могут быть оценены в логическом контексте и определены как «правдивые» или «ложные».

Так что правда, а что нет? Как философский вопрос, это выходит за рамки этого урока!

Но в Python это четко определено. Ложными при оценке в логическом контексте считаются:

  • Логическое значение False;
  • Любое значение, которое численно равно нулю(0, 0.0, 0.0+0.0j);
  • Пустая строка;
  • Объект встроенного составного типа данных, который является пустым(см. Ниже);
  • Особое значение, обозначаемое ключевым словом Python None;

Практически любой другой объект, встроенный в Python, считается истинным.

Вы можете определить «истинность» объекта или выражения с помощью встроенной функции bool(). bool() возвращает True, если его аргумент истинно, и False, если ложно.

Числовые значения

Нулевое значение ложно.
Ненулевое значение верно.

>>> print(bool(0), bool(0.0), bool(0.0+0j))
False False False
>>> print(bool(-3), bool(3.14159), bool(1.0+1j))
True True True

Строки

Пустая строка ложно.
Непустая строка — истинно.

>>> print(bool(''), bool(""), bool(""""""))
False False False
>>> print(bool('foo'), bool(" "), bool(''' '''))
True True True

Встроенный составной объект данных

В Python есть встроенные составные типы данных, которые называются list, tuple, dict и set. Это «контейнерные» типы, которые содержат другие объекты. Объект одного из этих типов считается ложным, если он пустой, и истинным, если он не пустой.
Приведенные ниже примеры демонстрируют это для типа list.(Списки опредяются в Python квадратными скобками.)
Дополнительные сведения о типах list, tuple, dict и set см. в следующих уроках.

>>> type([])
<class 'list'>
>>> bool([])
False
>>> type([1, 2, 3])
<class 'list'>
>>> bool([1, 2, 3])
True

Ключевое слово “None

None всегда ложно:

>>> bool(None)
False

Логические выражения с участием небулевых операндов

Значения, относящиеся не логическому типу, могут модифицироваться и объединятся операторами not, or и and. Результат зависит от «истинности» операндов.

not” and Non-Boolean Operands

Вот что происходит с небулевым значением x:

 
Вот несколько конкретных примеров:

>>> x = 3
>>> bool(x)
True
>>> not x
False
>>> x = 0.0
>>> bool(x)
False
>>> not x
True

or” и не логические операнды

Вот, что происходит с двумя не булевскими операндами x и y:

 
Обратите внимание, что в этом случае выражение x or y не оценивает ни True, ни False, но вместо одного из x или y:

>>> x = 3
>>> y = 4
>>> x or y
3
>>> x = 0.0
>>> y = 4.4
>>> x or y
4.4

Несмотря на это, все еще имеет место быть то, что выражение x or y будет истинно, если либо x, либо y истинно, и ложно, если оба x и y ложно.

and” не логические операнды

Вот что вы получите для двух не булевых значений x и y:

>>> x = 3
>>> y = 4
>>> x and y
4
>>> x = 0.0
>>> y = 4.4
>>> x and y
0.0

As with or, the expression x and y does not evaluate to either True or False, but instead to one of either x or y. x and y will be истинно if both x and y are истинно, and ложно в противном случае.

Сложные логические выражения и оценка короткого замыкания

До сих пор вы видели выражения с одним оператором or или and между двумя операндами:

x or y
x and y

Несколько логических операторов и операндов могут быть соединены вместе для формирования составных логических выражений.

Составные выражения с “or

Рассмотрим следующее выражение:

x1 or x2 or x3 orxn

Это выражение будет истинным, если любое из xi будет истинным.

In an expression like this, Python uses a methodology called short-circuit evaluation, also called McCarthy evaluation in honor of computer scientist John McCarthy. The xi operands are evaluated in order from left to right. As soon as one is found to be true, the entire expression is known to be true. At that point, Python stops and no more terms are evaluated. The value of the entire expression is that of the xi that terminated evaluation.

To help demonstrate short-circuit evaluation, suppose that you have a simple “identity” function f() that behaves as follows:

  • f() takes a single argument.;
  • It displays the argument to the console.;
  • It returns the argument passed to it as its return value.;

(Как определить такую функцию вы увидите, в следующем уроке по функциям.)

Несколько примеров вызовов f() показаны ниже:

>>> f(0)
-> f(0) = 0
0
>>> f(False)
-> f(False) = False
False
>>> f(1.5)
-> f(1.5) = 1.5
1.5

Поскольку f() просто возвращает переданный ему аргумент, мы можем сделать выражение f(arg) истинно или ложно по мере необходимости, указав значение для arg это соответственно истинно или ложно. Кроме того, f() отображает свой аргумент в консоли, который визуально подтверждает, был ли он вызван или нет.

Теперь рассмотрим следующее составное логическое выражение:

>>> f(0) or f(False) or f(1) or f(2) or f(3)
-> f(0) = 0
-> f(False) = False
-> f(1) = 1
1

Сначала интерпретатор оценивает f(0), который равен 0. Числовое значение 0 равно false. Выражение еще не верно, поэтому оценка продолжается слева направо. Следующий операнд f(False) возвращает False. Это также неверно, поэтому оценка продолжается.

Далее идет f(1). Это оценивается как 1, что верно. В этот момент интерпретатор останавливается, потому что теперь он знает, что все выражение истинно. 1 возвращается в качестве значения выражения, а оставшиеся операнды f(2) и f(3) никогда не оцениваются. На дисплее видно, что вызовы f(2) и f(3) не происходят.

Составные выражения с “and

Аналогичная ситуация существует в выражении с несколькими операторами and:

x1 and x2 and x3 andxn

Выражение истинно, если все операнды xi истинны.

В этом случае оценка короткого замыкания требует, чтобы интерпретатор прекратил оценку, как только любой операнд окажется ложным, поскольку в этот момент известно, что все выражение ложно. Как только это так, операнды больше не оцениваются, и операнд ложно, завершивший вычисление, возвращается как значение выражения:

>>> f(1) and f(False) and f(2) and f(3)
-> f(1) = 1
-> f(False) = False
False
>>> f(1) and f(0.0) and f(2) and f(3)
-> f(1) = 1
-> f(0.0) = 0.0
0.0

В обоих приведенных выше примерах оценка останавливается на первом члене, который является ложным — f(False) в первом случае, f(0.0) во втором случае — и ни f(2) и f(3) не происходит. False и 0.0, соответственно, возвращаются в качестве значения выражения.

Если все операнды истинно, все они оцениваются, и последний(самый правый) возвращается как значение выражения:

>>> f(1) and f(2.2) and f('bar')
-> f(1) = 1
-> f(2.2) = 2.2
-> f(bar) = bar
'bar'

Идиомы, которые используют оценку короткого замыкания

Есть несколько общих идиоматических моделей, которые используют оценку короткого замыкания для краткости выражения.

Избежание исключения

Предположим, вы определили две переменные a и b, и хотите знать, (b / a) > 0:

>>> a = 3
>>> b = 1
>>>(b / a) > 0
True

But you need to account for the possibility that a might be 0, in which case the interpreter will raise an exception:

>>> a = 0
>>> b = 1
>>>(b / a) > 0
Traceback(most recent call last):
  File "<pyshell#2>", line 1, in <module>
   (b / a) > 0
ZeroDivisionError: division by zero

Вы можете избежать ошибки с помощью такого выражения:

>>> a = 0
>>> b = 1
>>> a != 0 and(b / a) > 0
False

Когда a равно 0, a! = 0 равно false. Оценка короткого замыкания гарантирует, что оценка останавливается в этой точке. (b / a) не оценивается и ошибки не возникает.

На самом деле, вы можете быть еще более кратким, чем это. Когда a равно 0, выражение a само по себе является ложно. Нет необходимости в явном сравнении a! = 0:

>>> a = 0
>>> b = 1
>>> a and(b / a) > 0
0

Выбор значения по умолчанию

Другая идиома заключается в выборе значения по умолчанию, когда указанное значение равно нулю или пусто. Например, предположим, что вы хотите присвоить переменную s значению, содержащемуся в другой переменной с именем string. Но если string пусто, вы хотите указать значение по умолчанию.

Вот краткий способ выразить это с помощью оценки короткого замыкания:

s = string or '<default_value>'

Если string не пуста, то истинно, и выражение string or '<default_value>' будет истинным в этой точке. Оценка останавливается и значение string возвращается и присваивается s:

>>> string = 'foo bar'
>>> s = string or '<default_value>'
>>> s
'foo bar'

On the other hand, if string is an empty string, it is ложно. Evaluation of string or '<default_value>' continues to the next operand, '<default_value>', which is returned and assigned to s:

>>> string = ''
>>> s = string or '<default_value>'
>>> s
'<default_value>'

Цепочки сравнений

Comparison operators can be chained together to arbitrary length. For example, the following expressions are nearly equivalent:

x < y <= z
x < y and y <= z

They will both evaluate to the same Boolean value. The subtle difference between the two is that in the chained comparison x < y <= z, y is evaluated only once. The longer expression x < y and y <= z will cause y to be evaluated twice.

Note: In cases where y is a static value, this will not be a significant distinction. But consider these expressions:

x < f() <= z
x < f() and f() <= z

If f() is a function that causes program data to be modified, the difference between its being called once in the first case and twice in the second case may be important.

More generally, if op1, op2, …, opn are comparison operators, then the following have the same Boolean value:

x1op1 x2op2 x3 … xn-1opn xn
x1op1 x2and x2op2 x3and … xn-1opn xn

In the former case, each xi is only evaluated once. In the latter case, each will be evaluated twice except the first and last, unless short-circuit evaluation causes premature termination.

Битовые операторы

Битовые операторы treat operands as sequences of binary digits and operate on them bit by bit. The following operators are supported:

Оператор

Приер

Смысл

Результат

&

a & b

bitwise AND

Each bit position in the result is the logical AND of the bits in the corresponding position of the operands.(1 if both are 1, в противном случае 0.)

|

a | b

bitwise OR

Each bit position in the result is the logical OR of the bits in the corresponding position of the operands.(1 if either is 1, в противном случае 0.)

~

~a

bitwise negation

Each bit position in the result is the logical negation of the bit in the corresponding position of the operand.(1 if 0, 0 if 1.)

^

a ^ b

bitwise XOR(exclusive OR)

Each bit position in the result is the logical XOR of the bits in the corresponding position of the operands.(1 if the bits in the operands are different, 0 if they are the same.)

>>

a >> n

Shift right n places

Each bit is shifted right n places.

<<

a << n

Shift left n places

Each bit is shifted left n places.

Here are some examples:

>>> '0b{:04b}'.format(0b1100 & 0b1010)
'0b1000'
>>> '0b{:04b}'.format(0b1100 | 0b1010)
'0b1110'
>>> '0b{:04b}'.format(0b1100 ^ 0b1010)
'0b0110'
>>> '0b{:04b}'.format(0b1100 >> 2)
'0b0011'
>>> '0b{:04b}'.format(0b0011 << 2)
'0b1100'

Note: The purpose of the '0b{:04b}'.format() is to format the numeric output of the bitwise operations, to make them easier to read. You will see the format() method in much more detail later. For now, just pay attention to the operands of the bitwise operations, and the results.

Идентификационные операторы

Python provides two operators, is and is not, that determine whether the given operands have the same identity—that is, refer to the same object. This is not the same thing as equality, which means the two operands refer to objects that contain the same data but are not necessarily the same object.
Here is an example of two object that are equal but not identical:

>>> x = 1001
>>> y = 1000 + 1
>>> print(x, y)
1001 1001
>>> x == y
True
>>> x is y
False

Here, x and y both refer to objects whose value is 1001. They are equal. But they do not reference the same object, as you can verify:

>>> id(x)
60307920
>>> id(y)
60307936

x and y do not have the same identity, and x is y returns False.
You saw previously that when you make an assignment like x = y, Python merely creates a second reference to the same object, and that you could confirm that fact with the id() function. You can also confirm it using the is operator:

>>> a = 'I am a string'
>>> b = a
>>> id(a)
55993992
>>> id(b)
55993992
>>> a is b
True
>>> a == b
True

In this case, since a and b reference the same object, it stands to reason that a and b would be equal as well.
Unsurprisingly, the opposite of is is is not:

>>> x = 10
>>> y = 20
>>> x is not y
True

Приоритеты операторов

Consider this expression:

>>> 20 + 4 * 10
60

There is ambiguity here. Should Python perform the addition 20 + 4 first and then multiply the sum by 10? Or should the multiplication 4 * 10 be performed first, and the addition of 20 second?

Clearly, since the result is 60, Python has chosen the latter; if it had chosen the former, the result would be 240. This is standard algebraic procedure, found universally in virtually all programming languages.

Всем операторам, которые поддерживает язык, присваивается приоритет. В выражении все операторы с наивысшим приоритетом выполняются первыми. Как только эти результаты получены, выполняются операторы следующего наивысшего приоритета. Так продолжается до тех пор, пока выражение не будет полностью оценено. Все операторы с одинаковым приоритетом выполняются в порядке слева направо.

Вот порядок приоритета операторов Python, которые вы видели до сих пор, от низшего к высшему:

низший приоритет

or

Логическое ИЛИ

==, !=, <, <=, >, >=, is, is not

сравнения, идентификация

^

побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ

*, /, //, %

умножение, деление, окруляющее деление, остаток от деления

+x, -x, ~x

плюс, минус, побитовый минус

наивысший приоритет

**

возведение в степень

 
Операторы в верхней части таблицы имеют самый низкий приоритет, а операторы в нижней части таблицы имеют самый высокий. Любые операторы в одной строке таблицы имеют одинаковый приоритет.

Понятно, почему умножение выполняется первым в приведенном выше примере: умножение имеет более высокий приоритет, чем сложение.

Аналогично, в приведенном ниже примере 3 сначала возводится в степень 4, что равно 81, а затем выполняется умножение в порядок слева направо(2 * 81 * 5 = 810):

>>> 2 * 3 ** 4 * 5
810

Приоритеты операторов могут быть переопределены с помощью скобок. Выражения в скобках всегда выполняются в первую очередь, перед выражениями, которые не заключены в скобки. Таким образом, происходит следующее:

>>> 20 + 4 * 10
60
>>>(20 + 4) * 10
240
>>> 2 * 3 ** 4 * 5
810
>>> 2 * 3 **(4 * 5)
6973568802

В первом примере сначала вычисляется 20 + 4, затем результат умножается на 10. Во втором примере сначала вычисляется 4 * 5, затем значение 3 увеличивается до этой степени, а затем результат умножается на 2.

Нет ничего плохого в том, чтобы свободно использовать круглые скобки, даже если они не нужны для изменения порядка оценки. Фактически, это считается хорошей практикой, потому что это может сделать код более читабельным, и это освобождает читателя от необходимости вызывать Приоритеты операторов из памяти. Учтите следующее:

(a < 10) and(b > 30)

Здесь круглые скобки совершенно не нужны, поскольку операторы сравнения имеют более высокий приоритет, чем and, и в любом случае выполнялись бы первыми. Но некоторые могут считать намерение версии в скобках более очевидным, чем эта версия без скобок:

a < 10 and b > 30

С другой стороны, вероятно, есть те, кто предпочел бы последнее; это вопрос личных предпочтений. Дело в том, что вы всегда можете использовать круглые скобки, если считаете, что это делает код более читабельным, даже если в них нет необходимости менять порядок вычислений.

Расширенные операторы присваивания

Вы видели, что один знак равенства(=) используется для присвоения значения переменной. Конечно, вполне допустимо, чтобы значение справа от присваивания было выражением, содержащим другие переменные:

>>> a = 10
>>> b = 20
>>> c = a * 5 + b
>>> c
70

Фактически, выражение справа от присваивания может включать ссылки на переменную, которая присваивается:

>>> a = 10
>>> a = a + 5
>>> a
15
>>> b = 20
>>> b = b * 3
>>> b
60

Первый пример интерпретируется как «a назначается текущее значение a плюс 5», эффективно увеличивая значение a на 5. Вторая гласит: «b присваивается текущее значение b раз 3, что эффективно увеличивает значение b тройные.

Конечно, такого рода присваивание имеет смысл, только если рассматриваемой переменной уже было присвоено значение:

>>> z = z / 12
Traceback(most recent call last):
  File "<pyshell#11>", line 1, in <module>
    z = z / 12
NameError: name 'z' is not defined

Python поддерживает сокращенное обозначение присваиваемых назначений для арифметических и битовых операторов:

Для этих операторов эквивалентно следующее:

x <op>= y
x = x <op> y

Посмотрите на эти примеры:

Дополненная
Назначение

Стандартная
Назначение

a += 5

эквивалентно

a = a + 5

a /= 10

эквивалентно

a = a / 10

a ^= b

эквивалентно

a = a ^ b

Заключение

В этом руководстве вы узнали о разнообразных операторах, поддерживаемых Python для объединения объектов в выражения.

Большинство примеров, которые вы видели до сих пор, касались только простых атомарных данных, но в кратком введение в тип данных вы увидели string. В следующем уроке объекты string будут изучены более подробно.

По мотивам: Operators and Expressions in Python

  • Умные герои мультфильмов и сказок
  • Умножишь как пишется правильно
  • Умножьте как пишется правильно
  • Умница дочка как пишется
  • Умная птица в русских сказках 5 букв кроссворд