Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чаплыгин А.Н. Учимся програмировать вместе с Пи...doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать

§2.8. Порядок операций

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

30

Ревизия: 170

Переменные, операции и выражения

>» print 100 * 20 / 80, "%"

25 %

В этом примере рассчитывается процентное соотношение двух чисел: 2 0 и 8 0. После результата выражения выводится символ % - интерпретатор вычисляет арифметическое выражение и выводит результат, а затем дописывает строку, стоящую после запятой.

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

Самый высокий приоритет у скобок, которые позволяют изменять последовательность выполнения операций. Таким образом, операции в скобках выполняются в первую очередь. Например, 2* (3-1) равно 4, (1+1)**(5-2)-8. Скобки удобно использовать и для того, чтобы выражения было легче читать, даже если их наличие в выражении никак не отражается на результате: (100*20)/80.

Следующий приоритет у операции возведения в степень, поэтому 2**1+1 равно 3, а не 4, и выражение 3*1**3 даст результат 3, а не 27.

Умножение и деление имеют одинаковый приоритет, более высокий, чем у операций сложения и вычитания. 2*3-1 равно 5, а не 4; 2/3-1 равно -1, а не 1 (результат целочисленного деления 2/3=0).

Операторы с одинаковым приоритетом выполняются слева направо. Так что в выражении 100*20/80 умножение выполняется первым (выражение приобретает вид 2 000/8 0); затем выполняется деление, выдающее в результате значение 2 5. Если бы операции выполнялись справа налево, то результат получился бы другим.

Упражнение. Измените выражение 100*20/80 так, чтобы последовательность выполнения операций была обратной. Какой результат вы получили после его выполнения и почему?

§2.9. Простейшие операции над строками

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

|message-l~ "Hello"/123 "Hello"*"world!" "15"+2

Но оператор + работает со строками, хотя обозначает другую операцию: конкатенацию или сцепление строк.

>» strl = "Hello"

>» str2 = " world"

>» print strl + str2 + "!"

Hello world!

Обратите внимание, что вторая строка начинается с пробела. Пробел такой же символ, как и любой другой.

Оператор * тоже можно использовать по отношению к строкам, но при условии, что одним из операндов будет целое число. В этом случае оператор * символизирует операцию повторения строки (или итерацию). Например, ' Fun' *3 выдаст результат ' FunFunFun'.

31

Ревизия: 170

Переменные, операции и выражения

Можно проследить аналогию между операциями над числами и операциями над строками: так же, как 4*3 эквивалентно 4 + 4 + 4, ' Fun' *3 эквивалентно ' Fun' + ' Fun' + ' Fun'. Но с другой стороны, конкатенация и повторение имеют несколько существенных отличий от сложения и умножения.

Упражнение. Все операции в математике классифицируются по их свойствам (коммутативность, ассоциативность и т.п.). Какими свойствами, присущими сложению и умножению, не обладают конкатенация и повторение?

Не ленитесь заглянуть в математический справочник - понимание свойств объектов, которыми оперируете, даст вам большие преимущества.

Упражнение. Какой результат будет получен после выполнения выражения "hello"+ " world" *3?Какие выводы можно сделать на основе этого результата?