Как найти модуль в питоне без abs

{«id»:13970,»url»:»/distributions/13970/click?bit=1&hash=91604a90c2650116d868cf1db62d454cb2b1436d305e0040effcaed4203feae5″,»title»:»u041au0442u043e u043fu0440u043eu0432u0435u0440u044fu0435u0442 u0432u0430u0448u0435u0433u043e u0448u043eu0444u0435u0440u0430 u043du0430 u0442u0440u0435u0437u0432u043eu0441u0442u044c? u0410 u043du0430 u0440u0438u0441u043a u0438u043du0444u0430u0440u043au0442u0430? «,»buttonText»:»u0423u0437u043du0430u0442u044c»,»imageUuid»:»29370595-d77a-5707-95b9-2f7879cddd4d»}

Вступление

Всем начинающим кодерам привет!

Модуль числа… Это, казалось бы, простая вещь… да, так оно и есть. Тем не менее — всегда интересно поэкспериментировать и по-новому взглянуть на простое.

Сегодня я покажу вам 6 способов найти модуль числа в Python 3. Я не стал добавлять сюда совсем абсурдные вещи, но немного абсурдности здесь все же будет.

1 способ

Для начала самое очевидное. Проверяем отрицательное число (назовем его x) или положительное, т.е. <0 или нет. В случае отрицательного значения x, его нужно умножить на -1. Можно так:

def abs1(x):
if x < 0:
return x*(-1)
return x

А можно заменить умножение унарным минусом:

def abs1(x):
if x < 0:
return -x
return x

2 способ

Самое короткое решение в нашей статье — найти максимум между x и -x. Таким образом результат всегда будет положительным:

def abs2(x):
return max(-x, x)

3 способ

Здесь мы проверяем строку на наличие в ней минуса. Изначально я хотел использовать метод isdigit(), но потом я понял, что метод не считает точку частью числа, поэтому для float в строке метод возвращает False. Поэтому:

​def abs3(x):
if ‘-‘ in str(x):
return -x
return x

4 способ

Этот способ использует условную инструкцию из предыдущей функции, но использует срез, чтобы избавиться от минуса. 3 строка выглядит не очень, приходится дважды менять тип данных результата. По-моему — это ухудшенная версия 3 способа:

def abs4(x):
if ‘-‘ in str(x):
return float(str(x)[1::])
return x

5 способ

Тут мы будем использовать факт того, что операция квадратного корня в Python всегда возвращает положительный результат. Эту операцию не обязательно брать из библиотеки Math, можно просто возвести число в с степень 0.5. Итак:

def abs5(x):
return (x*x)**0.5

6 способ

Здесь мы используем операции со строками, как в 4 способе. Отличие в том, что мы не проверяем строку на наличие минуса. Мы убираем уго, есть он в строке или нет. Метод replace() позволяет убрать все повторения одного символа, что для нас избыточно, но с нулем повторений он тоже работает:

def abs6(x):
return float(str(x).replace(‘-‘, »))

Примечание: говоря про положительные значения, правильнее сказать — положительные или нулевые, но я решил не засорять текст такой мелочью.

Статистика быстродействия

Подведем итоги, узнаем — что же быстрее работает. О том, как замерить время работы программы, я, возможно, расскажу в одной из следующих статей. Ну а пока что приведу статистические данные.

Я измерил время работы данного куска кода, где i — одна из 6 функций.

for j in range(100000):
a = (i(1), i(-1), i(1.0), i(-1.0))

И вот что получилось:

Что у нас по итогу? Худший результат показал 4 способ, неудивительно.Самый очевидный способ — первый, на 2 месте. С большим отрывом лидирует 5 вариант, 100000 повторений за 0.79 сек! Математика быстрее логического оператора if и операций со строками.

Заключение

Я надеюсь, что вам была интересна данная статья, и вы разобрались в теме. Если хотите меня дополнить — пишите в комментариях. Удачи в мире IT!

def my_abs(value):
"""Returns absolute value without using abs function"""
    if value < 5 :
        print(value * 1)
    else:
        print(value * -1)
print(my_abs(3.5))

that’s my code so far but the quiz prints, for example -11.255 and 200.01 and wants the opposite for example it wants 11.255 back and -200.01

asked Jul 26, 2016 at 10:16

Rod Derakhshanian's user avatar

What does 5 have to do with absolute value?

Following your logic:

def my_abs(value):
    """Returns absolute value without using abs function"""
    if value <= 0:
        return value * -1
    return value * 1

