Пользовательская функция для получения абсолютного значения

Использование 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 и верните. Или вы должны вернуть номер без изменения.

Другие вопросы по тегам