Как отрицательное число сделать положительным python
Перейти к содержимому

Как отрицательное число сделать положительным python

Сделать положительное число

Потребовалось перевести из отрицательной переменной в положительную. Как это сделать в python?

user avatar

Вступление

Дальнейшие примеры будут выглядеть таким образом:

Как перевернуть знак?

В python, чтобы поменять знак какого-либо числа в переменной num , надо записать -num :

Как сделать положительное число?

Быстрый способ

Чтобы перевести любое число в ранг положительных, нужно написать abs(num) :

Почему этот способ самый быстрый?

Этот способ самый быстрый, т.к. здесь используется встроенная функция, написанная на быстром Си, и она будет быстрее любого другого способа с использованием других встроенных функций.

Математический способ

Это более медленный и длинный в написании способ. Для этой задачи не рекомендую его использовать.
Записать можно по-разному, но я приведу два различных способа:

Как это работает?

Чтобы получить модуль числа (то же число, только всегда положительное) число надо возвести в квадрат и извлечь квадратный корень.
В питоне можно по-разному записать эти операции, один способ — ** (возведение в степень), другой — воспользоваться встроенной библиотекой math .
Возведение в 2 степень — возведение в квадрат, а в 0.5 — эквивалентно извлечению квадратного корня.
Также для возведения в степень можно использовать функцию math.pow , а для извлечения квадратного корня — math.sqrt .

Вывод

Наш выбор для создания положительного числа — использовать функцию abs !
Соединяя инверсию знака с созданием положительного числа мы получаем следующее:

Чтобы перевести любое число num в ранг отрицательных, надо записать -abs(num)

Ремарки

Для простоты понимания я опустил деталь, что при использования математического способа результат — float , а не int , и при выводе .0 добавляется к числу.

Целые числа — int

Python поддерживает десятичные, двоичные, восьмеричные и шестнадцатеричные целые числа, причем не накладывается никаких ограничений на величину (длину) числа, лишь бы хватило памяти для его хранения.

Десятичные целые числа создаются, как обычно, с помощью десятичных цифр:

причем, в десятичной системе счисления ни одно число, кроме нуля не может начинаться с цифры \(0\), что в общем-то и ежу понятно, но это значит что отбрасывания незначащих нулей не происходит, а их наличие приводит к ошибке:

Двоичные числа состоят из префикса 0b (или 0B ) и двоичных цифр: \(0\) и \(1\):

Восьмеричные числа начинаются с префикса 0o ( 0O ) и могут содержать только восьмиричные цифры: \(0\), \(1\), \(2\), \(3\), \(4\), \(5\), \(6\) и \(7\):

Шестнадцатеричные числа начинаются с префикса 0x ( 0X ) и могут содержать как все десятичные цифры, так и символы латинского алфавита: a, b, c, d, e, f (или A, B, C, D, E, F ), которые в данном случае выступают в роли цифр:

В языках со строгой типизацией необходимо указывать как тип числа, так и то, что создаваемый объект сам является числом. Но в Python такой необходимости нет, интерпретатор сам, на основе анализа литералов целых чисел, способен понять что перед ним: число или нет, целое или вещественное, восьмеричное или двоичное.

Кстати, благодаря встроенной функции int() мы можем перевести в десятичную систему счисления, любое число представленное в другой системе счисления с основанием меньшим \(37\). Интересующее число указывается в виде строки в первом аргументе, а система счисления в котором оно представлено в виде целого числа во втором аргументе:

Арифметические операции

Целые числа поддерживают следующие математические операции, которые отсортированы по убыванию приоритета:

Операция Результат Замечание
1 x ** y возводит x в степень y (I)
2 pow(x, y[, z]) возводит x в степень y по модулю z, где z – необязательный аргумент (I)
3 divmod(x, y) возвращает кортеж с парой чисел (x // y, x % y) (II)
4 x.conjugate() возвращает \(\bar\) — число, которое комплексно сопряжено с \(x\)
5 complex(re, im) преобразует re в комплексное число (по умолчанию im = 0 ) (VI)
6 float(x) преобразует x в вещественное число (число с плавающей точкой) (VI)
7 int(x) переобразует x в целое число, представленное в десятичной системе счисления (V)(VI)
8 abs(x) абсолютное значение (модуль) числа x
9 +x делает число x положительным
10 -x делает число x отрицательным
11 x % y остаток от деления x на y (II)
12 x // y результат целочисленного деления x на y (III) (II)
13 x / y результат «истинного» деления x на y (IV)
14 x * y произведение x и y
15 x — y разность x и y
16 x + y сумма x и y

Важно: приоритет математических операций выше побитовых логических операций и операций сравнения.

I. возведение \(0\) в степень \(0\) возвращает \(1\):

Извлечение корней четной степени из отрицательных чисел не вызывает ошибки, а возвращает комплексное число:

II. функция divmod() и операция % , // не работают для комплексных чисел. Для вас это может быть и очевидно, но не пользователя для которого вы пишите программу.

III. если оба числа типа int то и результат будет типа int. Данная операция всегда возвращает целое число, т.е. если число x можно представить в виде d*y + r , то x//y = d (r – остаток от деления). Так же следует иметь ввиду, что результат данной операции всегда округляется в сторону минус бесконечности:

Это немного сбивает с толку, но проверив результат по формуле x = d*y + r , вы убедитесь что все верно.

IV. даже если оба числа типа int, то результат все равно будет преобразован к типу float.

V. встроенная функция int() пропускает числа (объекты) типа int «как есть», не выполняя над ними, абсолютно никаких действий.

VI. строго говоря эти функции не являются математическими, но они могут учавствовать в математических выражениях Python и поэтому должны обладать приоритетом.

Логические побитовые операции

Фактически, если число можно перевести в двоичную систему счисления, значит его можно рассматривать как двоичные данные. Учитывая, что такие данные состоят из нулей и единиц, которые интерпретируются как логические значения True и False, мы можем выполнять над ними логические операции. Логические операции выполняются по отдельным битам соответствующих разрядов. Если в операции учавствуют числа с разным количеством разрядов, то недостающие разряды дополняются нулями слева.

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

(побитовое НЕ) примененного, скажем, к числу 0b111 должно быть число 0b000 , но вместо этого мы видим число дополнительный код которого соответствует данной операции:

В таблице перечислены все побитовые операции в порядке убывания их приоритета:

Важно: приоритет побитовых операций ниже математически, но выше операций сравнения.

I. унарные операции

, + и — имеют одинаковый приоритет.

II. отрицательное значение в выражеиях x << n и x >> n приведет к ошибке и вызовет исключение ValueError.

III. операция x << n эквивалентна команде x*pow(2, n) , но проверка переполнения в этой команде не выполняется:

IV. операция x >> n эквивалентна команде x // pow(2, n) , но проверка переполнения в этой команде не выполняется:

Операции сравнения

Для сравнения чисел, доступно \(8\) операций сравнения, причем все они имеют одинаковый приоритет:

Операция Результат Замечание
1 x < y True если x меньше y, иначе False
2 x <= y True если x меньше или равно y, иначе False
3 x > n True если x больше y, иначе False
4 x >= n True если x больше или равно y, иначе False
5 x == y True если x равно y, иначе False
6 x != y True если x не равно y, иначе False
7 x is y True если x и y это один и тот же объект, иначе False
8 x is not y True если x и y это не один и тот же объект, иначе False

Важно: приоритет операций сравнения ниже математических и побитовых операций.

Наряду с оператором сравнения значений чисел == и != , в Python имеются операторы is и is not , которые позволяют выяснить, являются сравниваемые значения одним и тем же объектом или нет. Например:

Не смотря на то, что значения a и b равны, в памяти компьютера они хранятся как разные объекты:

Однако, придумать для данного оператора сколь-нибудь полезное практическое применение, относительно математических операций я не могу.

В Python сравнение x > y and y > z является эквивалентным x > y > z т.е. сравнения связаные оператором and в произвольные цепочки могут быть записаны в более компактной форме. Выполнение таких выражений начинается слева направо и останавливается как только будет получено первое значение False. Это означает, что если в выражении x > y > z сравнение x > y вернет False то сравнение y > z выполняться не будет.

Методы целых чисел

Целые числа – это объекты, которые обладают следующими методами:

Параметр length задает необходимое количество байтов, а byteorder определяет в каком порядке возвращать байты: значение ‘big’ – от старшего к младшему, ‘little’ – от младшего к старшему. Оба параметра являются обязательными:

Если указанных байтов недостаточно для представления числа, то будет вызвано исключение OverflowError. А что бы узнать и (или) использовать порядок байтов который использует машина, выполняющая код используйте sys.byteorder .

Параметр signed позволяет установить использование дополнительного кода для отрицательных целых чисел:

Если signed = False , а число является отрицательным, то будет вызвано исключение OverflowError.

Встроенные функции Python 3 для работы с числами

Python 3 предоставляет большое количество встроенных функций, которые вы можете использовать в программах. Некоторые из них позволяют преобразовывать типы данных, другие предназначены только для одного типа данных (например, строк).

Данное руководство ознакомит с некоторыми встроенными функциями для работы с числовыми типами данных в Python 3:

  • abs() – абсолютная величина.
  • divmod() – частное и остаток от деления.
  • pow() – возведение в степень.
  • round() – округление десятичного числа.
  • sum() – сумма членов изменяемой последовательности.

Все эти методы делают разработку программы более гибкой.

Абсолютная величина

Встроенная функция abs() возвращает абсолютную величину указанного числа. В математике абсолютная величина, или модуль числа – это неотрицательное число, выражающее расстояние от этого числа до нуля. Например, абсолютная величина 15 – это 15, а -75 – число 75. Абсолютная величина 0 равна 0.

Абсолютная величина – важный аспект вычислений и анализа.

Рассмотрим такой пример: вам нужно проехать 58 км, вместо этого вы проехали 93 км. Чтобы узнать, сколько км осталось, нужно вычесть из расстояния (58 км) количество километров, которое вы проехали (93 км). В данном случае в результате будет отрицательное число. Но проехать отрицательное количество километров невозможно. Попробуйте решить эту задачу с помощью abs():

km_from_origin = 58 # расстояние до пункта назначения
km_travelled = 93 # преодоленное расстояние (больше)
km_to_go = km_from_origin — km_travelled
print(km_to_go) # покажет, сколько км осталось (отрицательное число)
print(abs(km_to_go)) # выведет абсолютную величину отрицательного числа
-35
35

Без функции abs() в результате получится -35, отрицательное число. Функция abs() возвращает положительное число, так как абсолютная величина всегда представлена положительным числом или нулём.

Функция abs() используется в тех ситуациях, когда результат не может быть отрицательным числом.

Частное и остаток от деления

Деление floor (возвращает частное), и деление по модулю (возвращает остаток), тесно связаны между собой, потому функция, которая сочетает в себе обе эти операции, будет очень полезна.

Для этого Python предоставляет встроенную функцию divmod().

Функция divmod() работает с двумя значениями:

Она выполняет такие операции:

Предположим, вы написали книгу, которая состоит из 80000 слов. На одной странице можно разместить либо 300, либо 250 слов. Нужно посчитать, сколько страниц получится в первом и во втором варианте. Попробуйте сделать это с divmod():

words = 80000 # количество слов в книге
per_page_A = 300 # вариант А, 300 слов на странице
per_page_B = 250 # вариант B, 250 слов на странице
print(divmod(words,per_page_A))
print(divmod(words,per_page_B))
(266, 200)
(320, 0)

Если на каждой странице будет по 300 слов, в книге будет 266 страниц, и ещё одна страница будет заполнена на две трети (итого 267 страниц). Если на каждой странице будет по 250 слов, в книге будет ровно 320 страниц.

Функция divmod() может работать с целыми числами и с числами с плавающей точкой. Например:

a = 985.5
b = 115.25
print(divmod(a,b))
(8.0, 63.5)

Где 8.0 – частное, 63.5 – остаток.

Возведение в степень

В Python существует оператор ** для возведения числа в степень. Но также вы можете использовать встроенную функцию pow().

К примеру, вы исследуете бактерии, и вам нужно подсчитать, сколько бактерий будет в конце дня, если утром была одна бактерия, а количество бактерий в час увеличивается вдвое.

hours = 24
total_bacteria = pow(2,hours)
print(total_bacteria)
16777216

К примеру, в обычной математике 3 в кубе записывается так:

Это равно 3 x 3 x 3 (27).

Чтобы вычислить 3³ в Python, нужно записать это так:

Округление десятичного числа

При работе с десятичными числами важно иметь возможность быстро округлить его до N знаков после запятой. Строенная функция round() выполняет эту задачу. При этом ей необходимо два числа: A – число, которое нужно округлить, B – количество знаков после запятой.

i = 17.34989436516001
print(round(i,4))
17.3499

Попробуйте написать простую программу, которая будет подсчитывать чаевые. К примеру, три человека хотят разделить счет в ресторане в $87.93 и оставить 20% чаевых.

bill = 87.93 # общая сумма счёта
tip = 0.2 # 20% чаевых
split = 3 # количество человек
total = bill + (bill * tip)
each_pay = total / split # посчитает, сколько должен заплатить каждый
print(each_pay) # сумма без округления
print(round(each_pay,2)) # округлённая сумма
35.172000000000004
35.17

В результате получилось число с большим количеством десятичных знаков. Функция round() округлила его до двух знаков после запятой.

Чтобы округлить десятичное число до целого числа, задайте 0 в качестве второго параметра (в данном случае тип данных не преобразуется, после запятой будет 0):

Функция round() может работать и с целыми числами. Если в качестве первого параметра задано целое число, в результате функция также вернёт целое число.

Сумма членов

Функция sum() позволяет вычислить сумму членов составных числовых типов данных: списков, кортежей и словарей.

some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9] print(sum(some_floats))
49.5

Точно так же это работает с кортежами и словарями:

print(sum((8,16,64,512))) # сумма членов кортежа
print(sum(<-10: 'x', -20: 'y', -30: 'z'>)) # сумма членов словаря
600
-60

Функции sum() можно задать два аргумента. Второй аргумент – это число, которое нужно прибавить к сумме членов списка/кортежа/словаря. Например:

some_floats = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9] print(sum(some_floats, 0.5))
print(sum(<-10: 'x', -20: 'y', -30: 'z'>,60))
50.0
0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *