例如:
num = 123401000
def reverse_int(num):
sign = 1
if num > 0:
sign = 1
else:
sign = -1
print(sign)
tmp = abs(num)
print(tmp)
return int(str(tmp)[::-1]) * sign
print(reverse_int(num))
此代码的目的是打印出num
的反面,但是此代码打印出104321
。谁能告诉我为什么没有捕获到最后的零?
答案 0 :(得分:2)
零被捕获。但是,当您最后将其转换回int
时,在数字上000104321
和104321
之间没有区别,并且int
s仅具有一个本机表示形式({{ 1}}和001
不会以不同的方式存储以保留1
s)。如果需要保留这些零,则无法转换回0
,必须将其保留为int
。
您可以采取的一种方法是让str
存储前缀字符串而不是数字,以编写代码:
sign
答案 1 :(得分:0)
一个整数自然不会像字符串那样保留前导零。 0001只是1。在正向转换期间,这是件好事:123401000
变成'123401000'
,而不是'0000123401000'
。
换句话说,任何整数中都有无数个前导零。没有特别的理由让Python打印任意数量的代码(如何知道是001、01还是1?),因此默认情况下不会打印前导零。
您可以访问正确数量的前导零,因此没有什么可以阻止您正确打印它们。您当然不需要将数字作为字符串返回,只需跟踪中间字符串的 length 。让您的函数返回反转的整数和所需的打印宽度:
def reverse_int(num):
sign = 1 if num >= 0 else -1
tmp = num * sign
string = str(tmp)
width = len(string) + (sign == -1)
return int(string[::-1]) * sign, width
现在,使用正确的格式说明符,您可以打印前导零:
num = 123401000
rev, width = reverse_int(num)
print(f'{rev:0{width}d}')
您可以使用较旧的format
函数使此操作更加简洁:
print('{:0{}d}'.format(*reverse_int(num)))
您甚至可以使用真正古老的字符串插值运算符:
print('%0*d' % (width, rev))