Как в питоне убрать минус
Перейти к содержимому

Как в питоне убрать минус

  • автор:

Целые числа int в Python

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

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

  • арифметические операции;
  • побитовые операции;
  • операции сравнения.

Тип int в языке Python представлен классом int() , он позволяет:

  • преобразовать строку в целое число типа int с учетом указанного основания системы счисления (десятичные по основанию 10, шестнадцатеричные по основанию 16, восьмеричные по основанию 8 и двоичные по основанию 2).
  • преобразовать вещественные числа типа float в тип int (отбрасывает дробную часть).
  • преобразовать восьмеричные, шестнадцатеричные и двоичные литералы целых чисел в тип int

Класс int() не сможет преобразовать к типу int :

  • числа типа complex , т.к. нет однозначного способа преобразования данного типа чисел.
  • строку с записью числа с плавающей точкой (вещественного числа)

Примеры преобразования объектов к типу int :

# Преобразование строки с записью # целого числа в десятичной форме к типу int >>> int(' -3 ', base=10) # -3 # При преобразовании десятичных литералов, # записанных в строки, основание можно опускать >>> int(' +5 ') # 5 >>> int(' -15_125') # -15125 # Преобразование типа float в тип `int` >>> int(3.23) # 3 >>> int(1.) # 1 >>> int(3.14e-10) # 0 # Восьмеричные литералы и строки с ними - в тип int >>> int(0o177) # 127 >>> int(' 0o177 ', base=8) # 127 # Шестнадцатеричные литералы и строки с ними - в тип int >>> int(0x9ff) # 2559 >>> int(' 0x9ff ', base=16) # 2559 # Двоичные литералы и строки с ними - в тип int >>> int(0b101010) # 42 >>> int('0b101010', base=2) # 42 

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

>>> 100_000, 0x_FF_FF, 0o7_777 # (100000, 65535, 4095) 

Целые числа еще могут записываться как, шестнадцатеричные (по основанию 16), восьмеричные (по основанию 8) и двоичные (по основанию 2).

  • Шестнадцатеричные литералы начинаются с комбинации символов 0x или 0X, вслед за которыми следуют шестнадцатеричные цифры (0-9 и A-F). Шестнадцатеричные цифры могут вводиться как в нижнем, так и в верхнем регистре.
  • Литералы восьмеричных чисел начинаются с комбинации символов 0o или 0O (ноль и следующий за ним символ «o» в верхнем или нижнем регистре), вслед за которыми следуют восьмеричные цифры (0-7).
  • Двоичные литералы начинаются с комбинации символов 0b или 0B, вслед за которыми следуют двоичные цифры (0 – 1)

Все эти литералы создают объекты целых чисел, они являются всего лишь альтернативными формами записи значений. Для преобразования целого числа в строку с представлением в любой из трех систем счисления можно использовать встроенные функции hex() , oct() и bin()

Методы типа int :

int.bit_length() :

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

>>> n = -37 >>> bin(n) # '-0b100101' >>> n.bit_length() # 6 
def bit_length(self): # двоичное представление: bin(-37) => '- 0b100101' s = bin(self) # удалить начальные нули и знак минус s = s.lstrip('-0b') # len('100101') => 6 return len(s) 
int.bit_count() :

Добавлен в Python 3.10. Возвращает количество единиц в двоичном представлении абсолютного значения целого числа.

>>> n = 19 >>> bin(n) '0b10011' >>> n.bit_count() # 3 >>> (-n).bit_count() # 3 
def bit_count(self): return bin(self).count("1") 

Новое в Python 3.10.

int.to_bytes(length, byteorder, *, signed=False) :

Возвращает массив байтов, представляющих целое число. Параметры length , byteorder являются обязательными:
— length задает необходимое количество байтов,
— byteorder определяет в каком порядке возвращать байты и имеют значения ‘big’ — от старшего к младшему, ‘little’ — от младшего к старшему.
— signed позволяет установить использование дополнительного кода для представления целого числа. Если signed=False и задано отрицательное целое число, то бросается OverflowError .

