Понимание операторов в Python

PythonBeginner
Практиковаться сейчас

Введение

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

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

Изучение арифметических операторов и операторов сравнения

На этом шаге мы изучим основные арифметические операторы и операторы сравнения в Python. Эти операторы необходимы для выполнения вычислений и принятия решений в ваших программах. В рабочей среде для вас уже создан файл с именем operators.py в директории ~/project.

Сначала найдите файл operators.py в проводнике файлов (file explorer) слева в редакторе VS Code и откройте его. Весь наш код мы будем писать в этом единственном файле.

Начнем с арифметических операторов. Добавьте следующий код на Python в файл operators.py:

## Arithmetic Operators
a = 21
b = 5
print(f'{a} + {b} = {a + b}')
print(f'{a} - {b} = {a - b}')
print(f'{a} * {b} = {a * b}')
print(f'{a} / {b} = {a / b}') ## Standard division
print(f'{a} // {b} = {a // b}')  ## Floor division, rounds down to the nearest whole number
print(f'{a} % {b} = {a % b}')  ## Modulo, returns the remainder
print(f'{a} ** {b} = {a ** b}')  ## Exponentiation, a to the power of b

После добавления кода сохраните файл, нажав Ctrl + S.

Чтобы запустить скрипт, откройте интегрированный терминал (integrated terminal) в VS Code, выбрав Terminal > New Terminal в верхнем меню. Затем выполните следующую команду:

python ~/project/operators.py

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

21 + 5 = 26
21 - 5 = 16
21 * 5 = 105
21 / 5 = 4.2
21 // 5 = 4
21 % 5 = 1
21 ** 5 = 4084101

Далее давайте изучим операторы сравнения. Эти операторы сравнивают два значения и возвращают булево (Boolean) значение: True или False.

Добавьте следующий код в конец вашего файла operators.py:

## Comparison Operators
print("\n--- Comparison Operators ---")
a = 6
b = 5
print(f'{a} == {b} is {a == b}')  ## Equal to
print(f'{a} != {b} is {a != b}')  ## Not equal to
print(f'{a} > {b} is {a > b}')    ## Greater than
print(f'{a} < {b} is {a < b}')    ## Less than
print(f'{a} >= {b} is {a >= b}')  ## Greater than or equal to
print(f'{a} <= {b} is {a <= b}')  ## Less than or equal to

Снова сохраните файл и запустите его из терминала:

python ~/project/operators.py

Теперь вывод будет включать результаты операций сравнения:

21 + 5 = 26
21 - 5 = 16
21 * 5 = 105
21 / 5 = 4.2
21 // 5 = 4
21 % 5 = 1
21 ** 5 = 4084101

--- Comparison Operators ---
6 == 5 is False
6 != 5 is True
6 > 5 is True
6 < 5 is False
6 >= 5 is True
6 <= 5 is False

Теперь вы успешно использовали арифметические операторы и операторы сравнения в скрипте Python.

Практика с операторами присваивания и логическими операторами

На этом шаге мы попрактикуемся в использовании операторов присваивания (assignment operators) и логических операторов (logical operators). Операторы присваивания используются для присвоения или обновления значения переменной, в то время как логические операторы используются для объединения условных выражений.

Продолжайте работать с файлом operators.py в редакторе VS Code.

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

Добавьте следующий код в конец вашего файла operators.py:

## Assignment Operators
print("\n--- Assignment Operators ---")
a = 10
b = 3
print(f'Initial a: {a}')

c = a
c += b  ## Equivalent to c = c + b
print(f'a += b: {c}')

c = a
c -= b  ## Equivalent to c = c - b
print(f'a -= b: {c}')

c = a
c *= b  ## Equivalent to c = c * b
print(f'a *= b: {c}')

c = a
c /= b  ## Equivalent to c = c / b
print(f'a /= b: {c}')

## Walrus operator (Python 3.8+)
## It assigns a value to a variable as part of a larger expression.
print("\n--- Walrus Operator ---")
text = 'hello python'
if (n := len(text)) > 10:
    print(f'The string is long enough ({n} characters)')

Сохраните файл и запустите его из терминала:

python ~/project/operators.py

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

... (output from previous step) ...

--- Assignment Operators ---
Initial a: 10
a += b: 13
a -= b: 7
a *= b: 30
a /= b: 3.3333333333333335

--- Walrus Operator ---
The string is long enough (12 characters)

Теперь добавим примеры логических операторов (and, or, not). Эти операторы работают с булевыми значениями, но также могут работать и с другими типами. В Python значения, такие как 0, None и пустые коллекции ('', [], {}), считаются False (ложным). Все остальные значения считаются True (истинным).

Добавьте следующий код в конец вашего файла operators.py:

## Logical Operators
print("\n--- Logical Operators ---")
x = True
y = False

print(f'{x} and {y} is {x and y}')
print(f'{x} or {y} is {x or y}')
print(f'not {x} is {not x}')

## Evaluation with non-boolean values
a = 10  ## True
b = 0   ## False
print(f'{a} and {b} returns {a and b}') ## Returns the first Falsey value or the last Truthy value
print(f'{a} or {b} returns {a or b}')   ## Returns the first Truthy value or the last Falsey value

Сохраните файл и запустите его снова:

python ~/project/operators.py

Теперь вывод будет включать результаты логических операций:

... (output from previous examples) ...

--- Logical Operators ---
True and False is False
True or False is True
not True is False
10 and 0 returns 0
10 or 0 returns 10

