Математические функции в Python
Обновлено:
На этом уроке рассматриваем пять встроенных математических функций:
abs()
sum()
max()
min()
round()
В конце конспекта для самостоятельного изучения также рассматриваются:
pow()
divmod()
1. Функция abs()
Функция abs() возвращает модуль числа.
Модуль числа — это расстояние от числа до нуля. Поэтому модуль не может быть отрицательным.
Функция abs() принимает ровно один аргумент.
На данном этапе передаём в неё:
- целые числа —
int; - вещественные числа —
float.
Официальная документация Python определяет abs() как функцию, возвращающую абсолютное значение числа. (Python documentation)
2. Положительное число в abs()
Если передать положительное число, функция вернёт это же число:
abs(10)
Результат:
10
Ещё пример:
abs(3.14)
Результат:
3.14
Положительное число уже является своим модулем.
3. Отрицательное число в abs()
Если передать отрицательное число, функция отбросит минус:
abs(-10)
Результат:
10
Пример с вещественным числом:
abs(-3.14)
Результат:
3.14
Тип числа при этом сохраняется:
abs(-10)
возвращает int.
abs(-3.14)
возвращает float.
4. Ноль в abs()
abs(0)
Результат:
0
abs(0.0)
Результат:
0.0
5. abs() принимает один аргумент
Правильно:
abs(-25)
Неправильно вызывать функцию без аргументов:
abs()
Будет ошибка:
TypeError
Нельзя передавать несколько аргументов:
abs(-10, 20)
Это тоже приведёт к ошибке TypeError.
6. Разница между abs() и унарным минусом
Унарный минус меняет знак числа на противоположный:
number = 5
-number
Результат:
-5
Если число уже отрицательное:
number = -5
-number
Результат:
5
Функция abs() работает иначе. Она всегда возвращает неотрицательный модуль числа:
abs(5)
Результат:
5
abs(-5)
Результат:
5
Сравним:
number = 5
print(-number)
print(abs(number))
Результат:
-5
5
Унарный минус меняет знак.
Функция abs() отбрасывает минус, если он есть.
7. Практическое применение abs()
Предположим, торговый бот сравнивает текущую цену актива с целевой ценой:
current_price = 102.5
target_price = 100.0
Разница:
current_price - target_price
Результат:
2.5
Если текущая цена ниже целевой:
current_price = 97.5
target_price = 100.0
Разница будет отрицательной:
current_price - target_price
Результат:
-2.5
Но иногда нам важно узнать только расстояние между ценами независимо от направления:
price_difference = abs(current_price - target_price)
Результат:
2.5
Подобный расчёт можно использовать:
- для измерения отклонения текущей цены от целевой;
- для определения размера ошибки;
- для расчёта расстояния между двумя координатами;
- для определения отклонения фактического результата от запланированного.
8. Функция sum()
Функция sum() вычисляет сумму элементов итерируемого объекта.
На данном этапе передаём в неё:
- список с числами;
- кортеж с числами.
Элементы должны поддерживать сложение друг с другом.
Функция складывает начальное значение start и элементы итерируемого объекта слева направо. По умолчанию start равен нулю. (Python documentation)
9. Сумма элементов списка
Создадим список:
numbers = [10, 20, 30]
Передадим его в sum():
result = sum(numbers)
Результат:
60
Функция выполнила:
10 + 20 + 30
10. Разные числа в sum()
В списке могут находиться:
- положительные числа;
- отрицательные числа;
- целые числа;
- вещественные числа.
numbers = [10, -5, 3.5, -1.5]
result = sum(numbers)
Результат:
7.0
Вычисление:
10 + -5 + 3.5 + -1.5
Так как в списке присутствуют объекты класса float, результат тоже получился float.
11. sum() и кортеж
Функция sum() работает не только со списками, но и с кортежами:
numbers = (10, 20, 30)
result = sum(numbers)
print(result)
Результат:
60
Список и кортеж являются итерируемыми объектами.
12. Пустой список в sum()
Если передать пустой список:
sum([])
результат будет:
0
Складывать нечего, поэтому функция возвращает начальное значение, которое по умолчанию равно нулю.
То же самое произойдёт с пустым кортежем:
sum(())
Результат:
0
13. Один элемент в sum()
sum([25])
Результат:
25
Функция складывает ноль и единственный элемент:
0 + 25
Пример с вещественным числом:
sum([3.14])
Результат:
3.14
14. Ошибки при использовании sum()
Внутри итерируемого объекта должны находиться объекты, которые можно складывать между собой.
Неправильно:
numbers = [10, 20, '30']
sum(numbers)
Будет ошибка:
TypeError
Число нельзя сложить со строкой.
Неправильно передавать строку напрямую:
sum('123')
Это тоже приведёт к ошибке TypeError.
Функция sum() предназначена для сложения числовых значений, а не для соединения строк.
15. Аргумент start
У функции sum() есть второй необязательный аргумент:
start
Он определяет значение, с которого начинается сложение.
По умолчанию:
start=0
Пример:
numbers = [10, 20, 30]
result = sum(numbers, start=100)
Вычисление:
100 + 10 + 20 + 30
Результат:
160
16. start и пустой список
sum([], start=100)
Результат:
100
Элементов в списке нет, поэтому функция возвращает значение start.
Ещё пример:
sum([1, 2, 3], start=10)
Результат:
16
На практике аргумент start используется реже, чем обычный вызов sum().
На данном этапе в start передаём только числа.
17. Функции max() и min()
Функция max() возвращает максимальный объект.
Функция min() возвращает минимальный объект.
На этом уроке используем их только с целыми и вещественными числами.
Эти функции могут работать:
- с одним итерируемым объектом;
- с несколькими отдельными аргументами.
Если передан один аргумент, он должен быть итерируемым. Если переданы два или более позиционных аргумента, функции сравнивают их напрямую. (Python documentation)
18. Максимальное число в списке
numbers = [10, -5, 3.5, 100, -20.5]
result = max(numbers)
Результат:
100
Самое большое число в списке — 100.
19. Минимальное число в списке
Используем тот же список:
numbers = [10, -5, 3.5, 100, -20.5]
result = min(numbers)
Результат:
-20.5
Самое маленькое число — -20.5.
20. max() и min() с кортежем
numbers = (25, 3.5, -10, 100)
print(max(numbers))
print(min(numbers))
Результат:
100
-10
21. Итерируемый объект с одним элементом
max([25])
Результат:
25
min([25])
Результат:
25
Если элемент только один, он одновременно является:
- максимальным;
- минимальным.
22. Пустой объект в max() и min()
В отличие от sum(), функции max() и min() не могут самостоятельно определить результат для пустого объекта.
Неправильно:
max([])
Будет ошибка:
ValueError
Неправильно:
min(())
Будет такая же ошибка ValueError.
Если итерируемый объект пуст и default не указан, Python вызывает ValueError. (Python documentation)
23. Аргумент default
У функций max() и min() есть необязательный именованный аргумент:
default
Он определяет, что нужно вернуть, если итерируемый объект пустой.
max([], default=0)
Результат:
0
min([], default=0)
Результат:
0
24. В default можно передать любой объект
max([], default='Нет данных')
Результат:
'Нет данных'
min((), default=3.14)
Результат:
3.14
Значение default возвращается без поиска максимального или минимального объекта, потому что итерируемый объект пуст.
25. default используется только для пустого объекта
numbers = []
result = max(numbers, default=9)
Результат:
9
Теперь добавим в список число:
numbers = [-5]
result = max(numbers, default=9)
Результат:
-5
Функция не сравнивает -5 со значением default.
Аргумент default не является дополнительным элементом списка.
Он используется только в том случае, если итерируемый объект пуст.
Даже если в default находится большее число:
max([-5], default=1_000_000)
результат будет:
-5
26. Несколько аргументов в max() и min()
Функции можно передать несколько отдельных чисел:
max(10, 25, -5)
Результат:
25
min(10, 25, -5)
Результат:
-5
Можно передавать переменные:
a = 10
b = 25
c = -5
maximum_number = max(a, b, c)
minimum_number = min(a, b, c)
27. Отличие sum() от max() и min()
Функции max() и min() умеют работать с несколькими отдельными аргументами:
max(10, 20, 30)
min(10, 20, 30)
Функция sum() так работать не умеет.
Неправильно:
sum(10, 20, 30)
Будет ошибка TypeError.
В sum() первым аргументом должен быть итерируемый объект:
sum([10, 20, 30])
или:
sum((10, 20, 30))
28. Нужно ли создавать список ради sum()
Если есть несколько отдельных переменных:
a = 10
b = 20
c = 30
нет необходимости создавать список только ради вызова sum():
sum([a, b, c])
Проще сложить переменные оператором +:
a + b + c
Результат будет одинаковым:
60
Для нескольких отдельных значений оператор сложения:
- проще;
- понятнее;
- не требует создания дополнительного списка или кортежа.
Функция sum() особенно удобна, когда числа уже находятся внутри итерируемого объекта.
29. Тип результата sum(), max() и min()
Сумма только целых чисел:
sum([10, 20, 30])
Результат:
60
Это int.
Если присутствует float:
sum([10, 20.5, 30])
Результат:
60.5
Это float.
Функции max() и min() возвращают один из найденных объектов:
max([10, 20.5, 15])
Результат:
20.5
Это float.
min([10, 20.5, 15])
Результат:
10
Это int.
30. Практическое применение sum(), max() и min()
Предположим, программа получила результаты пяти закрытых сделок:
trade_results = [25.5, -10.0, 40.0, -5.5, 15.0]
Общий результат:
total_result = sum(trade_results)
Самая прибыльная сделка:
best_result = max(trade_results)
Самая убыточная сделка:
worst_result = min(trade_results)
Эти функции могут использоваться для расчёта:
- общей прибыли или убытка;
- максимальной цены;
- минимальной цены;
- общего количества товаров;
- максимального времени выполнения операции;
- минимального значения среди измерений.
31. Функция round()
Функция round() округляет число.
В неё можно передать:
- один обязательный аргумент — число;
- второй необязательный аргумент — количество оставляемых разрядов.
Если второй аргумент не указан, round() возвращает ближайшее целое число. Если число находится ровно посередине, Python выбирает ближайший чётный вариант. (Python documentation)
32. Целое число в round()
Если передать целое число:
round(10)
результат будет:
10
round(-25)
Результат:
-25
Целое число уже не имеет дробной части, которую нужно округлять.
33. Округление вещественного числа
round(3.2)
Результат:
3
round(3.8)
Результат:
4
Если второй аргумент не указан, результат будет объектом класса int.
Даже если передать float:
round(5.0)
результат:
5
Это int.
34. Банковское округление
Рассмотрим:
round(3.5)
Число 3.5 находится ровно посередине между 3 и 4.
Python выбирает чётное число:
4
Теперь:
round(4.5)
Число 4.5 находится ровно посередине между 4 и 5.
Чётное число — 4.
Результат:
4
Поэтому:
round(3.5)
возвращает:
4
А:
round(4.5)
тоже возвращает:
4
Такой способ называется:
- банковским округлением;
- округлением к ближайшему чётному.
Он уменьшает накопление систематической ошибки при выполнении большого количества округлений.
Ещё примеры:
round(2.5)
Результат:
2
round(5.5)
Результат:
6
35. Второй аргумент round()
Во втором аргументе указывается, сколько знаков нужно оставить после точки:
round(3.14159, 2)
Результат:
3.14
round(3.14159, 3)
Результат:
3.142
round(12.3456, 1)
Результат:
12.3
36. Ноль во втором аргументе
round(3.14159, 0)
Результат:
3.0
Обратите внимание: если второй аргумент передан, результат сохраняет тип исходного числа.
round(3.14159)
Результат:
3
Это int.
round(3.14159, 0)
Результат:
3.0
Это float.
Официальная документация указывает: без ndigits результат является int, а с указанным ndigits результат имеет тот же тип, что и исходное число. (Python documentation)
37. Отрицательный второй аргумент
Второй аргумент может быть отрицательным.
В этом случае округляются разряды до точки.
Округление до десятков:
round(555, -1)
Результат:
560
Округление до сотен:
round(555, -2)
Результат:
600
Округление до тысяч:
round(555, -3)
Результат:
1000
38. Банковское округление до десятков и сотен
Правило ближайшего чётного работает и при округлении целой части:
round(250, -2)
Число 250 находится ровно между 200 и 300.
Python выбирает вариант с чётной цифрой сотен:
200
round(350, -2)
Результат:
400
39. Тип результата round()
Без второго аргумента:
round(10.8)
Результат:
11
Тип результата — int.
Со вторым аргументом:
round(10.8, 0)
Результат:
11.0
Тип результата — float.
Целое число сохраняет тип int:
round(555, -2)
Результат:
600
40. Среднее арифметическое
Среднее арифметическое вычисляется по формуле:
сумма всех чисел / количество чисел
Теперь мы умеем написать этот алгоритм с помощью:
sum()
len()
/
Пример:
numbers = [10, 20, 30, 40]
average = sum(numbers) / len(numbers)
print(average)
Результат:
25.0
41. Почему результат среднего — float
Сумма:
sum([10, 20, 30, 40])
Результат:
100
Длина:
len([10, 20, 30, 40])
Результат:
4
Деление:
100 / 4
Результат:
25.0
Обычное деление / всегда возвращает float.
Поэтому среднее арифметическое, рассчитанное таким способом, будет float.
42. Округление среднего значения
numbers = [10, 20, 31]
average = sum(numbers) / len(numbers)
rounded_average = round(average, 2)
print(average)
print(rounded_average)
Результат:
20.333333333333332
20.33
43. Пустой список и среднее значение
Для пустого списка:
numbers = []
Сумма будет:
sum(numbers)
Результат:
0
Длина будет:
len(numbers)
Результат:
0
Вычисление среднего приведёт к делению на ноль:
sum(numbers) / len(numbers)
Будет ошибка:
ZeroDivisionError
Поэтому для такого алгоритма список должен содержать хотя бы один элемент.
44. Где используется среднее арифметическое
Среднее арифметическое может применяться для расчёта:
- средней оценки ученика;
- средней температуры;
- средней стоимости заказа;
- среднего времени выполнения задачи;
- средней цены покупки актива;
- среднего результата торговой сделки;
- среднего количества пользователей за день.
Например, торговый бот совершил сделки по ценам:
trade_prices = [100.0, 102.5, 101.5]
Средняя цена:
average_price = sum(trade_prices) / len(trade_prices)
Результат:
101.33333333333333
Его можно округлить:
average_price = round(average_price, 2)
Результат:
101.33
В будущем среднее можно будет вычислять с помощью функции statistics.mean() из стандартной библиотеки Python или numpy.mean() из сторонней библиотеки NumPy. В модуле math отдельной функции для обычного среднего арифметического нет. (Python documentation)
45. Дополнительные возможности int()
Мы уже знаем, что строку с целым числом можно преобразовать в int:
int('123')
Результат:
123
Класс int также допускает:
- пробельные символы по краям строки;
- знак минус;
- нижние подчёркивания между цифрами.
Официальная документация разрешает пробельные символы вокруг числа, знак и одиночные нижние подчёркивания между цифрами. (Python documentation)
46. Пробелы вокруг числа
int(' 123 ')
Результат:
123
Пробелы по краям строки не мешают преобразованию.
int(' -123 ')
Результат:
-123
47. Служебные пробельные символы
Мы уже знакомы с:
\n
Он создаёт перенос строки.
Ещё один пробельный символ:
\t
Он обозначает табуляцию.
Пример:
int('\n\t-12_345\t\n')
Результат:
-12345
Класс int:
- убрал пробельные символы по краям;
- распознал знак минус;
- распознал нижнее подчёркивание между цифрами;
- создал целое число.
48. Нижнее подчёркивание в строке с числом
int('1_000_000')
Результат:
1000000
int('-25_000')
Результат:
-25000
Нижнее подчёркивание улучшает читаемость и не становится частью результата.
49. Дополнительные возможности float()
Класс float также принимает:
- пробельные символы по краям;
- знак минус;
- нижние подчёркивания между цифрами.
float(' -123.5 ')
Результат:
-123.5
float('\n\t-12_345.5\t\n')
Результат:
-12345.5
float('1_000_000.25')
Результат:
1000000.25
Документация Python разрешает пробельные символы вокруг строки, знак и нижние подчёркивания между цифрами при преобразовании в float. (Python documentation)
50. Примеры неправильных строк
Пробел внутри самого числа недопустим:
int('12 345')
Будет ошибка:
ValueError
Строка с вещественным числом по-прежнему не преобразуется напрямую в int:
int('3.14')
Будет ошибка ValueError.
Два нижних подчёркивания подряд недопустимы:
int('1__000')
Будет ошибка ValueError.
Нижнее подчёркивание должно находиться между цифрами.
51. Почему важно следить за типами данных
Программисту важно понимать:
- какой тип данных находится в переменной;
- какие типы принимает функция;
- какой тип функция возвращает;
- какой тип возвращает математическая операция;
- можно ли передавать полученный результат в следующую функцию.
Например:
numbers = [10, 20, 30]
sum(numbers)
возвращает:
60
Это int.
sum(numbers) / len(numbers)
возвращает:
20.0
Это float.
round(20.0)
возвращает:
20
Это снова int.
Тип может изменяться на каждом этапе вычисления.
52. Авария ракеты Ariane 5
4 июня 1996 года первый запуск ракеты Ariane 5 завершился аварией.
Официальное расследование установило, что во время работы программного обеспечения происходило преобразование 64-битного вещественного значения в 16-битное знаковое целое число. Значение оказалось слишком большим для такого целого типа, что вызвало ошибку преобразования и последующую потерю навигационной информации. (sunnyday.mit.edu)
В результате ракета и находившаяся на ней полезная нагрузка были уничтожены. Стоимость потери обычно оценивается в сотни миллионов долларов. (Википедия)
Материал для чтения:
Авария ракеты-носителя «Ариан-5»
53. Главный вывод из примера с ракетой
Даже похожие типы данных могут иметь важные различия.
Программист должен понимать:
Какой тип данных находится здесь?
Какой тип принимает следующая операция?
Помещается ли значение в выбранный тип?
Какой тип данных вернёт функция?
Одна неправильная операция преобразования может привести не только к небольшой ошибке в программе, но и к серьёзным финансовым и техническим последствиям.
54. Самостоятельное изучение: функция pow()
Функция pow() на уроке подробно не рассматривалась.
Эту функцию нужно изучить самостоятельно.
Функция pow() возводит число в степень:
pow(5, 2)
Результат:
25
Эта запись работает так же, как:
5 ** 2
Двухаргументная форма pow(base, exp) эквивалентна оператору base ** exp. (Python documentation)
55. Примеры с pow()
pow(2, 3)
Результат:
8
pow(10, 4)
Результат:
10000
pow(25, 0.5)
Результат:
5.0
pow(5, -2)
Результат:
0.04
56. Третий аргумент pow()
У функции pow() есть вариант с тремя аргументами:
pow(base, exponent, modulus)
Пример:
pow(2, 5, 3)
Он вычисляет:
2 ** 5 % 3
Сначала:
2 ** 5
Результат:
32
Затем:
32 % 3
Результат:
2
Поэтому:
pow(2, 5, 3)
возвращает:
2
Python выполняет такую операцию эффективнее, чем отдельное вычисление очень большой степени с последующим поиском остатка. (Python documentation)
57. Самостоятельное изучение: функция divmod()
Правильное название функции:
divmod()
Функция diffmod() в Python отсутствует.
divmod() принимает два числа и одновременно возвращает:
- результат целочисленного деления;
- остаток от деления.
Для целых чисел:
divmod(a, b)
возвращает то же самое, что:
(a // b, a % b)
Результат возвращается в виде кортежа. (Python documentation)
58. Примеры с divmod()
divmod(14, 5)
Результат:
(2, 4)
Потому что:
14 // 5
Результат:
2
А:
14 % 5
Результат:
4
Ещё пример:
divmod(123, 10)
Результат:
(12, 3)
59. Распаковка результата divmod()
Так как функция возвращает кортеж с двумя объектами, его можно распаковать:
quotient, remainder = divmod(14, 5)
print(quotient)
print(remainder)
Результат:
2
4
Пример с переводом секунд:
total_seconds = 367
minutes, seconds = divmod(total_seconds, 60)
print(minutes)
print(seconds)
Результат:
6
7
На уроке функция divmod() не показывалась. Этот раздел предназначен для самостоятельного изучения.
60. Основные правила урока
Модуль числа:
abs(-10)
Сумма чисел:
sum([10, 20, 30])
Максимальное значение:
max([10, 20, 30])
Минимальное значение:
min([10, 20, 30])
Значение для пустого объекта:
max([], default=0)
Округление до целого:
round(3.8)
Округление до двух знаков:
round(3.14159, 2)
Округление до сотен:
round(555, -2)
Среднее арифметическое:
sum(numbers) / len(numbers)
Возведение в степень с помощью функции:
pow(5, 2)
Целочисленное деление и остаток одновременно:
divmod(14, 5)
Домашнее задание
Как выполнять задания
Короткие задания, в которых нужно определить результат или найти ошибку, удобно выполнять в IDLE.
Порядок работы:
- прочитать код;
- определить предполагаемый результат;
- выполнить код в IDLE;
- проверить ответ.
Задачи из нескольких строк удобнее выполнять в Visual Studio Code. Для них нужно создавать отдельные Python-файлы.
Часть 1. Функция abs()
Задание 1
Определить результат и тип результата:
abs(10)
abs(-10)
abs(3.14)
abs(-3.14)
abs(0)
abs(0.0)
Задание 2
Определить, какие вызовы приведут к ошибке:
abs(-25)
abs()
abs(-10, 20)
abs('25')
Для каждого ошибочного примера указать класс ошибки.
Задание 3
Сравнить результаты:
number = 5
print(-number)
print(abs(number))
и:
number = -5
print(-number)
print(abs(number))
Объяснить разницу между унарным минусом и abs().
Задание 4. Отклонение цены
Создать файл:
price_difference.py
Создать переменные:
current_price = 97.5
target_price = 100.0
Вычислить расстояние между ценами независимо от направления.
Использовать функцию abs().
Ожидаемый результат:
2.5
Часть 2. Функция sum()
Задание 5
Определить результаты:
sum([10, 20, 30])
sum((5, 10, 15))
sum([])
sum(())
sum([25])
sum([-10, 5, 3.5])
Задание 6
Определить тип каждого результата:
sum([1, 2, 3])
sum([1.0, 2, 3])
sum((10, 20.5))
sum([], start=5)
sum([1, 2], start=0.5)
Задание 7
Определить, какие вызовы приведут к ошибке:
sum([10, 20, 30])
sum([10, '20', 30])
sum('123')
sum(10, 20, 30)
sum([1, 2, 3], start=10)
Задание 8
Определить результаты:
sum([10, 20, 30], start=100)
sum([], start=100)
sum((1.5, 2.5), start=10)
Объяснить роль аргумента start.
Задание 9. Результаты сделок
Создать файл:
trade_results.py
Создать список:
trade_results = [25.5, -10.0, 40.0, -5.5, 15.0]
Найти:
- общий результат всех сделок;
- количество сделок;
- средний результат одной сделки.
Вывести все значения через print().
Часть 3. Функции max() и min()
Задание 10
Определить результаты:
max([10, 20, 30])
min([10, 20, 30])
max((-5, -10, -3))
min((3.5, 2.5, 10.0))
max([25])
min([25])
Задание 11
Определить, какие вызовы приведут к ошибке:
max([])
min(())
max([], default=0)
min((), default='Нет данных')
Задание 12
Определить результаты:
max([], default=9)
max([-5], default=9)
min([], default=-100)
min([25], default=-100)
Объяснить, почему default не участвует в сравнении с элементами.
Задание 13
Создать переменные:
a = 10
b = 25.5
c = -7
Найти максимальное и минимальное значения двумя способами:
- передать переменные напрямую в
max()иmin(); - создать из переменных список и передать список.
Задание 14
Объяснить, почему этот код работает:
max(10, 20, 30)
а этот приводит к ошибке:
sum(10, 20, 30)
Задание 15. Анализ цен
Создать файл:
price_statistics.py
Создать список:
prices = [100.5, 98.0, 103.75, 101.25, 99.5]
Найти:
- общую сумму цен;
- максимальную цену;
- минимальную цену;
- среднюю цену;
- среднюю цену, округлённую до двух знаков.
Часть 4. Функция round()
Задание 16
Определить результат и тип:
round(10)
round(10.0)
round(3.2)
round(3.8)
round(-3.8)
Задание 17
Определить результаты банковского округления:
round(2.5)
round(3.5)
round(4.5)
round(5.5)
round(6.5)
Для каждого примера указать, какое ближайшее чётное число выбрал Python.
Задание 18
Округлить числа:
3.141592
до:
- одного знака после точки;
- двух знаков;
- трёх знаков;
- четырёх знаков.
Задание 19
Определить результаты и типы:
round(3.14159)
round(3.14159, 0)
round(3.14159, 2)
round(555, -2)
round(555.0, -2)
Задание 20
Определить результаты:
round(555, -1)
round(555, -2)
round(555, -3)
round(250, -2)
round(350, -2)
Часть 5. Среднее арифметическое
Задание 21
Создать файл:
average_numbers.py
Создать список:
numbers = [15, 25, 35, 45]
Найти:
- сумму;
- количество элементов;
- среднее арифметическое;
- округлённое среднее арифметическое.
Задание 22
Рассчитать среднее значение для каждого объекта:
[10, 20, 30]
(1.5, 2.5, 3.5)
[-10, 5, 15]
[100]
Задание 23
Объяснить, почему этот код приводит к ошибке:
numbers = []
average = sum(numbers) / len(numbers)
Указать класс ошибки.
Задание 24. Средняя цена сделок
Создать файл:
average_trade_price.py
Создать список:
trade_prices = [101.25, 99.5, 102.75, 100.0]
Найти:
- сумму всех цен;
- количество цен;
- среднюю цену;
- среднюю цену, округлённую до двух знаков;
- максимальную цену;
- минимальную цену;
- разницу между максимальной и минимальной ценами с помощью
abs().
Часть 6. Преобразование строк
Задание 25
Определить результаты:
int(' 123 ')
int('\n-25\n')
int('\t1_000\t')
float(' 3.14 ')
float('\n-1_000.5\n')
Задание 26
Определить, какие преобразования приведут к ошибке:
int('12 345')
int('12_345')
int('1__000')
float('1_000.5')
float('3..14')
int('3.14')
Задание 27
Создать файл:
number_conversion.py
Создать строки:
integer_text = '\n\t-25_000\t\n'
float_text = ' -10_500.75 '
Преобразовать:
integer_textвint;float_textвоfloat.
Затем вывести:
- полученные числа;
- их модули;
- округлённое вещественное число.
Часть 7. Самостоятельное изучение pow() и divmod()
Задание 28
Не используя оператор **, вычислить с помощью pow():
2 в степени 5
5 в степени 3
10 в степени 4
25 в степени 0.5
5 в степени -2
Задание 29
Сравнить результаты:
pow(2, 5)
2 ** 5
pow(2, 5, 3)
2 ** 5 % 3
Объяснить связь между записями.
Задание 30
Использовать divmod() для следующих пар:
14 и 5
123 и 10
367 и 60
1000 и 120
Для каждого результата распаковать кортеж в две переменные:
quotient
remainder
Часть 8. Итоговая задача
Задание 31
Создать файл:
math_functions.py
В программе необходимо:
- добавить комментарий с описанием программы;
- создать список положительных и отрицательных чисел;
- найти сумму элементов;
- найти максимальный элемент;
- найти минимальный элемент;
- найти среднее арифметическое;
- округлить среднее до двух знаков;
- найти модуль минимального элемента;
- найти расстояние между максимальным и минимальным элементами;
- проверить работу
max()с пустым списком и аргументомdefault; - преобразовать строку с пробелами и нижними подчёркиваниями в
int; - преобразовать строку с вещественным числом в
float; - использовать
pow()для возведения числа в степень; - использовать
divmod()и распаковать результат; - вывести результаты через
print(); - использовать понятные имена переменных в стиле
snake_case; - оформить код по правилам PEP 8;
- закончить файл пустой строкой.
Использовать только ранее изученные типы данных, функции, операторы и конструкции.
Часть 9. Исправление программы
Задание 32
В коде специально допущены ошибки:
numbers = [10, -5, 3.5, '20']
total = sum(numbers)
maximum = max([])
minimum = min()
average = total / len([])
rounded_average = round(average, '2')
difference = abs(maximum, minimum)
integer_number = int('1__000')
float_number = float('3..14')
power = pow()
quotient, remainder = divmod(10)
print(total, maximum, minimum, sep = ', ')
Нужно:
- найти все ошибки;
- объяснить причину каждой ошибки;
- исправить код;
- оформить его по правилам PEP 8;
- добиться успешного запуска программы.