Арифметические операции
В предыдущих разделах вы уже видели примеры с базовой арифметикой. В следующей таблице приведены самые распространенные арифметические операторы в Python с примерами:
| Оператор | Назначение | Пример | Результат |
|---|---|---|---|
+ | Сложение | 2 + 4 | 6 |
- | Вычитание | 10 - 2.5 | 7.5 |
* | Умножение | -2 * 123 | -246 |
/ | Деление (результат с плавающей точкой) | 9 / 2 | 4.5 |
// | Деление (целочисленный результат) | 9 // 2 | 4 |
% | Остаток от деления | 9 % 2 | 1 |
** | Возведение в степень | 2 ** 3 | 8 |
Порядок операций знаком из математики: сначала вычисляются степени, затем умножение и деление, и наконец сложение и вычитание. Порядок можно изменить с помощью скобок.
Например, этот фрагмент кода
print(2 + 3 * 3)
print((2 + 3) * 3)выводит
11 15
Операнды, операторы и типы данных
Вычисление обычно состоит из операндов и операторов:
Тип данных операнда обычно определяет тип данных результата: если сложить два целых числа, результат тоже будет целым числом. Если из одного числа с плавающей точкой вычесть другое число с плавающей точкой, результат будет числом с плавающей точкой. Более того, если хотя бы один операнд в выражении является числом с плавающей точкой, результат тоже будет числом с плавающей точкой, независимо от других операндов.
Деление / является исключением из этого правила. Его результат - число с плавающей точкой, даже если операнды являются целыми числами. Например, 1 / 5 даст число с плавающей точкой 0.2.
Пример:
height = 172.5
weight = 68.55
# the Body Mass Index, or BMI, is calculated by dividing body mass with the square of height
# height is converted into metres in the formula
bmi = weight / (height / 100) ** 2
print(f"The BMI is {bmi}")Эта программа выводит следующее:
The BMI is 23.037177063642087
Обратите внимание, что в Python также есть оператор целочисленного деления //. Если операнды являются целыми числами, он произведет целое число. Результат округляется вниз до ближайшего целого. Например, эта программа
x = 3
y = 2
print(f"/ operator {x/y}")
print(f"// operator {x//y}")выводит
/ operator 1.5 // operator 1
Числа как ввод
Мы уже использовали команду input, чтобы считывать строки от пользователя. Эту же функцию можно использовать для считывания чисел, но строку, которую возвращает функция, затем нужно преобразовать в программе к числовому типу данных. В предыдущем разделе мы приводили целые числа к строкам с помощью функции str. Здесь применяется тот же базовый принцип, но имя функции приведения будет другим.
Строку можно преобразовать в целое число с помощью функции int. Следующая программа спрашивает у пользователя год рождения и сохраняет его в переменной input_str. Затем программа создает другую переменную year, которая содержит год, преобразованный в целое число. После этого вычисление 2021-year становится возможным с использованием значения, введенного пользователем.
input_str = input("Which year were you born? ")
year = int(input_str)
print(f"Your age at the end of the year 2021: {2021 - year}" )Which year were you born? 1995 Your age at the end of the year 2021: 26
Обычно для считывания числового значения от пользователя не нужно создавать две отдельные переменные (как input_str и year выше). Вместо этого чтение ввода функцией input и преобразование функцией int можно выполнить за один шаг:
year = int(input("Which year were you born? "))
print(f"Your age at the end of the year 2021: {2021 - year}" )Точно так же строку можно преобразовать в число с плавающей точкой с помощью функции float. Эта программа спрашивает у пользователя рост и вес и использует их для вычисления BMI:
height = float(input("What is your height? "))
weight = float(input("What is your weight? "))
height = height / 100
bmi = weight / height ** 2
print(f"The BMI is {bmi}")Пример вывода программы:
What is your height? 163 What is your weight? 74.45 The BMI is 28.02137829801649
Использование переменных
Посмотрим на программу, которая вычисляет сумму трех чисел, введенных пользователем:
number1 = int(input("First number: "))
number2 = int(input("Second number: "))
number3 = int(input("Third number: "))
sum = number1 + number2 + number3
print(f"The sum of the numbers: {sum}")Пример выполнения программы:
First number: 5 Second number: 21 Third number: 7 The sum of the numbers: 33
Программа использует четыре разные переменные, но в этом случае легко хватило бы двух:
sum = 0
number = int(input("First number: "))
sum = sum + number
number = int(input("Second number: "))
sum = sum + number
number = int(input("Third number: "))
sum = sum + number
print(f"The sum of the numbers: {sum}")Теперь весь ввод пользователя считывается в одну и ту же переменную number. Значение переменной sum увеличивается на значение переменной number каждый раз, когда пользователь вводит новое число.
Рассмотрим подробнее эту команду:
sum = sum + numberЗдесь значение переменной sum и значение переменной number складываются, а результат сохраняется обратно в переменную sum. Например, если перед командой значение sum равно 3, а значение number равно 2, после выполнения команды значение sum будет 5.
Увеличение значения переменн ой - очень распространенная операция. Поэтому существует часто используемая сокращенная запись, которая дает тот же результат, что и явное сложение выше:
sum += numberЭто позволяет записать программу выше немного короче:
sum = 0
number = int(input("First number: "))
sum += number
number = int(input("Second number: "))
sum += number
number = int(input("Third number: "))
sum += number
print(f"The sum of the numbers: {sum}")На самом деле переменная number нам не обязательно нужна вообще. Ввод пользователя можно также обрабатывать так:
sum = 0
sum += int(input("First number: "))
sum += int(input("Second number: "))
sum += int(input("Third number: "))
print(f"The sum of the numbers: {sum}")Конечно, количество нужных переменных зависит от контекста. Если требуется помнить каждое значение, введенное пользователем, то "переиспользовать" одну и ту же переменную для чтения разных значений от пользователя не получится. Рассмотрим следующее:
number1 = int(input("First number: "))
number2 = int(input("Second number: "))
print(f"{number1} + {number2} = {number1+number2}")First number: 2 Second number: 3 2 + 3 = 5
С другой стороны, в программе выше нет именованной переменной для хранения суммы двух значений.
"Переиспользование" переменной имеет смысл только тогда, когда нужно временно хранить значения похожего типа и назначения, например при суммировании чисел.
В следующем примере переменная data используется сначала для сохранения имени пользователя, а затем его возраста. Это совершенно неразумно.
data = input("What is your name? ")
print("Hi " + data + "!")
data = int(input("What is your age? "))
# program continues...Лучше использовать отдельные переменные с описательными именами:
name = input("What is your name? ")
print("Hi " + name + "!")
age = int(input("What is your age? "))
# program continues...Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.