print(my_abs(-3.5))
>> 3.5
print(my_abs(3.5))
>> 3.5

Other, shorter solutions also exist and can be seen in the other answers.

answered Jul 26, 2016 at 10:19

DeepSpace's user avatar

DeepSpaceDeepSpace

77.9k11 gold badges106 silver badges151 bronze badges

The solutions so far don’t take into account signed zeros. In all of them, an input of either 0.0 or -0.0 will result in -0.0.

Here is a simple and (as far as I see) correct solution:

def my_abs(value):
    return (value**2)**(0.5)

answered Oct 30, 2018 at 9:36

gaspar's user avatar

2

A simple solution for rational numbers would be

def my_abs(value):
    if value<0:
        return -value
    return value

answered Jul 26, 2016 at 10:20

janbrohl's user avatar

janbrohljanbrohl

2,5861 gold badge16 silver badges15 bronze badges

Why do you want to check if value < 5?

Anyways, to replicate the abs function:

def my_abs(value):
    return value if value >=0 else -1 * value 

answered Jul 26, 2016 at 10:20

Aswin Murugesh's user avatar

Aswin MurugeshAswin Murugesh

10.8k10 gold badges40 silver badges69 bronze badges

A fun one.
if (number < 0) returns a boolean but when you do math with it it’s a 1 or 0. Below written as (a<0)

When the number is less than 0, we can get its positive value by adding 2 times the negative of itself. or just subtract itself twice written as (-a-a)

so when our condition fails it returns 0 which when multiplied by anything is zero so we don’t add anything to our original number.

if our condition passes, we’ll get a 2 times the positive so we can add to our original.

here’s the code, the number you’re trying to get absolute value is a in this case

a = a + (a<0) * (-a-a)

This runs slower than the built in abs() call.
I thought it was faster but it was buggy in my code when I timed it.
the fastest seem to be the if (a<0) then a = -a

answered Jan 17 at 21:41

Tin Tran's user avatar

Tin TranTin Tran

6,1943 gold badges19 silver badges34 bronze badges

num = float(input("Enter any number: "))
if num < 0 :
    print("Here's the absolute value: ", num*-1)
elif num == 0 :
    print("Here's the absolute value: 0")
elif num > 0 :
    print("Here's the absolute value: ", num)

answered Mar 2, 2021 at 7:41

Alex_Fierro2301's user avatar

1

ВОобще модуль числа А в алгебре (вроде) есть арифметический корень из квадрата числа А. Дословная реализация в Питоне не даст желаемого результата так как сменится тип данных (из за операции sqrt )

 >>> from math import sqrt
>>> a = -3
>>> a_modulo = sqrt(a ** 2)
>>> a_modulo
3.0

Решить проблему можно явно — приведением к исходному типу:

 >>> previous_type = type(a)
>>> previous_type(a_modulo)

Но думаю другие форумчане смогут предложить более рациональное решение.

Альтернативное решение (которое наверняка предложат новички) является операции со строками:

 >>> str(a).lstrip('-')
'3'

ну и также приводить к исходному типу нужно. А ну и оно таки бредовое, чего уж говорить.

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Окт. 11, 2016 21:43:50)

Содержание:развернуть

  • Что такое модуль числа
  • Abs
  • Fabs
  • Основные свойства модулей

Запускаю китайскую реплику «ТАРДИС», и вот мы в пятом классе. На доске нарисована числовая ось, а на ней выделен отрезок. Его начало в точке 4, а конец — в 8. Учительница говорит, что длину отрезка можно найти путём вычитания координаты начала отрезка из координаты его конца. Вычитаем, получаем 4, и радуемся — мы нашли длину. Ура! 🎉

Перемещаемся на год вперёд, и там происходит странное: учительница выделяет мелом другой отрезок, но делает это в каком-то неправильном месте — левее точки с цифрой «0». Теперь перед нами старая задача, но с новыми числами и даже буквами: A, B, минус 4 и минус 8. Мы начинаем искать длину отрезка AB = [-4;-8]:

Переводим непонимающий взгляд с получившейся отрицательной длины на довольную улыбающуюся учительницу, а затем на доску. Там наверху, рядом с сегодняшней датой, написана тема урока: «Модуль числа».

Что такое модуль числа

Теперь по-взрослому.

Модуль числа называют абсолютной величиной.

Для вещественных чисел модуль определяется так:

Формула модуля числа для вещественных чисел

Т.е. в любом случае, модуль — число большее или равное 0. Поэтому отрицательная длина в примере хитрой учительницы должна была быть взята по модулю:

Тогда дети бы увидели, что геометрический смысл модуля — есть расстояние. Это справедливо и для комплексных чисел, однако формальное определение для них отличается от вещественного:

, где z — комплексное число: z = x + iy.

В Python для нахождения модуля числа применяются две функции: fabs() из подключаемой библиотеки math и встроенная функция abs().

Abs

В то время как math.fabs() может оперировать только вещественными аргументами, abs() отлично справляется и с комплексными. Для начала покажем, что abs в python работает строго в соответствии с математическим определением.

# для вещественных чисел
print(abs(-1))
print(abs(0))
print(abs(1))

> 1
> 0
> 1

Как видно, с вещественными числами всё в порядке. Перейдём к комплексным.

# для комплексных чисел
print(complex(-3, 4))
print(abs(complex(-3, 4)))

> (-3+4j)
> 5.0

Если вспомнить, что комплексное число выглядит так: z = x + iy, а его модуль вычисляется по формуле:

, то можно без труда посчитать, что sqrt(3**2 + 4**2) действительно равно 5.0.

Можно заметить, что abs() возвращает значения разных типов. Это зависит от типа аргумента:

print(type(abs(1)))
> <class 'int'>

print(type(abs(1.0)))
> <class 'float'>

print(type(abs(complex(1.0, 1.0))))
<class 'float'>

В этом кроется ещё одно отличие abs() от fabs(). Функция из модуля math всегда приводит аргумент к вещественному типу, а если это невозможно сделать — выбрасывает ошибку:

print(type(math.fabs(complex(2,3))))
> TypeError: can't convert complex to float

Fabs

Для начала работы с fabs() необходимо импортировать модуль math с помощью следующей инструкции:

import math

Мы уже выяснили, что fabs() не работает с комплексными числами, поэтому проверим работу функции на вещественных:

print(math.fabs(-10))
print(math.fabs(0))
print(math.fabs(10))

> 10.0
> 0.0
> 10.0

Функция производит вычисления в соответствие с математическим определением, однако, в отличие от abs(), всегда возвращает результат типа float:

print(type(math.fabs(10)))
> <class 'float'>

Основные свойства модулей

# Квадрат модуля = квадрату числа
print(pow(4, 2) == pow(abs(4), 2))
> True

# |x| = |-x|
print(abs(-10) == abs(10))
> True

# Модуль произведения = произведению модулей: |ab|=|a||b|
print(math.fabs(11 * 3) == math.fabs(11) * math.fabs(3))
> True

# Аналогично для деления: |a/b|=|a|/|b|
print(math.fabs(48/8) == math.fabs(48) / math.fabs(8))
> True

# |a ** b| = |a| ** b
print(abs(2 ** 10) == abs(2) ** 10)
> True

И еще несколько важных неравенств:

  • m <= |m|
  • -|m| <= m
  • |m| >= 0
  • |m + n| <= |m| + |n|
  • |m – n| <= |m| + |n|
  • |m| — |n| <= |m + n|
  • |m + n| >= ||m| — |n||
  • |m – n| >= ||m| — |n||

Перейти к содержанию

Картинка к уроку "Вычисление модуля числа в Python"

На чтение 1 мин Просмотров 2.7к. Опубликовано

Для вычисления модуля числа в языке программирования Python можно использовать несколько способов.

Вычисление модуля числа с помощью модуля Math

Самый простой из них — подключить встроенный модуль, предназначенный для работы с математическими операциями — Math.
Для подключения модуля введем:

import math

И после воспользуемся командой:

math.fabs(число или переменная, модуль которого необходимо вычислить)

Рассмотрим конкретный пример вычисления модуля на языке программирования Python:

import math
print(math.fabs(-56))
>>> 56.0

Вычисление модуля числа написанием собственной функции

Для вычисления модуля вещественного числа можно написать простую собственную функцию:

def module(a):
    if a <0:
        a = a*-1
    return a
print(module(-56))
>>> 56

Здесь в первой строке мы объявляем новую функцию module. Далее в функции проверяем, отрицатильное ли число получает функция на входе, и, если это так, то умножаем его на -1. Не зависимо от результата, в конце функция возвращает результат с помощью команды return.

( 1 оценка, среднее 1 из 5 )

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Найти как травит клопов
  • Как найти случайно удаленные фотографии
  • Как в краш репорте майнкрафт найти ошибку
  • Систематическое ядро как составить
  • Как исправить опечатку в иске

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии