""" Урок 10. Математические функции, хранение чисел. Модули — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/10-math-functions-number-storage-modules/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-10.py """ # ==================================================================== # Пример 1. Встроенные математические функции # ==================================================================== numbers = [12, -5, 8, 3, -1] print("Модуль -5:", abs(-5)) print("Максимум:", max(numbers)) print("Минимум:", min(numbers)) print("Сумма:", sum(numbers)) print("2 в степени 10:", pow(2, 10)) print("Округление 3.14159 до 2 знаков:", round(3.14159, 2)) # Модуль -5: 5 # Максимум: 12 # Минимум: -5 # Сумма: 17 # 2 в степени 10: 1024 # Округление 3.14159 до 2 знаков: 3.14 # ==================================================================== # Пример 2. dir() и help(): что доступно в модуле # ==================================================================== import math print("Функций и констант в модуле math:", len(dir(math))) print("sqrt" in dir(math), "pi" in dir(math)) # Функций и констант в модуле math: 65 # True True # ==================================================================== # Пример 3. Разные способы импорта # ==================================================================== # Явный импорт — рекомендуется import math print(math.sqrt(16)) # Импорт конкретных имён — допустимо from math import sqrt, pi print(sqrt(16)) print(pi) # Псевдоним — удобно для длинных имён import math as m print(m.sqrt(16)) # Звёздочка — работает, но лучше избегать from math import * print(sqrt(16)) # 4.0 # 4.0 # 3.141592653589793 # 4.0 # 4.0 # ==================================================================== # Пример 4. Точка входа if __name__ == "__main__" # ==================================================================== print("Имя этого модуля при прямом запуске:", __name__) if __name__ == "__main__": print("Код в этом блоке выполнится только при прямом запуске файла.") # Имя этого модуля при прямом запуске: __main__ # Код в этом блоке выполнится только при прямом запуске файла. # ==================================================================== # Пример 5. Площадь и длина круга # ==================================================================== import math radius = 5.0 # результат float(input("Введите радиус: ")) area = math.pi * radius ** 2 circumference = 2 * math.pi * radius print(f"Площадь: {area:.2f}") print(f"Длина окружности: {circumference:.2f}") # Площадь: 78.54 # Длина окружности: 31.42 # ==================================================================== # Пример 6. Банковское округление # ==================================================================== for value in (1.5, 2.5, 3.5, 4.5, 5.5, 6.5): print(f"round({value}) = {round(value)}") print(round(-1.5)) print(round(4.235, 2)) # для округления, всегда идущего в одну сторону, используй math.floor / math.ceil import math print(math.floor(2.7)) print(math.ceil(2.1)) # round(1.5) = 2 # round(2.5) = 2 # round(3.5) = 4 # round(4.5) = 4 # round(5.5) = 6 # round(6.5) = 6 # -2 # 4.24 # 2 # 3 # ==================================================================== # Пример 7. Проблема точности float # ==================================================================== total = 0.1 + 0.2 print(total) print(total == 0.3) print(math.isclose(total, 0.3, rel_tol=1e-9)) print(round(total, 2) == 0.3) # 0.30000000000000004 # False # True # True # ==================================================================== # Пример 8. Точные расчёты с Decimal # ==================================================================== from decimal import Decimal price = Decimal('19.99') quantity = Decimal('3') total = price * quantity print(total) # Правильное сравнение print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3')) # Неправильно: передача float вместо строки print(Decimal(0.1)) # 59.97 # True # 0.1000000000000000055511151231257827021181583404541015625 # ==================================================================== # Пример 9. Тригонометрия # ==================================================================== import math angle = 30.0 # результат float(input("Введите угол в градусах: ")) radians = math.radians(angle) print(f"sin({angle}°) = {math.sin(radians):.4f}") print(f"cos({angle}°) = {math.cos(radians):.4f}") print(f"tan({angle}°) = {math.tan(radians):.4f}") # sin(30.0°) = 0.5000 # cos(30.0°) = 0.8660 # tan(30.0°) = 0.5774 # ==================================================================== # Пример 10. Стандартная библиотека: встроенный модуль или нет # ==================================================================== import sys for name in ("os", "math", "numpy"): print(name, "->", "встроенный" if name in sys.stdlib_module_names else "нужно установить") # os -> встроенный # math -> встроенный # numpy -> нужно установить # ==================================================================== # Пример 11. Ловушка: смешивание Decimal и float напрямую # ==================================================================== from decimal import Decimal try: result = Decimal('10.5') + 2.5 except TypeError as error: print(f"Ошибка: {error}") # правильно: обернуть float в Decimal через строку result = Decimal('10.5') + Decimal(str(2.5)) print(result) # Ошибка: unsupported operand type(s) for +: 'decimal.Decimal' and 'float' # 13.0