>>> (1024).to_bytes(2, byteorder='big') # b'\x04\x00' >>> (1024).to_bytes(10, byteorder='big') # b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' >>> (-1024).to_bytes(10, byteorder='big', signed=True) # b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00' >>> x = 1000 >>> x.to_bytes((x.bit_length() + 7) // 8, byteorder='little') # b'\xe8\x03' 

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

int.from_bytes(bytes, byteorder, *, signed=False) :

Возвращает целое число, которое соответствует указанному массиву байтов.
Параметры bytes и byteorder являются обязательными.
— bytes должен быть байто-подобным объектом (строки байтов, массивы байтов, array.array и т.д.)
— byteorder определяет в каком порядке возвращать байты и имеют значения ‘big’ — от старшего к младшему, ‘little’ — от младшего к таршему.
— signed позволяет установить использование дополнительного кода для представления целого числа. Если signed=False и задано отрицательное елое число, то бросается OverflowError .

>>> int.from_bytes(b'\x00\x7f', byteorder = 'big') # 127 >>> int.from_bytes(b'\x00\x7f', byteorder = 'little') # 32512 >>> int.from_bytes(b'\xff\x81', 'big', signed = True) # -127 >>> int.from_bytes([1, 0], 'big') # можно указать "массив" байтов # 256 >>> int.from_bytes([255, 255], 'big') # 65535 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Утиная типизация ‘Duck Typing’
  • Что такое вызываемый объект callable?
  • Как проверить тип переменной/объекта
  • Логический тип данных bool
  • Целые числа int
  • Ограничение длины преобразования целочисленной строки
  • Вещественные числа float
  • Комплексные числа complex
  • Типы последовательностей
  • Список list
  • Кортеж tuple
  • Диапазон range
  • Текстовые строки str
  • Словарь dict
  • Множество set и frozenset
  • Итератор Iterator, протокол итератора
  • Генератор generator и выражение yield
  • Контекстный менеджер with
  • Байтовые строки bytes
  • Байтовый массив bytearray
  • Тип memoryview, буфер обмена
  • Файловый объект file object
  • Универсальный псевдоним GenericAlias
  • Объект объединения Union

Как можно убрать знак — у числа? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 3 года назад .
У меня есть число: -1000 Как мне в итоге получить: 1000?
Отслеживать
задан 19 июл 2020 в 11:15
189 3 3 серебряных знака 16 16 бронзовых знаков
19 июл 2020 в 11:19
Или просто умножить на -1
– user361068
19 июл 2020 в 11:24
примите ответ если он вам помог — галочка слева от ответа
19 июл 2020 в 11:33
print(1000) а вообще задача слишком абстрактно сформулирована
19 июл 2020 в 11:51
@CrazyElf получить => lambda:1000
19 июл 2020 в 14:55

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Функция abs возвращает абсолютную величину числа. Если ей передать отрицательное число, то она вернёт положительное. Если ей передать положительное число, то она вернёт положительное число.

Отслеживать
ответ дан 19 июл 2020 в 14:45
823 5 5 серебряных знаков 9 9 бронзовых знаков

abs(yours) 

Отслеживать
ответ дан 19 июл 2020 в 11:33
USERNAME GOES HERE USERNAME GOES HERE
10.4k 21 21 золотой знак 25 25 серебряных знаков 53 53 бронзовых знака

В случае если попадется положительное число все предложенные операции с -1 дадут противоположенный результат, тоесть добавит знак. Поэтому, думаю стоит ограничиться abs

Как сделать так чтобы при вычитании не уходило в минус?

phaggi

Оберните код в вопросе тегом code для корректного отображения.

Также рекомендую убрать тег «программирование», он тут лишний.

phaggi

Алан Гибизов @phaggi Куратор тега Python
Было бы неплохо показать, как вы пробовали решить свою проблему.
Решения вопроса 1
Сергей Еремин @Sergei_Erjemin
Улыбайся, будь самураем.
Очевидно, что проверить уйдёт в минус или нет. Например так:

kick = random.randint(0, maxkick if maxkick < player2['oranges'] else player2['oranges']) player2['oranges'] = player2['oranges'] - kick

А вообще зависит от того какое распределение значения kick нужно
Ответ написан более двух лет назад
yafir @yafir Автор вопроса

