Пользовательская функция для получения абсолютного значения
Использование Wing Ide 3.3.5
Как бы я написал функцию my_abs(value), которая возвращает абсолютное значение его x, без использования встроенной функции abs в Python.
Например:
Test Result
print(my_abs(3.5)) 3.5
print(my_abs(-7.0)) 7.0
2 ответа
Язвительный ответ будет использовать встроенный __abs__()
функция вместо:
>>> print((-7.0).__abs__())
7.0
Вот наивный однострочник (в основном эквивалентный ответу @Nabin):
def simple_abs(num):
return -num if num < 0 else num
Однако оказывается, что есть ошибка, потому что
>>> -0.0 < 0
False
>>> simple_abs(-0.0)
-0.0 ← Buggy
>>> abs(-0.0)
0.0 ← Correct
Оказывается, что тестирование на отрицательный ноль в Python трудно сделать. Один из возможных тестов str(-0.0) == '-0.0'
, Вот что @JasonS помогло мне придумать:
import math
def my_abs(num):
return -num if math.copysign(1, num) < 0 else num
Или, в более длинной, более читаемой форме:
def my_abs(num):
if math.copysign(1, num) < 0:
return -num
else:
return num
Простой алгоритм будет:
if number<0:
return number*-1
else:
return number
Вы должны проверить, является ли число отрицательным. Это так, затем умножьте его на -1 и верните. Или вы должны вернуть номер без изменения.