a='0'
print(int(a)) # OUTPUT IS 0
b='01'
print(int(b)) # OUTPUT IS 1
c='00111'
print(int(c)) # OUTPUT IS 111
Когда я конвертирую строку '0' в int и печатаю, она дает мне 0 . Но когда я конвертирую такие строки, как «0111» или «01», в int, он печатает только все 1, но не 0, почему? и как получить этот 0, я пробовал много вещей, но это не работает
Я хочу, чтобы, когда я ввожу ввод в строку, например «0011», и после преобразования этого ввода в int он должен был дать мне вывод 0011
Итак, если целое число равно 111, почему Python хочет напечатать это как 00111, а не 000000111? Кажется очевидным, что исходное строковое представление больше не имеет значения, если целое число — это просто число.
Не могли бы вы пояснить, почему вы ожидаете, что числовое значение будет включать ведущие нули? Ожидаете ли вы, что ваше гипотетическое int удовлетворит int('001') == int('01')
? Если вы хотите сохранить формат, почему бы вам не придерживаться строк?
Целые числа вообще не содержат цифр имеют. Цифры (десятичные или иные) представляют собой способ представления число. Ожидание контроля количества начальных нулей в целом похоже на ожидание возможности изменить фотографию, проделав операцию над людьми на ней.
Сохраняйте оба значения, т. е. используйте входную строку для представления (печати) и конвертируйте в int для арифметики.
Целые числа не могут иметь ведущие нули. При желании после операции можно добавить нули и преобразовать в строку.
Например
a = "003"
b = "008"
c = str(int(a) + int(b)).zfill(3)
print(c)
Выход
011
@TimBiegeleisen Да, я имею в виду, если это строка, и вам нужно сохранить начальный ноль после операции, такой как сумма
Почему? Потому что 0...01=1. В основном поэтому. Зачем хранить int как 01, если можно просто сохранить 1? Если вы хотите, чтобы нули были впереди, вам нужно будет преобразовать их обратно в строку и добавить их, потому что 0001 не является целым числом.
Вот не совсем серьезный ответ с классом, который дает результат, на который вы надеялись. Этот подкласс int
подсчитывает начальные нули в строке, переданной методу инициализации, и сохраняет ее как атрибут. Затем он использует его для генерации строкового представления.
Только в учебных целях. Не использовать.
Результирующие объекты могут быть добавлены так же, как обычные целые числа, однако результатом сложений, умножений и т. д. являются обычные целые числа (без начальных нулей). Чтобы получить __add__
из сложения, потребуется реализовать метод IntLeadingZeros
дандера. И тогда возникает вопрос, сколько ведущих нулей должно быть в сумме?
Повторяю, не используйте.
class IntLeadingZeros(int):
def __new__(self, value):
return int.__new__(self, value)
def __init__(self, value):
int.__init__(value)
self.nzeros = len(value) - len(value.lstrip('0')) if len(value) > 1 else 0
def __str__(self):
len_str = len(str(int(self)))
return f"{int(self):0{len_str + self.nzeros}d}"
a='0'
print(IntLeadingZeros(a)) # OUTPUT IS 0
b='01'
print(IntLeadingZeros(b)) # OUTPUT IS 01
c='00111'
print(IntLeadingZeros(c)) # OUTPUT IS 00111
Целые числа не имеют начальных нулей, которые не являются значащими цифрами и которых на самом деле нет.