Урок №25. Программирование линейных алгоритмов.
Арифметические выражения могут содержать константы (постоянные значения), имена переменных, знаки арифметических операций, круглые скобки (для изменения порядка действий).
Для основных арифметических операций в языке Python используются те же обозначения, что и в других языках программирования:
+ — сложение; — — вычитание;
* — умножение; / — деление.
Кроме того, есть ещё операция возведения в степень, которая обозначается как **. Например, х3 записывается как х**3.
Сначала рассмотрим операции с одной переменной. Оператор присваивания
i = i + 1заменяет значение i на i + 1, т. е. увеличивает значение переменной i на 1. Эта операция часто используется для увеличения специальных переменных-счётчиков, с помощью которых считается количество каких-то событий (например, щелчков мышью) или объектов (например, количество собранных призов в игре).
Более сложное присваивание
запишется в программе так:
а = (с + b - 1)/2*dЭто линейная запись арифметического выражения (запись в одну строку).
Длинное выражение можно перенести на следующую строку с помощью символа \:
а = х*(2*с + 4*b - 8*f) \
+ 2*а*с
При переносе внутри скобок символ \ вставлять не обязательно:
а = (с + 5
- 1) /2*d
Эти правила переноса справедливы и для других операторов языка Python.
Порядок выполнения действий определяется приоритетом (старшинством) операций:
- сначала выполняются действия в скобках;
- затем — возведение в степень, справа налево, т. е. 2**3**2 — это то же самое, что и 2** (3**2);
- потом — умножение и деление, слева направо;
- в конце — сложение и вычитание, слева направо.
Таким образом, умножение и деление имеют одинаковый приоритет, более высокий, чем сложение и вычитание.
Например, в выражении
а = (с + b - 1)/2*dсначала выполняются действия в скобках: сложение и затем вычитание; потом — деление на 2 и напоследок — умножение на d.
В языке Python разрешено множественное присваивание. Запись
a, b = 1, 2равносильна паре операторов присваивания:
а = 1
b = 2
При этом считается, что эти два действия происходят параллельно, т. е. одновременно. Если двум переменным присваивается одно и то же значение, можно применить множественное присваивание «по цепочке»:
а = b = 0Это равносильно паре операторов присваивания
b = 0
а = b
При изменении значений переменных удобно использовать сокращённую запись арифметических операций.

Если в выражение входят переменные разных типов, в некоторых случаях происходит автоматическое приведение типа к более «широкому». Например, результат умножения целого числа на вещественное — это вещественное число. Переход к более «узкому» типу автоматически не выполняется. Нужно помнить, что результат деления (операция «/») — это вещественное число, даже если делимое и делитель — целые и делятся друг на друга нацело.
Результат деления (операция «/») может быть нецелым числом, такие числа называются вещественными. Часто нужно получить целый результат деления целых чисел и остаток от деления. Например, известен интервал времени в секундах (скажем, 289 секунд) и нужно определить, сколько в нём целых минут и оставшихся секунд (289 с = = 4 мин 49 с). Здесь число минут 4 — это целая часть от деления 289 на 60, а 49 секунд — это остаток от этого деления.
В таких случаях используют специальные операторы:
// — деление нацело (с отбрасыванием остатка);
% — взятие остатка от деления.
Вот как выглядит программа, которая выделяет целые минуты и секунды (от 0 до 59) из интервала времени в секундах:
timeSec = 289
minutes = timeSec //60 # = 4
seconds = timeSec % 60 # = 49
С помощью этих операций удобно работать с отдельными цифрами числа. Остаток от деления числа на 10 — это последняя цифра его десятичной записи:
N = 123
lastDigit = N % 10 # = 3
Если разделить число на 10 и взять только целую часть, мы «отбросим» последнюю цифру числа: значение 123 // 10 равно 12:
N = 123
digits2 = N // 10 # = 12
Интересен результат выполнения операций / / и % для отрицательных чисел. Программа
print ( -7 // 2 )
print ( -7 % 2 )
выводит на экран числа -4 и 1. Дело в том, что с точки зрения теории чисел остаток — это неотрицательное число, поэтому
-7 = (-4)•2 + 1т. е. частное от деления -7 на 2 равно -4, а остаток равен 1. В языке Python (в отличие от многих других языков, например Паскаля и C++) эти операции выполняются математически правильно.