Теперь вы попрактиковались в использовании операторов присваивания и логических операторов в Python.

Изучение побитовых операторов

На этом шаге мы узнаем о побитовых операторах (bitwise operators). Эти операторы выполняют операции непосредственно над двоичным (base-2) представлением целых чисел. Это полезно для низкоуровневой манипуляции данными.

Продолжайте редактировать файл operators.py.

Сначала посмотрим на двоичное представление нескольких чисел с помощью функции bin(). Префикс 0b указывает на то, что следующие цифры являются двоичными.

Добавьте этот код в конец operators.py:

## Bitwise Operators
print("\n--- Bitwise Operators ---")
a = 5  ## Binary: 0b101
b = 9  ## Binary: 0b1001
print(f'Binary of {a} is {bin(a)}')
print(f'Binary of {b} is {bin(b)}')

## For clarity, let's align them with 4 bits:
## a = 0101
## b = 1001

## Bitwise AND (&): Sets each bit to 1 if both bits are 1.
## 0101 & 1001 = 0001 (Decimal 1)
print(f'{a} & {b} = {a & b}')

## Bitwise OR (|): Sets each bit to 1 if one of the two bits is 1.
## 0101 | 1001 = 1101 (Decimal 13)
print(f'{a} | {b} = {a | b}')

## Bitwise XOR (^): Sets each bit to 1 if only one of the two bits is 1.
## 0101 ^ 1001 = 1100 (Decimal 12)
print(f'{a} ^ {b} = {a ^ b}')

## Bitwise NOT (~): Inverts all the bits.
## ~a is equivalent to -(a+1)
print(f'~{a} = {~a}')

## Left Shift (<<): Shifts bits to the left, filling with zeros.
## Equivalent to multiplying by 2**n.
## 5 << 2 means 0101 becomes 10100 (Decimal 20)
print(f'{a} << 2 = {a << 2}')

## Right Shift (>>): Shifts bits to the right, discarding bits from the right.
## Equivalent to floor division by 2**n.
## 9 >> 2 means 1001 becomes 10 (Decimal 2)
print(f'{b} >> 2 = {b >> 2}')

Сохраните файл и запустите скрипт из терминала:

python ~/project/operators.py

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

... (output from previous steps) ...

--- Bitwise Operators ---
Binary of 5 is 0b101
Binary of 9 is 0b1001
5 & 9 = 1
5 | 9 = 13
5 ^ 9 = 12
~5 = -6
5 << 2 = 20
9 >> 2 = 2

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

Использование операторов принадлежности и тождественности

На этом заключительном шаге мы рассмотрим операторы принадлежности (in, not in) и операторы тождественности (identity operators) (is, is not). Операторы принадлежности проверяют, присутствует ли значение в последовательности (sequence), в то время как операторы тождественности проверяют, ссылаются ли две переменные на один и тот же объект в памяти.

Продолжайте работать с файлом operators.py.

Сначала добавим примеры операторов принадлежности. Они обычно используются с такими последовательностями, как списки (lists), кортежи (tuples) и строки (strings).

Добавьте следующий код в конец вашего файла operators.py:

## Membership Operators
print("\n--- Membership Operators ---")
my_list = [1, 3, 5, 7]
print(f'3 in {my_list} is {3 in my_list}')
print(f'4 not in {my_list} is {4 not in my_list}')

greeting = "hello world"
print(f'"world" in "{greeting}" is {"world" in greeting}')

Сохраните файл и запустите его:

python ~/project/operators.py

Вывод для операторов принадлежности будет следующим:

... (output from previous steps) ...

--- Membership Operators ---
3 in [1, 3, 5, 7] is True
4 not in [1, 3, 5, 7] is True
"world" in "hello world" is True

Теперь давайте изучим операторы тождественности. Важно понимать разницу между is (тождественность) и == (равенство). == проверяет, одинаковы ли значения двух объектов, в то время как is проверяет, являются ли они одним и тем же объектом (то есть, имеют ли они один и тот же адрес в памяти).

Добавьте следующий код в ваш файл operators.py:

## Identity Operators
print("\n--- Identity Operators ---")

## For small integers, Python often reuses the same object.
x = 256
y = 256
print(f'x is y (for 256): {x is y}') ## This is often True

## For larger integers, Python may create separate objects.
a = 257
b = 257
print(f'a is b (for 257): {a is b}') ## This is often False

## For mutable objects like lists, they are different objects even if their content is the same.
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(f'list1 == list2: {list1 == list2}') ## Checks for equal content (True)
print(f'list1 is list2: {list1 is list2}') ## Checks for same object (False)
print(f'list1 is not list2: {list1 is not list2}') ## Checks for different objects (True)

Сохраните файл и запустите его в последний раз:

python ~/project/operators.py

Вывод демонстрирует разницу между равенством и тождественностью:

... (output from previous examples) ...

--- Identity Operators ---
x is y (for 256): True
a is b (for 257): True
list1 == list2: True
list1 is list2: False
list1 is not list2: True

Вы успешно использовали операторы принадлежности и тождественности, завершив изучение основных типов операторов Python.

Резюме

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

Кроме того, вы углубились в побитовые операторы для понимания низкоуровневой манипуляции данными и завершили работу операторами принадлежности (membership) и тождественности (identity) для проверки наличия элементов и тождественности объектов. Написав и выполнив код для каждого типа оператора в редакторе VS Code, вы заложили прочную основу для использования этих важнейших инструментов в вашем будущем программировании на Python.