Практическое занятие №42 (1И)
Тема: Интерактивная среда программирование на Python. Ввод и вывод данных.
Цель работы: формирование теоретических и практических навыков работы на языке программирования Python
Оборудование: компьютер с установленной операционной системой Windows, подключение к сети Интернет
Время работы 2 часа
Теоретические сведения
Операции над числами с плавающей точкой могут вызывать ошибки и давать неожиданные результаты. Работа с типом float требует повышенного внимания.
Также отображение таких чисел конечно, несмотря на то что в математике имеются иррациональные числа (например, Пи, корень квадратный из двух).
При изучении темы следует обратить внимание на:
-
Структуру числа с плавающей точкой (какие его части сохраняются в памяти и сколько бит занимает каждая);
-
Конструктор типа float;
-
Способы преобразования в целые числа (trunc, floor, ceiling, round);
-
Правила округления.
Если вы можете избежать применения чисел с плавающей точкой, этим стоит воспользоваться, так как они могут давать при вычислениях ложные результаты с точки зрения математики. При необходимости точного итога на практике используют встроенный модуль decimal (десятичные числа) или fractions (дроби).
Ход работы
Задача 1
Напишите функцию to_float(num), которая преобразует любое число в число с плавающей точкой. Если в качестве аргумента передан другой тип данных, она возвращает «Невозможно преобразовать».
def to_float(num):
if isinstance(num, (int, float)):
return float(num)
return "Невозможно преобразовать"
# Тесты
print(to_float(12))
print(to_float(-1.762))
print(to_float(True))
print(to_float('Не число'))
print(to_float('2.2'))
Задача 2
Дано 4 числа. Нужно написать функцию avg_5(a, b, c, d), которая возвращает среднее арифметическое аргументов и округляет его до 5 знаков после запятой.
def avg_5(a, b, c, d):
return round((a + b + c + d) / 4, 5)
# Тесты
print(avg_5(1, 6, 7, 4))
print(avg_5(1.7, 6.2, 2, 6))
print(avg_5(3, -3.143223442, -4.76, 1.3902))
Задача 3
Функция mul_to_int(a, b) может принимать целые или вещественные числа. Если результат умножения аргументов не имеет значимых чисел после запятой, то она возвращает его в виде целого числа. В противном случае – в виде float.
def mul_to_int(a, b):
res = a * b
if float(res).is_integer():
return int(res)
return res
# Тесты
print(mul_to_int(2, 4))
print(mul_to_int(2.5, 4))
print(mul_to_int(2.2, 2))
Задача 4
Дан объем шара X куб. ед. Найдите радиус фигуры.
from math import pi
(3 * 36 / (4 * pi)) ** (1/3)
2.048352189765887
(3 * 1 / (4 * pi)) ** (1/3)
0.6203504908994001
(3 * 19.32 / (4 * pi)) ** (1/3)
1.6645857441456702
Задача 5
Напишите функцию округления round_standard(num), принимающую число с плавающей точкой и округляющую его до целого числа в соответствии с правилами школьной математики.
def round_standard(num):
if num = 0:
sign = 1
else:
sign = -1
return sign * int((abs(num) + 0.5))
# Тесты
print(round_standard(1.5))
print(round_standard(-2.5))
print(round_standard(1.6))
print(round_standard(5.11))
Задача 6
Так как в Python операции с вещественными числами могут давать неожиданные результаты (в частности, 0.1 + 0.2 не будет в точности равняться 0.3), стоит задача с этим как-то справляться. Требуется написать функцию eqv(a, b, c), которая принимает 3 числа. Числа a и b складываются. Затем эта сумма сравнивается с числом "с" с определенной степенью точности. Точность равняется 0.01 % от большего из чисел a и b. Функция вернет True, если выполняется равенство, иначе False.
def eqv(a, b, c):
res = a + b
e = 0.01 / 100 # Перевод процентов в долю
tolerance = e * max(abs(a), abs(b)) # Находим значение отклонения
return abs(res - c) # Определяем, меньше ли разница, чем отклонение
# Тесты
print(eqv(0.12, 0.31, 0.43))
print(eqv(0.1, 0.2, 0.3))
print(eqv(0.1, 0.2, 0.4))
print(eqv(-0.1, -0.2, -0.3))
Контрольные вопросы:
-
Из каких трех элементов состоит тип данных float?
-
Какие типы данных можно преобразовать в числа с плавающей точкой?