将 '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
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