В процессе работы над проектом системы управления сотрудниками на Python мне потребовалось вычислить разницу между рабочим временем за вчерашний и сегодняшний день. Иногда результат был со знаком минус, поэтому мне нужно было преобразовать его в положительное значение.
Давайте рассмотрим сценарий на практическом примере, чтобы вам было понятнее, когда и как использовать эти подходы.
Он должен спросить: «Какое у вас рабочее время?»
How many hours you worked yesterday? : 6 How many hours you worked today? : 8
Если вычесть 6–8, получится -2. Однако разница между двумя числами никогда не может быть отрицательной. Итак, результат должен быть таким:
Difference: 2
- Используя арифметический оператор с условием if-else
- С использованием оператора Copysign()
- С помощью метода Sqrt()
Используя арифметический оператор с условием if-else
Мы будем использовать оператор вычитания (-) для того, чтобы сделать число положительным. В математике (-) и (-) дают (+) результат, и в Python это правило также действует.
Кроме того, мы будем применять условную конструкцию if-else, которая будет работать только для отрицательных чисел.
Вот пример получения абсолютного значения в Python без использования функции abs().
yesterday = int(input("How many hours you worked yesterday? : ")) today = int(input("How many hours you worked today? : ")) result = yesterday - today if result < 0: print("Difference: ", -result) else: print("Difference: ", result)
В этом коде мы запрашиваем у пользователя данные, чтобы узнать, сколько времени он работал вчера и сегодня. Затем мы вычитаем стоимость сегодняшнего рабочего времени из стоимости вчерашнего.
Может получиться так, что результат будет отрицательным числом. Поэтому мы проверяем, меньше ли результат нуля. Если это так, то есть если результат отрицательный, то блок операторов выведет сообщение «Difference: » и само отрицательное число. Например, если результат равен –4, то на экран будет выведено «Difference: 4».
С использованием оператора Copysign()
Мы также можем воспользоваться методом copysign(), который уже встроен в математический модуль Python. Чтобы использовать этот метод, нам нужно импортировать математический модуль.
Метод copysign() копирует знак числа, которое мы указываем вторым параметром.
Синтаксис:
copysign(value1, value2 )
- copysign(value1, value2): здесь value1 копирует знак value2. Предположим, что value1 равно -3, а value2 — положительное значение, например 2, поэтому -3 будет преобразовано в 3.
from math import copysign yesterday = int(input("How many hours you worked yesterday? : ")) today = int(input("How many hours you worked today? : ")) result = copysign(yesterday - today, 1) print(result)
В предыдущем коде мы рассмотрели пример, который использовали ранее. Однако в этот раз нам не нужно использовать условия. Метод copysign() автоматически преобразует отрицательное число в положительное. Например, если мы применим его к разности между вчерашним и сегодняшним днём, умножив результат на 1, то получим положительное значение.
С помощью метода Sqrt()
Мы также можем воспользоваться методом sqrt(), который применяется для вычисления квадратного корня числа. Однако в Python этот метод используется для нахождения абсолютного значения.
Сначала мы найдём квадрат числа, используя оператор возведения в степень, например: num ** 2. В Python этот оператор всегда возвращает положительное число. Затем мы можем использовать метод sqrt() для получения того же значения.
Синтаксис:
(math.sqrt(value**2))
Давайте разберемся в этом на практическом примере:
import math user_input = int(input("Enter any number: ")) print(math.sqrt(user_input**2))
В этом коде мы задали значение -8. Сначала программа возводит -8 в квадрат, получая 64. Вы видите, что результат возведения в квадрат всегда является положительным числом. Затем мы используем метод sqrt(), чтобы получить корень из 64, то есть 8.