将 '01' 字符串转换为 int 仅打印 1 为什么?

Converting '01' string to int prints only 1 why?

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

整数不能有前导零。如果需要,您可以在操作后添加零并将其转换为字符串。
例如

a = "003"
b = "008"
c = str(int(a) + int(b)).zfill(3)
print(c)

输出

011

为什么?因为 0...01=1。这基本上就是原因。 如果只能存储 1,为什么要将 int 存储为 01?如果你想在前面有零,你必须转换回字符串并添加它们,因为 0001 不是一个整数。

这里有一个不完全严肃的答案 class 会产生您希望的输出。 int 的这个 subclass 计算传递给 init 方法的字符串中的前导零,并将其存储为属性。然后它使用它来生成字符串表示。

仅用于教学目的。请勿使用。

生成的对象可以像普通整数一样相加,但是加法、乘法等的结果是普通整数(没有前导零)。为了从加法中产生 IntLeadingZeros,需要实施 __add__ dunder 方法。那么问题就变成了,总和应该有多少个前导零?

重复一遍,不要用

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