У меня пишет такую ошибку:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
in ()
----> 1 kick = random.randint(0, maxkick if maxkick > player2['oranges'] else player2['oranges'])
2 player2['oranges'] = player2['oranges'] - kick

NameError: name 'random' is not defined

Сергей Еремин @Sergei_Erjemin
ну так импорт рандом не сделал же.

import random kick = random.randint(0, maxkick if maxkick < player2['oranges'] else player2['oranges']) player2['oranges'] = player2['oranges'] - kick

И в первой версии когда конечно > -- не правильно. Нужно
Ответы на вопрос 2

phaggi

Алан Гибизов @phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю

Есть много путей, как это сделать. Можно перед вычитанием проверять, не больше ли вычитаемое уменьшаемого. Можно после вычитания проверять, не стало ли значение меньше нуля, и обнулять. Можно вообще сделать свой тип «только положительные числа», в котором внутри предусмотреть логику контроля, чтоб меньше нуля не становилось - либо обнулялось, либо возвращало ошибку.
Чтобы выбрать, надо понять, зачем и что будет дальше.

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Если вопрос в том, как не уходить в минус (независимо от того, что вычитаем), то можно так:

player2['oranges'] = max(player2['oranges'] - kick, 0)

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Почему не работает кнопка «Переводчик» в тг боте (Telebot, python)?

  • 1 подписчик
  • 16 минут назад
  • 17 просмотров

Модуль числа в Python

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

Модуль числа

Часто в программировании требуется вычислить абсолютное значение числа. Иначе говоря, отбросить знак.

При вычислении модуля возможны 3 ситуации:

  • Когда число больше 0. Если взять его по модулю — не изменится.
  • Модуль нуля так же равен нулю.
  • У отрицательного числа отбрасываем знак. То есть умножаем его на -1.

Но это все справедливо только для действительных чисел. Чему же тогда будет равен модуль комплексных?

Комплексное число состоит из действительной составляющей и мнимой. Геометрически это можно представить как 2 ортогональные оси: действительную и мнимую. Отмечаем на координатных осях требуемую точку. Модулем будет длина отрезка, проведенного из начала координат в эту точку.

Исходя из теоремы Пифагора получаем, что модуль комплексного числа это корень квадратный из суммы квадратов мнимой и действительной частей.

Вычисление

Вычислять модуль можно следующими способами:

  • Используя стандартную функцию abs.
  • С помощью функции fabs библиотеки math.
  • При помощи самостоятельно написанной функции.

Все эти функции работают как в Python 2, так и в Python 3.

abs

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

a = -10 b = abs(a) print(b) print(type(b)) 10

fabs

Можно так же воспользоваться функцией fabs из библиотеки math. Библиотеку можно подключить с помощью from math import fabs .

from math import fabs a = -10 b = fabs(a) print(b) print(type(b)) 10.0

Отличие abs от fabs заключается в том, что функция abs возвращает значение того же типа, что и аргумент. Функция же fabs вначале преобразует тип аргумента к вещественному числу.

Свое решение

Если по каким то причинам нет возможности или желания использовать стандартные функции, то можно написать свое решение.

Например, можно вычислить воспользоваться тернарным оператором.

a = -10 b = a if a > 0 else -a print(b) 10

На основе такого условия сделаем свою функцию.

def my_abs(a): return a if a > 0 else -a print(my_abs(-3)) 3

Модуль комплексного числа

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

Функцией fabs мы не сможем воспользоваться. Если попытаемся это сделать, то получим ошибку приведения комплексного числа к действительному (TypeError).

from math import fabs a = -10-2j b = fabs(a) print(b) Traceback (most recent call last): File "main.py", line 3, in b = fabs(a) TypeError: can't convert complex to float

А вот с помощью abs преобразование удается.

a = -10-2j b = abs(a) print(b) 10.19803902718557

Или же напишем свою функцию:

from math import sqrt def my_abs_complex(c): return sqrt(c.real**2 + c.imag**2) a = -10-2j b = my_abs_complex(a) print(b) 10.198039027185569

Результаты получились одинаковыми. Но нам все равно пришлось подключить библиотеку math для вычисления квадратного корня.

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

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