Математические функции в 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:

  1. убрал пробельные символы по краям;
  2. распознал знак минус;
  3. распознал нижнее подчёркивание между цифрами;
  4. создал целое число.

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() принимает два числа и одновременно возвращает:

  1. результат целочисленного деления;
  2. остаток от деления.

Для целых чисел:

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.

Порядок работы:

  1. прочитать код;
  2. определить предполагаемый результат;
  3. выполнить код в IDLE;
  4. проверить ответ.

Задачи из нескольких строк удобнее выполнять в 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]

Найти:

  1. общий результат всех сделок;
  2. количество сделок;
  3. средний результат одной сделки.

Вывести все значения через 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

Найти максимальное и минимальное значения двумя способами:

  1. передать переменные напрямую в max() и min();
  2. создать из переменных список и передать список.

Задание 14

Объяснить, почему этот код работает:

max(10, 20, 30)

а этот приводит к ошибке:

sum(10, 20, 30)

Задание 15. Анализ цен

Создать файл:

price_statistics.py

Создать список:

prices = [100.5, 98.0, 103.75, 101.25, 99.5]

Найти:

  1. общую сумму цен;
  2. максимальную цену;
  3. минимальную цену;
  4. среднюю цену;
  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

до:

  1. одного знака после точки;
  2. двух знаков;
  3. трёх знаков;
  4. четырёх знаков.

Задание 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]

Найти:

  1. сумму;
  2. количество элементов;
  3. среднее арифметическое;
  4. округлённое среднее арифметическое.

Задание 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]

Найти:

  1. сумму всех цен;
  2. количество цен;
  3. среднюю цену;
  4. среднюю цену, округлённую до двух знаков;
  5. максимальную цену;
  6. минимальную цену;
  7. разницу между максимальной и минимальной ценами с помощью 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   '

Преобразовать:

  1. integer_text в int;
  2. float_text во float.

Затем вывести:

  1. полученные числа;
  2. их модули;
  3. округлённое вещественное число.

Часть 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

В программе необходимо:

  1. добавить комментарий с описанием программы;
  2. создать список положительных и отрицательных чисел;
  3. найти сумму элементов;
  4. найти максимальный элемент;
  5. найти минимальный элемент;
  6. найти среднее арифметическое;
  7. округлить среднее до двух знаков;
  8. найти модуль минимального элемента;
  9. найти расстояние между максимальным и минимальным элементами;
  10. проверить работу max() с пустым списком и аргументом default;
  11. преобразовать строку с пробелами и нижними подчёркиваниями в int;
  12. преобразовать строку с вещественным числом в float;
  13. использовать pow() для возведения числа в степень;
  14. использовать divmod() и распаковать результат;
  15. вывести результаты через print();
  16. использовать понятные имена переменных в стиле snake_case;
  17. оформить код по правилам PEP 8;
  18. закончить файл пустой строкой.

Использовать только ранее изученные типы данных, функции, операторы и конструкции.


Часть 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 = ', ')

Нужно:

  1. найти все ошибки;
  2. объяснить причину каждой ошибки;
  3. исправить код;
  4. оформить его по правилам PEP 8;
  5. добиться успешного запуска программы.