Занятие 4. Дополнительные операции

Мы познакомились с 4 основными математическими операциями в языке Python: сложение (+), вычитание (-), умножение (*) и деление (/). Добавив ещё 3 операции, мы получим инструментарий, достаточный для написания 99% программ.

ОператорОписание
**Возведение в степень
%Остаток от деления
//Целочисленное деление

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

Оператор возведения в степень a ** n возводит число a в степень n. Рассмотрим работу данного оператора на примерах:

print(2 ** 0)
print(2 ** 1)
print(2 ** 2)
print(2 ** 3)
print(2 ** (-1))

Результатом выполнения такой программы будет:

1
2
4
8
0.5

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

Запомни: в отличие от многих языков программирования, в языке Python для возведения в степень используется оператор **, а не ^.

Обратите внимание: оператор возведения в степень (**) является правоассоциативным (значение выражения вычисляется справа налево) в соответствии с правилами математики. Таким образом, выражение x ** y ** z вычисляется как x ** (y ** z).

Результатом работы следующей программы:

print(2 ** 2 ** 3)     # 2 ** (2 ** 3) = 2 ** 8

будет:

256

Целочисленное деление

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

print(10 // 3)
print(10 // 4)
print(10 // 5)
print(10 // 6)
print(10 // 12)

Результатом выполнения такой программы будет:

3
2
2
1
0

При делении отрицательных чисел необходимо помнить, что результат целочисленного деления не превосходит частное. Другими словами, округление берётся в меньшую сторону (число −4−4 меньше, чем число −3−3).

Результатом работы следующей программы:

print(10 // 3)
print(-10 // 3)

будут числа:

3   # округление в меньшую сторону
-4  # округление в меньшую сторону

Деление с остатком

Оператор деления с остатком возвращает остаток от деления двух целых чисел. Рассмотрим работу данного оператора на примерах:

print(10 % 3)
print(10 % 4)
print(10 % 5)
print(10 % 6)
print(10 % 12)
print(10 % 20)

Результатом выполнения такой программы будет:

1
2
0
4 
10
10

Запомни: при нахождении остатка от деления на целое число n может получаться результат 0,1,2,…n −1. Например, при делении на 2 возможны остатки 0,1, при делении на 3 возможны остатки 0,1,2 и т.д.

Примечания

Примечание 1. Оператор нахождения остатка очень полезен при решении многих задач. Например, число делится на n нацело тогда и только тогда, когда остаток от деления на n равен 0.

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

Примечание 3. Наивысший приоритет имеет оператор возведения в степень **.

Примечание 4. Обратите внимание: результатом деления n % m при n < m является число n. Например, 5 % 9 = 5, 3 % 13 = 3 и т.д.

Частые ошибки

1. Ошибочное использование знака / вместо знака //.

❌ Неправильно:

print(10 / 3)  # печатает 3.3333333333333335

✅ Правильно:

print(10 // 3)  # печатает 3

/ – это операция обычного (или “плавающего”) деления. В результате обычного деления получается десятичная дробь, а не целое число. Подробнее числа с плавающей точкой и оператор / мы изучим далее в курсе.

2. Ошибочное понимание приоритета операций. Не забываем, что оператор ** имеет самый высокий приоритет:

print(-10**2)  # -100

print(5 * 3**2)  # 45

3. Неверное представление, в какую сторону округляет операция целочисленного деления:

print(5 // 2)  # 2

print(-5 // 2)  # -3

Операция целочисленного деления всегда округляет только в меньшую сторону!

Обработка цифр числа

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

Рассмотрим программу получения цифр двузначного числа:

num = 17
a = num % 10
b = num // 10

print(a)
print(b)

Результатом выполнения программы будут два числа:

7
1

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

Запомни: последняя цифра числа определяется всегда как остаток от деления числа на 1010 (% 10). Чтобы отщепить последнюю цифру от числа, необходимо разделить его нацело на 1010 (// 10).

Рассмотрим программу получения цифр трехзначного числа:

num = 754

# просто берем последнюю цифру числа через % 10
a = num % 10

# сначала откидываем последнюю цифру числа через // 10 и получаем число 75
# далее берем последнюю цифру у числа 75 через % 10
b = num // 10 % 10

# просто откидываем две последние цифры у числа через // 100
c = num // 100

print(a)
print(b)
print(c)

Результатом выполнения программы будут три числа:

4
5
7

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

Алгоритм получения цифр n-значного числа

Несложно понять, по какому алгоритму можно найти каждую цифру n-значного числа num:

  • Последняя цифра: (num // 10**0) % 10;
  • Предпоследняя цифра: (num // 10**1) % 10;
  • Предпредпоследняя цифра: (num // 10**2) % 10;
  • Вторая цифра: (num // 10**(n - 2)) % 10;
  • Первая цифра: (num // 10**(n - 1)) % 10.

Таким образом, мы получаем общую формулу для нахождения любой цифры числа: 

(num // 10 ** (n - i)) % 10,

где i – номер цифры (начиная с 1).

Примечания

Примечание 1. Имейте в виду, что цифры числа можно находить разными способами, не только теми, что рассказаны в теории. Например, вторую цифру числа 123 можно найти так:

num = 123

print(num // 10 % 10)  # 2
print(num % 100 // 10)  # 2

Примеры решения задач

Задача 1. Напишите программу, определяющую число десятков и единиц в двузначном числе.

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

num = int(input())
last_digit = num % 10
first_digit = num // 10

print('Число десятков =', first_digit)
print('Число единиц =', last_digit)

Задача 2. Напишите программу, в которой рассчитывается сумма цифр двузначного числа.

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

num = int(input())
last_digit = num % 10
first_digit = num // 10

print('Сумма цифр =', last_digit + first_digit)

Задача 3. Напишите программу, которая печатает число, образованное при перестановке цифр двузначного числа.

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

num = int(input())
last_digit = num % 10
first_digit = num // 10

print('Искомое число =', last_digit * 10 + first_digit)

Задача 4. Напишите программу, в которую вводится трехзначное число и которая выводит на экран его цифры (через запятую).

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

num = int(input())
digit3 = num % 10
digit2 = (num // 10) % 10
digit1 = num // 100

print(digit1, digit2, digit3, sep=',')

Решим задачу вместе. Номер купе 🌶️

В купейном вагоне имеется 99 купе с четырьмя местами для пассажиров в каждом. Напишите программу, которая определяет номер купе, в котором находится место с заданным номером (нумерация мест сквозная, начинается с 11).

Формат входных данных
На вход программе подаётся целое число – место с заданным номером в вагоне.

Формат выходных данных
Программа должна вывести одно число – номер купе, в котором находится указанное место.


Задания по теме

Задание 1. Расстояние в метрах

Напишите программу, которая находит полное число метров по заданному числу сантиметров.

Формат входных данных
На вход программе подаётся натуральное число – количество сантиметров.

Формат выходных данных
Программа должна вывести одно число – полное число метров.

Пример ввода:
345

Пример вывода:
3

Задание 2. Мандарины

n школьников делят k мандаринов поровну, неделящийся остаток остается в корзине. Сколько целых мандаринов достанется каждому школьнику? Сколько целых мандаринов останется в корзине?

Формат входных данных
На вход программе подаётся два целых числа: количество школьников и количество мандаринов, каждое на отдельной строке.

Формат выходных данных
Программа должна вывести два числа: количество мандаринов, которое достанется каждому школьнику, и количество мандаринов, которое останется в корзине, каждое на отдельной строке.

Пример ввода:
3
6

Пример вывода:
2
0

Задание 3. Трехзначное число

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

Формат входных данных
На вход программе подаётся положительное трёхзначное число.

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

Пример ввода:
333

Пример вывода:
Сумма цифр = 9
Произведение цифр = 27

Задача 4. Пересчет временного интервала

Напишите программу для пересчёта величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах.

Формат входных данных
На вход программе подаётся целое число – количество минут.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Пример ввода:
150

Пример вывода:
150 мин - это 2 час 30 минут.

Точка в конце – обязательно!

P.S. Не забывает про параметр end.

Задача 5. Сама неотвратимость 🌶️

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

Формат входных данных
На вход дается число целое n – население Вселенной.

Формат выходных данных
Программа должна вывести одно число – количество выживших.

Пример ввода:
99

Пример вывода:
50
Пример ввода:
1132

Пример вывода:
566

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *